已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章C 简单程序设计 河海大学邰非 目录 2 1C 语言概述2 2基本数据类型和表达式2 3数据的输入与输出2 4算法的基本控制结构2 5自定义数据类型2 6深度探索2 7小结 2 2 1 1C 的产生 C 是从C语言发展演变而来的 首先是一个更好的C引入了类的机制 最初的C 被称为 带类的C 1983年正式取名为C 从1989年开始C 语言的标准化工作于1994年制定了ANSIC 标准草案于1998年11月被国际标准化组织 ISO 批准为国际标准 成为目前的C 3 2 1C 语言概述 于2003年制定了C 第二版于2011年C 11标准推出 4 2 1C 语言概述 2 1 2C 的特点 兼容C它保持了C的简洁 高效和接近汇编语言等特点对C的类型系统进行了改革和扩充 比C更加安全C 也支持面向过程的程序设计 不是一个纯正的面向对象的语言支持面向对象的方法 5 2 1C 语言概述 2 1 3C 程序实例 例2 1 6 2 1C 语言概述 2 1 cpp includeusingnamespacestd intmain cout Hello endl cout Welcometoc endl return0 运行结果 Hello Welcometoc 2 1 4C 字符集 大小写的英文字母 A Z a z数字字符 0 9特殊字符 7 2 1C 语言概述 2 1 5词法记号 关键字C 预定义的单词标识符程序员声明的单词 它命名程序正文中的一些实体文字在程序中直接使用符号表示的数据操作符用于实现各种运算的符号分隔符 用于分隔各个词法记号或程序正文空白符空格 制表符 TAB键产生的字符 垂直制表符 换行符 回车符和注释的总称 8 2 1C 语言概述 标识符的构成规则 以大写字母 小写字母或下划线 开始 可以由以大写字母 小写字母 下划线 或数字0 9组成 大写字母和小写字母代表不同的标识符 9 2 1C 语言概述 2 1 5词法记号 2 2 1基本数据类型 10 2 2基本数据类型和表达式 2 2 2常量 所谓常量是指在程序运行的整个过程中其值始终不可改变的量 也就是直接使用符号 文字 表示的值 例如 12 3 5 A 都是常量 11 2 2基本数据类型和表达式 整数常量 以文字形式出现的整数 包括正整数 负整数和零 十进制形式 若干个0 9的数字符号加若干个0 9的数字 但数字部分不能以0开头 正数前边的正号可以省略 八进制形式 0开头 若干个0 7的数字十六进制形式 0 x开头 若干个0 9的数字及A F的字母 大小写均可 由于八进制和十六进制形式的整型常量一般用来表示无符号整数 所以前面不应带正负号 后缀字母L 或l 表示长整型 后缀字母U 或u 表示无符号型 也可同时后缀L和U 大小写无关 12 2 2基本数据类型和表达式表达式 2 2 2常量 实数常量 以文字形式出现的实数 一般形式 例如 12 5 12 5等 指数形式 例如 0 345E 2 34 4E 3字母E可以大写或小写 整数部分和小数部分可以省略其一实数常量缺省为double型 如果后缀F 或f 可以使其成为float型 例如 12 3f 13 2 2基本数据类型和表达式表达式 2 2 2常量 整数和实数类型常量举例 14 2 2基本数据类型和表达式表达式 2 2 2常量 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 return0 字符常量 字符常量单引号括起来的一个字符 如 a D C 转义字符列表 15 2 2基本数据类型和表达式 2 2 2常量 字符串常量 字符常量双引号括起来的一个或多个字符 如 hello Wrold 系统在未尾自动添加 0 作尾标识 16 2 2基本数据类型和表达式 2 2 2常量 布尔常量 布尔常量true与false表示 17 2 2基本数据类型和表达式 2 2 2常量 2 2 3变量 变量的声明和定义声明语句形式如下 数据类型变量名1 变量名2 变量名n 在定义一个变量的同时 也可以给它赋以初值例如 inta 3 变量的存储类型auto 采用堆栈方式分配内存空间 属于暂时性存储 其存储空间可以被若干变量多次覆盖使用 register 存放在通用寄存器中 extern 在所有函数和程序段中都可引用 static 在内存中是以固定地址存放的 在整个程序运行期间都有效 18 2 2基本数据类型和表达式 2 2 4符号常量 符号常量在声明时一定要赋初值 而在程序中间不能改变其值 const数据类型说明符常量名 常量值 或 数据类型说明符const常量名 常量值 例 constfloatPI 3 1415926 19 2 2基本数据类型和表达式 算术运算符与算术表达式 基本算术运算符 若整数相除 结果取整 取余 操作数为整数 优先级与结合性先乘除 后加减 同级自左至右 自增 自减 例 i j 20 2 2基本数据类型和表达式 2 2 5运算符与表达式 赋值运算符和赋值表达式 简单的赋值运算符 举例n n 5表达式的类型赋值运算符左边对象的类型表达式的值赋值运算符左边对象被赋值后的值 21 2 2基本数据类型和表达式 2 2 5运算符与表达式 赋值运算符和赋值表达式 复合的赋值运算符 有10种复合运算符 例a 3等价于a a 3x y 8等价于x x y 8 22 2 2基本数据类型和表达式 2 2 5运算符与表达式 赋值运算符和赋值表达式 赋值表达式举例 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 23 2 2基本数据类型和表达式 2 2 5运算符与表达式 逗号运算和逗号表达式 格式表达式1 表达式2求解顺序及结果先求解1 再求解2 最终结果为表达式2的值例a 3 5 a 4最终结果为60 24 2 2基本数据类型和表达式 2 2 5运算符与表达式 关系运算与关系表达式 关系运算是比较简单的一种逻辑运算 优先次序为 优先级相同 高 优先级相同 低 关系表达式是一种最简单的逻辑表达式其结果类型为bool 值只能为true或false 例如 a b c a b x y 3 25 2 2基本数据类型和表达式 2 2 5运算符与表达式 逻辑运算与逻辑表达式 逻辑运算符 非 与 或 优先次序 高 低逻辑表达式例如 a b x y 其结果类型为bool 值只能为true或false 26 2 2基本数据类型和表达式 2 2 5运算符与表达式 逻辑运算与逻辑表达式 续 的 短路特性 表达式1 表达式2先求解表达式1若表达式1的值为false 则最终结果为false 不再求解表达式2若表达式1的结果为true 则求解表达式2 以表达式2的结果作为最终结果 也具有类似的特性 27 2 2基本数据类型和表达式 2 2 5运算符与表达式 条件运算符与条件表达式 一般形式表达式1 表达式2 表达式3表达式1必须是bool类型执行顺序先求解表达式1 若表达式1的值为true 则求解表达式2 表达式2的值为最终结果若表达式1的值为false 则求解表达式3 表达式3的值为最终结果例 x a b a b 28 2 2基本数据类型和表达式 2 2 5运算符与表达式 条件运算符与条件表达式 续 注意 条件运算符优先级高于赋值运算符 低于逻辑运算符表达式2 3的类型可以不同 条件表达式的最终类型为2和3中较高的类型 例 x a b a b 29 2 2基本数据类型和表达式 2 2 5运算符与表达式 sizeof运算符 语法形式sizeof 类型名 或sizeof表达式结果值 类型名 所指定的类型或 表达式 的结果类型所占的字节数 例 sizeof short sizeofx 30 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 按位与 运算规则将两个运算量的每一个位进行逻辑与操作举例 计算3 31 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 按位或 运算规则将两个运算量的每一个位进行逻辑或操作举例 计算3 53 000000115 000001013 5 00000111用途 将某些位置1 其他位不变 例如 将int型变量a的低字节置1 a a 0 xff 32 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 按位异或 运算规则两个操作数进行异或 若对应位相同 则结果该位为0 若对应位不同 则结果该位为1 举例 计算071 052071 00111001052 00101010071 052 00010011 33 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 按位异或 续 用途 使特定位翻转 与0异或保持原值 与1异或取反 例如 要使01111010低四位翻转 01111010 0000111101110101 34 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 取反 单目运算符 对一个二进制数按位取反 例 025 0000000000010101 025 1111111111101010 35 2 2基本数据类型和表达式 2 2 5运算符与表达式 位运算 移位 左移运算 右移后 低位 舍弃高位 无符号数 补0有符号数 补 符号位 或补0 36 2 2基本数据类型和表达式 2 2 5运算符与表达式 运算符优先级 sizeof 位运算 赋值运算逗号运算 37 2 2基本数据类型和表达式 2 2 5运算符与表达式 低 高 混合运算时数据类型的转换 隐含转换 一些二元运算符 算术运算符 关系运算符 逻辑运算符 位运算符和赋值运算符 要求两个操作数的类型一致 在算术运算和关系运算中如果参与运算的操作数类型不一致 编译系统会自动对数据进行转换 即隐含转换 基本原则是将低类型数据转换为高类型数据 char short int unsigned long unsignedlong float double低高 38 2 2基本数据类型和表达式 2 2 5运算符与表达式 混合运算时数据类型的转换 隐含转换 续 当参与运算的操作数必须是bool型时 如果操作数是其它类型 编译系统会自动将非0数据转换为true 0转换为false 位运算的操作数必须是整数 当二元位运算的操作数是不同类型的整数时 也会自动进行类型转换 赋值运算要求左值与右值的类型相同 若类型不同 编译系统会自动将右值转换为左值的类型 39 2 2基本数据类型和表达式 2 2 5运算符与表达式 混合运算时数据类型的转换 显式转换 语法形式 3种 类型说明符 表达式 类型说明符 表达式类型转换操作符 表达式 类型转换操作符可以是 const cast dynamic cast reinterpret cast static cast显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型 例 int z int z static cast z 三种完全等价 40 2 2基本数据类型和表达式 2 2 5运算符与表达式 2 2 6语句 空语句声明语句表达式语句选择语句循环语句跳转语句复合语句标号语句 41 2 2基本数据类型和表达式 表达式语句 格式 表达式 举例赋值表达式语句a b 插入 提取运算表达式语句cout y 42 2 2基本数据类型和表达式 2 2 6语句 复合语句 将多个语句用一对大括号包围 便构成一个复合语句例如 sum sum i i 43 2 2基本数据类型和表达式 2 2 6语句 2 3 1I O流 在C 中 将数据从一个对象到另一个对象的流动抽象为 流 流在使用前要被建立 使用后要被删除 从流中获取数据的操作称为提取操作 向流中添加数据的操作称为插入操作 数据的输入与输出是通过I O流来实现的 cin和cout是预定义的流类对象 cin用来处理标准输入 即键盘输入 cout用来处理标准输出 即屏幕输出 44 2 3数据的输入和输出 2 3 2预定义的插入符和提取符 表达式 表达式 在输入语句中 提取符可以连续写多个 每个后面跟一个表达式 该表达式通常是用于存放输入值的变量 例如 inta b cin a b 45 2 3数据的输入和输出 2 3 3简单的I O格式控制 46 2 3数据的输入和输出 常用的I O流类库操纵符 例 cout setw 5 setprecision 3 3 1415 2 2 cpp includeusingnamespacestd intmain intyear boolisLeapYear cout year isLeapYear year 4 0 47 2 4算法的基本控制结构 例2 2输入一个年份 判断是否闰年 2 4 1用if语句实现选择结构 If语句的语法形式 if 表达式 语句例 if x y couty cout x elsecout y if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 else语句n 48 2 4算法的基本控制结构 2 4 1用if语句实现选择结构 2 4 2多重选择结构 嵌套的if结构 49 2 4算法的基本控制结构 includeusingnamespacestd intmain intx y cout x y if x y if x y couty endl elsecout x y endl elsecout x y endl return0 例2 3 输入两个整数 比较两个数的大小 例2 3 续 50 2 4算法的基本控制结构 2 4 2多重选择结构 运行结果1 Enterxandy 58xy 嵌套的if结构 续 语法形式if if 语句1else语句2elseif 语句3else语句4注意语句1 2 3 4可以是复合语句 每层的if与else配对 或用 来确定层次关系 51 2 4算法的基本控制结构 2 4 2多重选择结构 switch语句 例2 4 输入一个0 6的整数 转换成星期输出 52 2 4算法的基本控制结构 2 4 2多重选择结构 53 2 4算法的基本控制结构 2 4 2多重选择结构 includeusingnamespacestd intmain intday cin day switch day case0 cout Sunday endl break case1 cout Monday endl break case2 cout Tuesday endl break case3 cout Wednesday endl break case4 cout Thursday endl break case5 cout Friday endl break case6 cout Saturday endl break default cout DayoutofrangeSunday Saturday endl break return0 例2 4 续 switch语句 续 54 2 4算法的基本控制结构 2 4 2多重选择结构 一般形式switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句ndefault 语句n 1 执行顺序以case中的常量表达式值为入口标号 由此开始顺序执行 因此 每个case分支最后应该加break语句 switch语句 续 case分支可包含多个语句 且不用 表达式 判断值都是int型或char型 若干分支执行内容相同可共用一组语句 55 2 4算法的基本控制结构 2 4 2多重选择结构 2 4 3循环结构 while语句 56 2 4算法的基本控制结构 2 4 3循环结构 例2 5求自然数1 10之和分析 本题需要用累加算法 累加过程是一个循环过程 可以用while语句实现 例2 5 续 57 2 4算法的基本控制结构 2 4 3循环结构 includeusingnamespacestd intmain inti 1 sum 0 while i 10 sum i 相当于sum sum i i cout sum sum endl return0 运行结果 sum 55 while语句 续 58 2 4算法的基本控制结构 2 4 3循环结构 形式while 表达式 语句 执行顺序先判断表达式的值 若为true时 执行语句 do while语句 59 2 4算法的基本控制结构 2 4 3循环结构 includeusingnamespacestd intmain intn right digit newnum 0 cout n cout Thenumberinreverseorderis do right digit n 10 cout right digit n 10 相当于n n 10 while n 0 cout endl return0 例2 6 输入一个数 将各位数字翻转后输出 例2 6 续 60 2 4算法的基本控制结构 2 4 3循环结构 运行结果 Enterthenumber 365Thenumberinreverseorderis563 do while语句 续 61 2 4算法的基本控制结构 2 4 3循环结构 一般形式do语句while 表达式 执行顺序先执行循环体语句 后判断条件 表达式为true时 继续执行循环体与while语句的比较 while语句执行顺序先判断表达式的值 为true时 再执行语句 例2 7用do while语句编程 求自然数1 10之和 2 7 cpp includeusingnamespacestd intmain inti 1 sum 0 do sum i i while i 10 cout sum sum endl return0 62 2 4算法的基本控制结构 2 4 3循环结构 对比下面的程序 63 2 4算法的基本控制结构 2 4 3循环结构 程序1 includeusingnamespacestd intmain inti sum 0 cin i while i 10 sum i i cout sum sum endl return0 程序2 includeusingnamespacestd intmain inti sum 0 cin i do sum i i while i 10 cout sum sum endl return0 for语句 例2 8 输入一个整数 求出它的所有因子 64 2 4算法的基本控制结构 2 4 3循环结构 例2 8 续 65 2 4算法的基本控制结构 2 4 3循环结构 includeusingnamespacestd intmain intn cout n cout Number n Factors for intk 1 k n k if n k 0 cout k cout endl return0 例2 8 续 66 2 4算法的基本控制结构 2 4 3循环结构 运行结果1 Enterapositiveinteger 36Number36Factors123469121836运行结果2 Enterapositiveinteger 7Number7Factors17 for语句 续 67 2 4算法的基本控制结构 2 4 3循环结构 语法形式for 初始语句 表达式1 表达式2 语句 循环嵌套 例2 9编写程序输出以下图案 68 2 4算法的基本控制结构 2 4 4循环结构与选择结构的嵌套 例2 9 续 69 2 4算法的基本控制结构 2 4 4循环结构与选择结构的嵌套 includeusingnamespacestd intmain constintN 4 for inti 1 i N i 输出前4行图案for intj 1 j 30 j cout 在图案左侧空30列for intj 1 j 8 2 i j cout for intj 1 j 2 i 1 j cout cout endl 例2 9 续 70 2 4算法的基本控制结构 2 4 4循环结构与选择结构的嵌套 输出后3行图案for inti 1 i N 1 i for intj 1 j 30 j cout 在图案左侧空30列for intj 1 j 7 2 i j cout cout endl return0 2 4 4循环结构与选择结构的嵌套 71 2 4算法的基本控制结构 includeusingnamespacestd intmain for intn 100 n 200 n if n 3 0 cout n return0 举例 例2 10 读入一系列整数 统计出正整数个数i和负整数个数j 读入0则结束 分析 需要读入一系列整数 但是整数个数不定 要在每次读入之后进行判断 因此使用while循环最为合适 循环控制条件应该是n 0 由于要判断数的正负并分别进行统计 所以需要在循环内部嵌入选择结构 72 2 4算法的基本控制结构 2 4 4循环结构与选择结构的嵌套 例2 10 续 73 2 4算法的基本控制结构 2 4 4循环结构与选择结构的嵌套 includeusingnamespacestd intmain inti 0 j 0 n cout n while n 0 if n 0 i 1 if n n cout Countofpositiveintegers i endl cout Countofnegativeintegers j endl return0 2 4 5其他控制语句 break语句使程序从循环体和switch语句内跳出 继续执行逻辑上的下一条语句 不宜用在别处 continue语句结束本次循环 接着判断是否执行下一次循环 goto语句goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句 74 2 4算法的基本控制结构 2 5 1typedef声明 为一个已有的数据类型另外命名语法形式typedef已有类型名新类型名表 例如typedefdoubleArea Volume typedefintNatural Naturali1 i2 Areaa Volumev 75 2 5自定义数据类型 2 5 2枚举类型 enum 只要将需要的变量值一一列举出来 便构成了一个枚举类型 枚举类型的声明形式如下 enum枚举类型名 变量值列表 例如 enumWeekday SUN MON TUE WED THU FRI SAT 76 2 5自定义数据类型 2 5 2枚举类型 enum 续 枚举类型应用说明 对枚举元素按常量处理 不能对它们赋值 例如 不能写 SUN 0 枚举元素具有默认值 它们依次为 0 1 2 也可以在声明时另行指定枚举元素的值 如 enumWeekday SUN 7 MON 1 TUE WED THU FRI SAT 枚举值可以进行关系运算 整数值不能直接赋给枚举变量 如需要将整数赋值给枚举变量 应进行强制类型转换 77 2 5自定义数据类型 例2 11 设某次体育比赛的结果有四种可能 胜 WIN 负 LOSE 平局 TIE 比赛取消 CANCEL 编写程序顺序输出这四种情况 分析 由于比赛结果只有四种可能 所以可以声明一个枚举类型 声明一个枚举类型的变量来存放比赛结果 78 2 5自定义数据类型 2 5 2枚举类型 enum 例2 11 续 79 2 5自定义数据类型 2 5 2枚举类型 enum includeusingnamespacestd enumGameResult WIN LOSE TIE CANCEL intmain GameResultresult enumGameResultomit CANCEL for intcount WIN count CANCEL count result GameResult count if result omit cout Thegamewascancelled endl else cout Thegamewasplayed if result WIN cout andwewon if result LOSE cout andwelost cout endl return0 例2 11 续 80 2 5自定义数据类型 2 5 2枚举类型 enum 运行结果Thegamewasplayedandwewon Thegamewasplayedandwelost ThegamewasplayedThegamewascancelled 2 6 1变量的实现机制 站在目标代码的角度上看问题变量具有两个重要属性 数据类型和变量名它们都用文字表示 便于人们理解 但不便于CPU识别 因此它们不能出现在目标代码中 下面将讨论它们在目标代码中的表示方式 81 2 6深度探索 变量名 源代码中 变量依靠变量名来标识 目标代码中 变量依靠地址来标识 每个变量的地址互不相同 82 2 6深度探索 2 6 1变量的实现机制 inta b intmain a b return0 incl0 x80495f8incl0 x80495fc 数据类型 任何数据在内存中都是用二进制串的形式表示的 一串二进制数 只有确定了类型 才有真实的含义 例 10111111 10000000 00000000 00000000解释为int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年珠宝销售顾问招聘面试参考题库及答案
- 高级财商会计考试题库及答案
- 2025年传媒营销专员招聘面试参考题库及答案
- 临床护士输血题库及答案
- 2025年自动化测试工程师招聘面试题库及参考答案
- 2025年战略投资经理招聘面试题库及参考答案
- 2025年厨房经理招聘面试题库及参考答案
- 2025年体验活动策划师招聘面试题库及参考答案
- 2025年消费者服务经理招聘面试题库及参考答案
- 2025年电气工程技术员招聘面试参考题库及答案
- 医院科研诚信培训课件
- 数学模型-第06章(第五版)
- 2025年四川省高考生物试卷真题(含答案解析)
- 放射性肺炎治疗
- 京东物流管理制度
- GB/T 19348.2-2025无损检测工业射线照相胶片第2部分:用参考值方法控制胶片处理
- 医疗器械生锈问题
- 仪器仪表维修的安全管理措施
- 2025-2030中国瘢痕疙瘩治疗行业市场发展趋势与前景展望战略研究报告
- 门面出售合同协议
- 康复科考试试题及答案
评论
0/150
提交评论