已阅读5页,还剩94页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章C 简单程序设计 清华大学 C 语言程序设计 2 本章主要内容 C 语言概述基本数据类型和表达式数据的输入与输出算法的基本控制结构自定义数据类型 3 C 语言的起源 BjarneStroustrup用Simula语言写了一个模拟器 程序编写顺利 但Simula的实现太糟 编译与运行非常慢 好工具 1 具有Simula那样对程序组织的支持 类 类的层次结构等 2 编译 运行速度快 3 可移植性好C非常流行 很多操作系统都是用C编写 移植性和灵活性非常好 C 语言的设计是想为系统程序设计提供Simula的程序组织功能 又提供C语言的高效与灵活性 该目标当时不具有任何创新性 但它非常成功 C 语言概述 4 C 语言的产生 C 是从C语言发展演变而来的 首先是一个更好的C引入了类的机制 最初的C 被称为 带类的C 1983年正式取名为C 从1989年开始C 语言的标准化工作于1994年制定了ANSIC 标准草案于1998年11月被国际标准化组织 ISO 批准为国际标准 2003年发布了C 标准第二版 成为目前的C C 仍在不断发展 下一次标准发布预计在2009年 C 语言概述 5 C 的特点 全面兼容C它保持了C的简洁 高效和接近汇编语言等特点对C的类型系统进行了改革和扩充C 也支持面向过程的程序设计 不是一个纯正的面向对象的语言支持面向对象的方法 C 语言概述 6 C 语言同Java和C 的关系 C 是Java和C 的始祖 语法和面向对象模式相似 C Java和C 是为解决不同类型问题而设计的 C 主要用来编写高性能软件 Java和C 用于实现有跨平台需求的应用开发 7 C 程序实例 例2 1 2 1 cppc 程序结构由注释 编译预处理和程序主体组成 includeusingnamespacestd intmain main 函数是C 程序入口点 必须 cout Hello n cout是预定义的流类对象cout Welcometoc n 是流操作符return0 大括号把函数体与其它部分分隔开运行结果 Hello Welcometoc C 语言概述 8 C 字符集 大小写的英文字母 A Z a z数字字符 0 9特殊字符 空格 C 语言概述 9 词法记号 关键字C 预定义的单词标识符程序员声明的单词 它命名程序正文中的一些实体文字在程序中直接使用符号表示的数据操作符用于实现各种运算的符号分隔符 用于分隔各个词法记号或程序正文空白符空格 制表符 TAB键产生的字符 换行符 Enter键所产生的字符 和注释的总称 C 语言概述 10 标识符的构成规则 以大写字母 小写字母或下划线 开始 可以由以大写字母 小写字母 下划线 或数字0 9组成 大写字母和小写字母代表不同的标识符 不能用C 关键字 不能中间有空格 C 语言概述 11 C 简单程序举例 计算圆周长和面积 程序功能 计算圆周长与面积 includeusingnamespacestd intmain constfloatPI 3 1415926 float型常量floatr length 0 area 0 用float型常量初始化变量cin r 输入圆的半径length 2 PI r 计算圆的周长cout Length length endl 输出圆的周长area PI r r 计算圆的面积cout Area area endl 输出圆的面积return0 12 简单的输入 输出 向标准输出设备 显示器 输出例 intx doubley cout x cin y 13 数据类型 C 基本数据类型 整数类型 short int long unsignedint unsignedshort unsignedlong实数类型 float double longdouble字符类型 char布尔型 bool 14 数据类型 常量与变量 常量是指在程序运行的整个过程中其值始终不可改变的量 变量是指在程序的执行过程中其值可以变化的量 变量是需要用名字来标识的 变量一定要先声明其类型和名称 然后才使用 符号常量在使用前也要先声明 而且声明的同时就要初始化 程序中常量不能再被赋值 常量和变量都有数据类型 15 数据类型 常量与变量 includeusingnamespacestd intmain constintPRICE 30 intnum total floatv r h num 10 total num PRICE cout total endl r 2 5 h 3 2 v 3 14159 r r h cout v endl Page15 基本数据类型和表达式 16 includeusingnamespacestd intmain constintPRICE 30 intnum total floatv r h num 10 total num PRICE cout total endl r 2 5 h 3 2 v 3 14159 r r h cout v endl 数据类型 整型数据 整型常量 shortunsignedshort2字节int unsignedint4字节longunsignedlong4字节 整型变量 基本数据类型和表达式 17 数据类型 整型数据及取值范围 类型说明符位数数值范围短整short16 32768 32767基本int32 231 231 1 长整long32 231 231 1 无符号unsignedshort160 65535unsignedint320 232 1 unsignedlong320 232 1 基本数据类型和表达式 18 数据类型 整型数值溢出例子 includeusingnamespacestd intmain shortinti signedshort类型整数 32768 32767 shortunsignedintj unsignedshort类型整数 0 65535 j 50000 i j 将unsignedshort赋值给signedshort变量cout Theshortintis i endl 整型数值溢出cout Theshortunsignedintis j endl return0 Theshortintis 15536Theshortunsignedintis 50000 19 includeusingnamespacestd intmain constintPRICE 30 intnum total floatv r h num 10 total num PRICE cout total endl r 2 5 h 3 2f v 3 14159 r r h cout v endl 数据类型 实型数据 实型常量 float4字节3 4 10 387位有效数字double8字节1 7 10 30815位有效数字longdouble8字节1 7 10 30815位有效数字 实型变量 缺省为double型后缀F 或f 为float型后缀L 或l 为longdouble型 基本数据类型和表达式 20 数据类型 字符型数据 一 字符常量单引号括起来的一个字符 如 a D 字符变量用来存放字符常量例 charc1 c2 c1 a c2 A 字符数据在内存中的存储形式以ASCII码存储 即以整数表示 占1字节 用7个二进制位 Page20 基本数据类型和表达式 21 字符数据的使用方法字符数据和整型数据之间可以运算 charc 65 字符数据与整型数据可以互相赋值 chard c 1 字符串常量例 CHINA a a 所以 charc c a Page21 数据类型 字符型数据 二 基本数据类型和表达式 22 数据类型 布尔型数据 布尔型变量的说明 例 boolflag 布尔型数据的取值 只有false和true两个值 基本数据类型和表达式 23 数据类型 变量初始化 例 inta 3 doublef 3 56 charc a intd 5 Page23 基本数据类型和表达式 24 变量的存储类型 auto属于一时性存储 其存储空间可以被若干变量多次覆盖使用 变量声明的默认存储类型 register存放在通用寄存器中 extern在所有函数和程序段中都可引用 static在内存中是以固定地址存放的 在整个程序运行期间都有效 基本数据类型和表达式 25 算术运算符与算术表达式 基本算术运算符 若整数相除 结果取整 取余 操作数为整数 优先级与结合性先乘除 后加减 同级自左至右 自增 自减 例 i j 5 error 自增 自减操作数不能是常数 Page25 基本数据类型和表达式 26 赋值运算符和赋值表达式简单的赋值运算符 举例sum sum 5表达式的类型等号左边对象的类型表达式的值等号左边对象被赋值后的值 Page26 基本数据类型和表达式 27 赋值运算符和赋值表达式复合的赋值运算符 有10种复合运算符 例a 3等价于a a 3x y 8等价于x x y 8 基本数据类型和表达式 28 赋值运算符和赋值表达式 赋值表达式举例 a 5表达式值为5a b c 5表达式值为5 a b c均为5a 5 c 6 表达式值为11 a为11 c为6a b 4 c 6 表达式值为10 a为10 b为4 c为6a b 10 c 2 表达式值为5 a为5 b为10 c为2a a a a相当于a a a a a a Page28 基本数据类型和表达式 29 逗号运算和逗号表达式 格式表达式1 表达式2 表达式n求解顺序及结果先求解1表达式 再求解表达式2 再求解表达式n 最终结果为表达式n的值例a 3 5 a 4最终结果为60 Page29 基本数据类型和表达式 30 关系运算与关系表达式 关系运算是比较简单的一种逻辑运算 优先次序为 优先级相同 高 优先级相同 低 关系表达式是一种最简单的逻辑表达式其结果类型为bool 值只能为true或false 例如 a b c a b x y 3注意 与 在使用中不要搞错 同时注意四舍五入所带来的逻辑错误 基本数据类型和表达式 31 关系运算 四舍五入带来的逻辑错误 includeusingnamespacestd intmain doublex 10 7 0 cout x x endl if x 1 142857142857 cout x 10 7 0 n 存在四舍五入带来的逻辑错误elsecout xdoesnotequal10 7 0 n return0 结果 x 1 42857xdoesnotequal10 7 0 32 逻辑运算与逻辑表达式 逻辑运算符 非 与 或 优先次序 高 低逻辑表达式例如 a b x y 其结果类型为bool 值只能为true或false 基本数据类型和表达式 33 条件运算符与条件表达式 一般形式表达式1 表达式2 表达式3表达式1必须是bool类型执行顺序先求解表达式1 若表达式1的值为true 则求解表达式2 表达式2的值为最终结果若表达式1的值为false 则求解表达式3 表达式3的值为最终结果例 x a b a b 基本数据类型和表达式 34 条件运算符与条件表达式 注意 条件运算符优先级高于赋值运算符 低于逻辑运算符和关系运算符 表达式2 3的类型可以不同 条件表达式的最终类型为2和3中较高的类型 例 x a b a b 基本数据类型和表达式 35 sizeof运算符 语法形式sizeof 类型名 或sizeof 表达式 结果值 类型名 所指定的类型或 表达式 的结果类型所占的字节数 例 sizeof short sizeof x 基本数据类型和表达式 36 位运算 按位与 运算规则将两个运算量的每一个位进行逻辑与操作举例 计算3 基本数据类型和表达式 37 位运算 按位或 运算规则将两个运算量的每一个位进行逻辑或操作举例 计算3 53 000000115 000001013 5 00000111用途 将某些位置1 其它位不变 例如 将int型变量a的低字节置1 a a 0 xff 基本数据类型和表达式 38 位运算 按位异或 运算规则两个操作数进行异或 若对应位相同 则结果该位为0 若对应位不同 则结果该位为1 举例 计算071 052071 00111001052 00101010071 052 00010011 基本数据类型和表达式 39 位运算 按位异或 用途 使特定位翻转 与0异或保持原值 与1异或取反 例如 要使01111010低四位翻转 01111010 0000111101110101 基本数据类型和表达式 40 位运算 取反 单目运算符 对一个二进制数按位取反 例 025 0000000000010101 025 1111111111101010 基本数据类型和表达式 41 位运算 移位 左移运算 右移后 低位 舍弃高位 无符号数 补0有符号数 补 符号位 基本数据类型和表达式 42 运算符优先级 括号 sizeof 位运算 赋值运算逗号运算 低 高 基本数据类型和表达式 加括号强制优先级把复杂算式分解 43 混合运算时数据类型的转换 隐含转换 一些二元运算符 算术运算符 关系运算符 逻辑运算符 位运算符和赋值运算符 要求两个操作数的类型一致 在算术运算和关系运算中如果参与运算的操作数类型不一致 编译系统会自动对数据进行转换 即隐含转换 基本原则是将低类型数据转换为高类型数据 charshortintunsignedlongunsignedlongfloatdouble低高 基本数据类型和表达式 44 混合运算时数据类型的转换 隐含转换 当参与运算的操作数必须是bool型时 如果操作数是其它类型 编译系统会自动将非0数据转换为true 0转换为false 赋值运算要求左值与右值的类型相同 若类型不同 编译系统会自动将右值转换为左值的类型 基本数据类型和表达式 45 混合运算时数据类型的转换 强制类型转换 语法形式 类型说明符 表达式 或 类型说明符 表达式强制类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型 例如 floatc inta 1 b 5 c float a float b 或c float a float b 基本数据类型和表达式 46 语句 语句是程序的基本组成单元 它实现了程序的功能 表达式是为语句所用 声明语句表达式语句选择语句循环语句复合语句 47 表达式语句 格式 表达式 表达式语句与表达式的区别 表达式可以包含在其它表达式中 而语句不可 例 if a b 0 t a 不可写为 if a b 0 t a error 语句 48 复合语句 将多条语句用一对大括号包围 便构成一个复合语句 例如 sum sum i i 语句 49 顺序结构分支结构循环结构 算法的基本控制结构 50 如何解决分支问题 例2 2输入一个年份 判断是否闰年 如果是闰年 输出闰年信息 如果不是闰年 输出不是闰年信息 算法的基本控制结构 includeusingnamespacestd intmain intyear boolIsLeapYear cout year IsLeapYear year 4 0 51 运行结果 Entertheyear 20002000isaleapyear 52 53 if 表达式 语句例 if x y couty cout x elsecout y if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 else语句n if语句 三种形式 算法的基本控制结构 54 如何解决多分支问题 例2 3输入两个整数 比较两个数的大小 算法的基本控制结构 includeusingnamespacestd intmain intx y cout x y if x y couty endl elseif x y cout x y endl elsecout x y endl return0 55 运行结果1 Enterxandy 58xy 56 57 一般形式if if 语句1else语句2elseif 语句3else语句4注意语句1 2 3 4可以是复合语句 每层的if与else配对 或用 来确定层次关系 算法的基本控制结构 58 特殊的多分支结构 例2 4输入一个0 6的整数 转换成星期 并输出活动内容 算法的基本控制结构 includeusingnamespacestd intmain intday cin day switch day case0 cout 星期日 购物 endl break case1 cout 星期一 微积分课 endl break case2 cout 星期二 物理课 endl break case3 cout 星期三 英语课 endl break case4 cout 星期四 班会 endl break case5 cout 星期五 体育 endl break case6 cout 星期六 老乡聚会 endl break default cout 数据非法 endl return0 59 60 一般语法形式switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句ndefault 语句n 1 switch语句 执行顺序以case中的常量表达式值为入口标号 由此开始顺序执行 因此 每个case分支最后应该加break语句 算法的基本控制结构 61 使用switch语句应注意的问题 case分支可包含多个语句 且不用 表达式 判断值都是int型或char型 若干分支执行内容相同可共用一组语句 算法的基本控制结构 62 如何有效地完成重复工作 例2 5求自然数1 10之和分析 本题需要用累加算法 累加过程是一个循环过程 可以用循环语句实现 While语句 do while语句 for语句 算法的基本控制结构 includeusingnamespacestd intmain inti 1 sum 0 while i 10 sum i 相当于sum sum i i cout sum sum endl 运行结果 sum 55 63 64 while语句 语法形式while 表达式 语句 执行顺序先判断表达式的值 为true时 再执行语句 算法的基本控制结构 65 先执行循环体 后判断条件的情况 例2 6输入一个整数 将各位数字反转后输出 算法的基本控制结构 includeusingnamespacestd intmain intn right digit newnum 0 cout n cout Thenumberinreverseorderis do right digit n 10 取出右边的数字cout right digit n 10 while n 0 cout endl return0 66 运行结果 Enterthenumber 365Thenumberinreverseorderis563 67 68 do while语句 一般语法形式do语句while 表达式 执行顺序先执行循环体语句 后判断条件 表达式为true时 继续执行循环体与while语句的比较 While语句执行顺序先判断表达式的值 为true时 再执行语句 算法的基本控制结构 对比下列程序 程序1 includeusingnamespacestd intmain inti sum 0 cin i while i 10 sum i i cout sum sum endl 算法的基本控制结构 程序2 includeusingnamespacestd intmain inti sum 0 cin i do sum i i while i 10 cout sum sum endl 69 70 for语句 语法形式 for 表达式1 表达式2 表达式3 语句 算法的基本控制结构 71 例2 8 输入一个整数 求出它的所有因子 算法的基本控制结构 includeusingnamespacestd intmain intn k cout n cout Number n Factors for k 1 k n k if n k 0 算法cout k cout endl return0 72 运行结果1 Enterapositiveinteger 36Number36Factors123469121836运行结果2 Enterapositiveinteger 7Number7Factors17 73 74 例2 9编写程序输出以下图案 算法的基本控制结构 includeusingnamespacestd intmain inti j n 4 for i 1 i n i 输出前4行图案 for j 1 j 30 j cout 在图案左侧空30列for j 1 j 8 2 i j cout for j 1 j 2 i 1 j cout cout endl 75 for i 1 i n 1 i 输出后3行图案 for j 1 j 30 j cout 在图案左侧空30列for j 1 j 7 2 i j cout cout endl 76 77 循环结构与选择结构相互嵌套 includeusingnamespacestd intmain intn for n 100 n 200 n if n 3 0 cout n return0 算法的基本控制结构 78 例2 10 读入一系列整数 统计出正整数个数i和负整数个数j 读入0则结束 分析 需要读入一系列整数 但是整数个数不定 要在每次读入之后进行判断 因此使用while循环最为合适 循环控制条件应该是n 0 由于要判断数的正负并分别进行统计 所以需要在循环内部嵌入选择结构 算法的基本控制结构 includeusingnamespacestd intmain inti 0 j 0 n cout n while n 0 if n 0 i if n n cout 正整数个数 i 负整数个数 j endl 79 80 break和continue语句 break语句使程序从循环体和switch语句内跳出 继续执行逻辑上的下一条语句 不宜用在别处 continue语句结束本次循环 接着判断是否执行下一次循环 算法的基本控制结构 81 includeusingnamespacestd intmain cout Theevennumbersareasfollows endl for inti 0 i 20 i if i 2 continue break 根据条件使用continue结束本次循环cout i return0 82 自定义数据类型 C 语言不仅有丰富的内置基本数据类型 而且允许声明自定义数据类型 枚举类型结构类型联合类型类类型而且使用类型定义语句可以为一个已有数据类型定义多个别名 83 typedef语句 为一个已有的数据类型另外命名 注意并没有实际定义一个新的数据类型 目的是增加程序的可读性 语法形式typedef已有类型名新类型名表 例如typedefunsignedintsize t size tlen1 typedeflongtime ttime tstart time 自定义数据类型 84 枚举类型 enum 只要将需要的变量值一一列举出来 便构成了一个枚举类型 枚举类型的声明形式如下 enum枚举类型名 变量值列表 例如 enumweekday SUN MON TUE WED THU FRI SAT weekdaya1 a1 SUN 通常使用枚举方式创建符号常量 自定义数据类型 85 枚举类型 enum 枚举类型应用说明 对枚举元素按常量处理 不能对它们赋值 例如 不能写 SUN 0 枚举元素具有缺省值 它们依次为 0 1 2 也可以在声明时另行指定枚举元素的值 如 enumweekday SUN 7 MON 1 TUE WED THU FRI SAT 枚举值可以进行关系运算 整数值不能直接赋给枚举变量 如需要将整数赋值给枚举变量 应进行强制类型转换 自定义数据类型 86 例2 11 设某次体育比赛的结果有四种可能 胜 win 负 lose 平局 tie 比赛取消 cancel 编写程序顺序输出这四种情况 分析 由于比赛结果只有四种可能 所以可以声明一个枚举类型 声明一个枚举类型的变量来存放比赛结果 自定义数据类型 includeusingnamespacestd enumgame result WIN LOSE TIE CANCEL intmain game resultresult game resultomit CANCEL intcount for count WIN count CANCEL count result game result count if result omit cout Thegamewascancelled n else cout Thegamewasplayed if result WIN cout andwewon if result LOSE cout andwelost cout n return0 87 运行结果Thegamewasplayedandwewon Thegamewasplayedandwelost ThegamewasplayedThegamewascancelled 88 89 结构体 结构的声明 结构的概念结构是由不同数据类型的数据组成的集合体 声明结构类型struct结构名 数据类型成员名1 数据类型成员名2 数据类型成员名n 自定义数据类型 90 结构体 结构的声明 举例 structstu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年学生寝室卫生的管理制度细则
- 速写的课程设计
- 二零二五版电商平台电商平台数据分析与产品优化合同3篇
- 年度特种变压器战略市场规划报告
- 2025年度社区停车位产权转让协议范本4篇
- 2025年度锌锭国际贸易结算服务合同3篇
- 2025年度智能大楼能源管理系统施工合同4篇
- 老虎画画贺卡课程设计
- 二零二五版共享单车运营管理服务合同4篇
- 2025年度个人别墅买卖合同范本8篇
- 《酸碱罐区设计规范》编制说明
- 桥梁监测监控实施方案
- 书籍小兵张嘎课件
- 艺术哲学:美是如何诞生的学习通超星期末考试答案章节答案2024年
- 北京海淀区2025届高三下第一次模拟语文试题含解析
- 量子医学治疗学行业投资机会分析与策略研究报告
- 多重耐药菌病人的管理-(1)课件
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 环境监测对环境保护的意义
- 2023年数学竞赛AMC8试卷(含答案)
- 2023年十天突破公务员面试
评论
0/150
提交评论