




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第2章程序控制结构2 1顺序结构2 2选择结构2 3循环结构2 4控制转向语句2 5程序实例 2 按照语句出现的先后顺序依次执行 2 1顺序结构 3 2 1 1定义语句 说明语句在C 程序中 一个标识符 变量名 常量名 函数名 对象名等 在使用之前必须先定义 通知编译器为其分配存储空间 或告诉编译器它的存在及其特征 例如 inta 0 b 3 constdoublepi 3 14159 intsum int int floatscore 50 3 4 2 1 2表达式语句 形式 可以进行的操作通常包括赋值操作 复合赋值操作 增量 减量操作 函数调用操作和输入输出操作 例如 i j abs x cout i j sum a b a b c i 1 j 2 b c 5 2 1 3复合语句 形式 作用 当程序中某个位置在语法上只允许一条语句 而在语义上要执行多条语句才能完成某个操作时 需要使用复合语句 例如 if x 0 cout a cout b 6 2 1 4空语句 形式 作用 当程序中某个位置在语法上需要一条语句 而在语义上又不要求执行任何动作时 可放上一条空语句 一般适用于在循环语句中做空循环体例如 for m 0 m 1000 m 7 2 1 5基本输入输出 在C 中 所有输入输出是通过输入输出流来实现的 在C 中 将数据从一个对象到另一个对象的流动抽象为 流 在iostream库中包含一个标准输入流对象cin和一个标准输出流对象cout 分别用来实现从键盘读取数据 以及将数据在屏幕上输出 要使用cin和cout 需要在C 程序开头加上如下包含命令 include 新标准中的头文件名usingnamespacestd 引入std名字空间中的标识符 8 1 标准输入流cin cin负责从键盘读取数据 使用提取运算符 就可以将键盘键入的数据读入到变量中 语法格式 cin 变量1 变量2 变量n 变量可以是任意数据类型 输入时各个数据之间用空格键 Tab键或Enter键分隔 例如 inta b cin a b 键盘上输入 93 9 键盘 3 键盘 9 2 标准输出流cout 负责将数据输出到屏幕上 使用插入运算符 就可以将数据显示在屏幕上当前光标所在位置 语法格式 cout 表达式1 表达式2 表达式n 表达式可以是任意类型的 数据输出的格式由系统自动决定 10 11 12 例2 1 cout应用示例 includeusingnamespacestd intmain intm 2 n 8 doublepai 1 3 14159265 floatpai 2 3 141f charch1 A ch2 B boolok true cout m m endl cout n n endl cout pai 1 pai 1 pai 2 pai 2 endl cout ch1 ch1 ch2 ch2 endl cout ok ok endl cout ok ok endl return0 图2 2cout应用示例 13 例2 2 使用格式控制符输出数据 include includeusingnamespacestd intmain inta 35 doubleb 12 3456789 cout 1234567890123 endl cout dec a hex a oct a endl cout b endl cout setprecision 4 b endl cout setw 10 b endl cout setw 10 setfill b endl cout setiosflags ios scientific b endl cout setprecision 3 b endl cout setprecision 2 b endl return0 14 2 2选择结构 按照给定条件有选择地执行程序中的语句C 中 if语句 实现n分支 要求n个表达式 switch语句 实现多分支 只用1个表达式 15 2 2 1if语句 1 if语句 单分支 语法格式 if 表达式 语句说明 1 表达式是任意的数值 字符 关系 逻辑表达式 它表示条件 以true 非0 表示真 false 0 表示假 表达式必须用圆括号括起来 2 内嵌语句 可以是单条语句 或复合语句 执行顺序 16 7 3 7 7 3 例2 3 输入两个整数a和b 按从小到大的顺序输出这两个数 分析若a b 则将a b交换 否则不交换 两数交换可采用借助于第三个变量间接交换的方法 if a b t a a b b t 17 includeusingnamespacestd intmain inta b t cout a b if a b t a a b b t cout a b endl return0 a a b b a b a a b a a b b a b a a b 18 2 if else语句 双分支 if 表达式 语句1else语句2 19 例2 4 输入一个年份 判断是否为闰年 分析闰年的年份可以被4整除而不能被100整除 或者能被400整除 includeusingnamespacestd intmain intyear cout year if year 4 0 20 3 if elseif语句 多分支 if 表达式1 语句1elseif 表达式2 语句2 elseif 表达式n 语句nelse语句n 1 21 例2 5 根据x的值 计算分段函数y的值 y的计算公式为 22 include includeusingnamespacestd intmain doublex y cout x if x 0 y fabs x elseif x 10 y exp x sin x elseif x 20 y pow x 3 elsey 3 2 x log x cout y y endl return0 图2 10计算分段函数 23 4 if语句的嵌套形式 if或else后面的内嵌语句本身又是一个if语句例如 if 表达式1 if 表达式2 语句1else语句2elseif 表达式3 语句3else语句4 24 1 为了增强程序的可读性 建议采用锯齿型的书写形式 2 if语句嵌套时 else子句总是与在它前面 距它最近 且尚未匹配的if配对 3 为明确匹配关系 避免匹配错误 建议将内嵌的if语句一律用 括起来 if x 0 if y 0 cout x与y均大于0 elsecout x大于0 y小于等于0 注意 如何使之与第一个if配对 25 例2 6 从键盘上输入两个字符 比较其大小 输出大于 等于和小于的判断结果 includeusingnamespacestd intmain charch1 ch2 cout ch1 ch2 if ch1 ch2 if ch1 ch2 cout ch1 大于 ch2 endl elsecout ch1 小于 ch2 endl elsecout ch1 等于 ch2 endl return0 26 2 2 2switch语句 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句n default 语句序列n 1 注意 表达式只能是整型 字符型或枚举型 27 28 例2 7 将输入的百分制成绩按以下规定转换成相应的等级 成绩等级100 90优秀89 80良好79 70中等69 60及格59 0不及格 29 includeusingnamespacestd intmain floatscore cout score if score 0 共用同一个语句组 思考 若省去break语句 情况会怎样 30 2 3循环结构 按照给定规则重复地执行程序中的语句 2 3 1while语句 while 表达式 语句 循环条件 其值为true 非0 false 0 循环体 31 例2 8 求1 2 3 100 includeusingnamespacestd intmain inti 1 sum 0 定义变量 初始化while i 100 构造循环 sum i 循环体 多次执行i cout sum sum endl return0 0 1 1 2 真 3 3 真 6 4 真 10 5 真 真 100 真 101 真 5050 假 sum 5050 1 2 3 3 6 4 100 5050 101 循环结束 实际上是将i不停地累加到一起 32 例2 9 求出满足不等式的最小n值 includeusingnamespacestd intmain inti 0 doubles 0 while s 5 s double 1 i cout n i endl return0 33 2 3 2do while语句 do语句while 表达式 34 例2 10 求自然数1 100之和 要求用do while语句实现 includeusingnamespacestd intmain inti 1 sum 0 do sum i i while i 100 cout sum sum endl return0 inti 1 sum 0 while i 100 sum i i 循环体和条件表达式都相同 35 while 1 2 cout2 输出一行文字信息 注意 do while首先执行循环体 然后再判断表达式 至少执行一次循环体 当第一次循环表达式的值为真时 while与do while的结果完全一样 否则结果不相同 36 例2 11 输入一个自然数 将该数的每一位数字按反序输出 例如 输入12345 输出54321 includeusingnamespacestd voidmain unsignedlongintnum digital cout num do digital num 10 num 10 cout0 cout endl 37 for 表达式1 表达式2 表达式3 表达式2 执行 非0 0 退出循环 表达式1 表达式3 表达式1 while 表达式2 表达式3 2 3 3for语句 38 例2 12 求自然数1 100之和 要求用for语句实现 includeusingnamespacestd intmain inti sum 0 for i 1 i 100 i sum i cout sum sum endl return0 39 例2 13 一个小球从100米高处落下 每次落地后反弹回原高度的一半 再落下 求它在第10次落地时共经过多少米 第10次反弹多高 分析 第1次落地后反弹高度为h 100 2第2次落地时经过的米数为s 100 h 2第2次落地后反弹高度为h h 2第3次落地时经过的米数为s s h 2 40 include includeusingnamespacestd intmain floats 100 0 h s 2 for inti 2 i 10 i s s h 2 h h 2 cout setiosflags ios fixed setprecision 3 cout 第10次落地时 共经过 s 米 反弹的高度是 h 米 endl return0 思考该小球反弹多少次才能静止下来 41 注意 for语句中的三个表达式可以部分省略或全部省略 但 不能省略 若省略表达式2 则表示循环条件为真 for i 100 i 省略表达式1 注意其后的分号不能省sum i intsum 0 for inti 1 i 省略表达式2 注意其后的分号同样不能省 sum i if i 100 break break语句用于跳出循环 intsum 0 for inti 1 i 100 省略表达式3sum i 在循环体中对循环变量i递增 42 inti 1 sum 0 for sum i if i 100 break 三个表达式都可以是任何类型的C 表达式 inti sum for i 1 sum 0 i 100 sum i i 表达式1可以是变量定义语句 即循环控制变量可在其中定义 intsum 0 for inti 1 i 100 i sum i 43 2 3 4多重循环 循环嵌套 循环体内包含另一个完整的循环结构 三种循环语句皆可以相互嵌套 for while do while 44 例2 14 编程显示输出九九乘法表 图2 19九九乘法表运行界面 45 includeusingnamespacestd intmain cout t t t九九乘法表 endl cout t t t endl for inti 1 i 9 i for intj 1 j 9 j cout i j i j t cout endl return0 46 图2 21下三角的九九乘法表 图2 22上三角的九九乘法表 思考 打印上三角或下三角程序如何改动 47 注意 1 内循环控制变量与外循环控制变量不能同名 2 外循环必须完全包含内循环 不能交叉 3 若循环体内有if语句 或if语句内有循环语句 也不能交叉 4 利用goto语句可以从循环体内转向循环体外 但绝对不允许从循环体外转入循环体内 5 当嵌套使用各种循环语句时 特别需要严格按照缩进规则来书写程序 有时还应适当配以注释 以保持清晰易辩的结构特征 48 2 4控制转向语句 2 4 1break语句 break 用于下列两种情况 1 在开关语句中 其功能是退出开关语句 执行其后的语句 2 在循环体中 其功能是用来退出该重循环 49 例2 15 从键盘上输入若干个正整数 直到输入负整数为止 计算并输出显示已输入的正整数之和 输入的数不超过20个 includeusingnamespacestd constintM 20 intmain inti n sum 0 cout n if n 0 break 当输入负数时 就退出循环sum n cout 输入的正整数之和为 sum endl return0 50 2 4 2continue语句 格式 continue 功能 只用在循环体中 用来结束该次循环 在循环体中遇到continue语句时 本次循环结束 回到循环条件判断是否执行下一次循环 51 在while和do while循环结构中 continue语句将使执行流程直接跳转到循环条件的判定部分 然后决定循环是否继续进行 在for循环结构中 当遇到continue时 执行流程将跳过循环体中余下的语句 而转去执行for语句中的表达式3 然后根据表达式2进行循环条件的判定以决定是否继续执行for循环体 52 while i 100 break cout sum endl while i 100 continue break和continue语句的区别 53 例2 16 输出100以内能够被7整除的所有整数 include includeusingnamespacestd intmain for inti 1 i 100 i if i 7 0 continue 如果i不能被7整除 则退出本次循环cout setw 5 i cout endl return0 思考 1 将continue改为break 则输出有什么变化 2 不采用continue语句 用其它方法如何实现 54 2 4 3goto语句 goto标号 标号 语句 标号语句 将流程转到标号所指定的标号语句处 55 例2 17 利用goto语句实现计算前100个自然数之和并输出结果 includeusingnamespacestd intmain inti 1 sum 0 loop sum i i if i 100 gotoloop cout sum sum endl return0 56 2 5程序实例 例2 18 输入两个正整数 求最大公约数 算法思想 1 对于已知两数m n 使得m n 2 m除以n得余数r 3 若r 0 则n为最大公约数 结束 否则执行 4 4 m n n r 再重复执行 2 辗转相除法while r m n 0 m n n r cout n 57 includeusingnamespacestd intmain intm n t r cout m n if m nwhile r m n 0 m n n r cout 最大公约数为 n endl return0 58 例2 19 显示输出3 100之间的所有素数 分析 1 素数 一个大于1的除了它自身和1以外 不能被其它任何正整数所整除的整数 判别某数m是否为素数 最简单的方法是 用i 2 3 m 1逐个除 只要有一个能整除 m就不是素数 可以用break提前结束循环 若都不能整除 则m是素数 2 如果m不是素数 则必然能被分解为两个因子a和b 并且其中之一必然小于等于sqrt m 另一个必然大于等于sqrt m 所以要判断m是否为素数 可简化为判断它能否被2至sqrt m 之间的数整除即可 因为若m不能被2至sqrt m 之间的数整除 则必然也不能被sqrt m 至m 1之间的数整除 3 在退出循环以后 如果是因为找到了一个能整除m的数而通过break退出循环的 则i sqrt m 反之 如果是正常退出循环的 则i sqrt m 1 因此 在循环结束后 只要判断i是否大于sqrt m 若是 则表明m是素数 输出该素数 4 要判断多个素数是否为素数 需要使用双重循环 外循环每循环一次提供一个数 由内循环通过多次除法判断其是否为素数 59 include includeusingnamespacestd intmain coutk cout m t cout endl return0 60 例2 20 输入x 计算sin x 计算公式为 当第n项的绝对值小于10 6时结束 分析 关键是找部分级数和的通项 61 intn 1 doublex t sinx 0 变量t保存每一项的值 给sinx变量赋初值0cout x t x 将求和式的第一项值x赋给twhile fabs t 0 000001 sinx t t t x x n 1 n 2 n 2 cout 编程求得的sin x sinx endl cout 调用标准函数求得的sin x sin x endl 62 例2 21 求 水仙花数 所谓 水仙花数 是指一个三位正整数 其各位数字的立方和等于该数本身 例如 153 13 53 33 方法1 利用三重循环编写程序因为 水仙花数 是三位整数 所以取值范围为100 999 外循环变量i控制百位数字从1变化到9中层循环变量j控制十位数字从0变化到9内循环变量k控制个位数字从0变化到9 inti j k n cout 水仙花数 for i 1 i 9 i for j 0 j 9 j for k 0 k 9 k m i i i j j j k k k n 100 i 10 j k if m n cout m 63 方法2 不使用循环嵌套 只用1个for语句编写程序 intmain inti j k n cout 水仙花数 for n 100 n 1000 n i n 100 i为百位数字j n 10 i 10 j为十位数字k n 10 k为个位数字if i i i j j j k k k n cout n 64 例2 22 用 枚举法 求解百元买百鸡问题 假定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省陇南市辅警考试题库(附答案)
- 2025年度湖州市专业技术继续教育公需科目考试及答案
- 体育馆栏杆安装技术方案
- 2025年空调销售及租赁合同
- 2025借款合同抵押担保中无担保、抵押借款合同
- 国旗国旗真美丽(教学设计)2024-2025学年人音版(北京)(2024)音乐一年级上册
- 职业学院师资队伍建设管理方案
- 拆除工程施工进度动态调整方案
- 2025年肿瘤放疗副作用处理实操模拟试题答案及解析
- 任务一 认识马铃薯教学设计-2025-2026学年小学劳动鲁科版六年级下册-鲁科版
- 2024-2025 学年度武汉市部分学校高三九月调研考试 物理试卷(含答案)
- 输血治疗中的大数据分析
- DL-T 297-2023 汽轮发电机合金轴瓦超声检测
- 2024-2029年中国红外热像技术在建筑物检测中的应用行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告
- 《福建省建筑工程施工文件管理规程2》
- 幼儿园小班早操活动方案
- 新媒体广告-课件-第三章-新媒体广告伦理与法规
- 关于车的英语原版书
- 产品定制管理制度
- 沙里宁的大赫尔辛基规划
- 教学一体机施工方案
评论
0/150
提交评论