已阅读5页,还剩65页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章程序的控制结构 主要内容程序语句及三种基本结构选择结构循环结构 3 1 1程序语句 3 1程序语句及三种基本结构 语句 statement 是程序中最小的可执行单位 一条语句可以完成一种基本操作 若干条语句组合在一起就能实现某种特定的功能 在C程序中 语句可以是以下三种形式之一 单一语句 2 空语句 3 复合语句 3 1 2三种基本结构 c 循环结构 假 真 a 顺序结构 语句n 语句n 1 语句n 2 b 分支结构 假 真 a 顺序结构 b 分支结构 条件成立 真 假 问题提出 根据学生的考试成绩判断是否通过 解题的步骤 C语言提供的选择结构有三种 if语句 if else语句 switch语句 3 2选择结构 3 2 1if语句 语句形式 if 表达式 语句 语句执行流程 if语句 对所给条件进行判定 根据判定结果决定是否执行程序段 例3 1 从键盘任意输入一个字符 判断该字符是否是大写英文字母 若是大写字母 则自动转换为小写字母 否则 原样输出 includevoidmain charch scanf c 程序运行结果 输入 A输出 a输入 输出 例3 2 输入两个整数a和b 并按从大到小的顺序存放 即若a小于b则交换两个数的位置 否则直接输出a和b includevoidmain inta b temp printf Entera b scanf d d 说明 在交换两个变量的值时 不能用以下语句直接赋值a b b a 在if语句中 内嵌语句既可以是单一语句 也可以是复合语句 在程序书写中使用了缩进格式 即if的内嵌语句要比if向右缩进几格 includevoidmain charch scanf c 思考 将例3 1做如下修改 程序的结果是 补充 读程序 理解 与 的作用及区别 includevoidmain intm 10 if m 100 printf m d m if m 100 printf misassigned d n m 程序运行结果 misassigned100 if 表达式 语句1 else 语句2 表达式 语句1 真 非0 假 0 语句2 3 2 2if else语句 if else语句适合于解决双分支选择问题 语句形式 语句执行流程 例3 3 输入一个学生的成绩 如高于60分则输出 pass 否则 输出 failed includevoidmain floatscore printf Enterscore 0 100 scanf f 补充 输入一个整数 判断该整数的奇偶性 includevoidmain intm printf inputm scanf d 输入m m 2 0 偶数 结束 真 假 奇数 inputm 2525isanoddnumber inputm 3025isanevennumber 注意 有的if else语句可以用条件运算符 来实现 if a b max a elsemax b max a b a b 重写例3 1 输出输入一个英文字符 若为大写字母则改为小写字母 然后得到的字符 includevoidmain charzm scanf c if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 语句nelse语句n 1 3 2 3嵌套的if else语句 语句形式 表达式1 语句1 真 非0 假 0 语句执行流程 例3 4 输入学生成绩 并按分数段确定等级 其中 90分以上为优 80分以上为良 70分以上为中 60分以上为及格 60分以下为不及格 说明 此题目是一个多分支结构 在处理分支时 既不能有重复 也不能有遗漏 includevoidmain floatscore printf Enterscore 0 100 scanf f 例3 4 可改写为如下程序 includevoidmain floatscore printf Enterscore 0 100 scanf f 注意 在嵌套的if语言中 含有多个if和else else与if之间的配对关系就很容易混淆 例如在以下程序中 if x y if y z printf xisthelargest elseprintf yisthesmallest 其中的else是与第一个if还是第二个if配对呢 将以上程序改为 if x y if y z printf xis elseprintf yis 这样就从语法上将花括号 中的内容说明为第一个if语句的内嵌语句 从而使else与较远的第一个if配对 例3 5计算分段函数 x 1 2 x 0 includevoidmain intx y scanf f 语句形式 switch 表达式 case常量1 语句1 case常量2 语句2 case常量3 语句3 case常量n 语句n default 语句n 1 根据表达式的不同值 选择不同的程序分支 又称开关语句 数值型或字符型 常量表达式的值必须互不相同 否则执行时将出现矛盾 即同一个开关值 将对应多种执行方案 3 2 4switch语句 语句执行流程 指语句的最后一条是否为break 简单语句或复合语句 case语句出现的次序并不影响执行结果 例3 6 输入学生成绩 通过switch语句按分数段确定等级 其中 90分以上为优 80分以上为良 70分以上为中 60分以上为及格 60分以下为不及格 includevoidmain intscore printf Enterscore 0 100 scanf d 说明 switch后的表达式可以是整型 字符型或枚举型 但不能是关系表达式或逻辑表达式 case后的常量表达式类型必须与之匹配 并且每个case常量表达式的值必须互不相同 否则会出现编译错误 每个case后的语句可以是单一语句或空语句 也可以是多条语句 当然也可以是复合语句 由于case后是顺序执行的多条语句 因此可以不必写成带花括号的复合语句形式 switch语句中的break是一个可选项 它的作用是中止与某个常量有关的语句段 并使程序跳到switch结构后的下一语句 如果没有break语句 则程序将继续执行直到switch的结尾或遇到一个break为止 灵活运用switch语句的这一特性 可大大简化编程设计 default在switch语句中也是一个可选项 例3 7 在程序设计中常用switch语句来处理各种键盘命令 例如 菜单选择等 在屏幕上显示菜单 1 Open2 Edit3 Save 并根据用户输入 执行相应的操作 includevoidmain charch printf 1 Open2 Edit3 Save n scanf c switch的嵌套 switch语句允许嵌套 即switch本身可以作为另一个层switch语句的一部分 switch i case0 switch j case0 printf i j break case1 printf i j break case1 switch几个注意点 1 if语句能测试关系表达式和逻辑表达式 而switch只能测试相等 2 switch语句的每个case后面的常数必须是整型或字符型 在使用字符常量时 自动转换成整数 3 switch语句中每个case常数必须不同 在嵌套的switch语句中 内外不同层的case语句可以有相同的case常数 C语言中有三种循环结构 while do while和for循环 利用有关的运算符构造表达式 以控制循环的执行 3 3循环结构 循环 就是在给定的条件成立时反复执行某一程序段 被反复执行的程序段称为循环体 3 2 1while语句 真 非零 循环语句 假 零 1 while语句的形式 while 表达式 循环体 2 while语句常称为 当型 循环语句 3 说明 先判断表达式 后执行语句 表达式同if语句后的表达式一样 可以是任何类型的表达式 循环体多于一句时 用一对 括起 while循环结构常用于循环次数不固定 根据是否满足某个条件决定循环与否的情况 例3 9 求1 2 3 100 includevoidmain inti sum sum 0 i 1 while i 100 sum sum i i printf sum d n sum 例 分析下列程序段的循环次数 i 1 while i 100 putchar i i 1 while i 100 putchar i 补充 用while语句计算n includevoidmain intn m temp scanf d 程序运行结果55 120 注意 表达式在判断前 必须要有明确的值 循环体中一般有改变条件表达式的语句 while 表达式 后面没有分号 在循环体中应有控制结束的语句 否则会形成死循环 即循环不结束 3 2 2do while语句 1 do while的形式 do 循环体 while 表达式 2 do while语句常称为 直到型 循环语句 真 非零 循环体 假 零 例3 10 用do while编程实现1 100的和 includevoidmain inti sum 0 i 1 do sum sum i i while i 100 printf d n sum 程序运行结果 5050 补充 用while语句计算5 includevoidmain intt 1 i 2 do t t i i while i 5 printf 5 d n t 程序运行结果 55 120 3 说明 do while语句先执行语句 后判断表达式 第一次条件为真时 while do while等价 第一次条件为假时 二者不同 voidmain inti sum 0 scanf d voidmain inti sum 0 scanf d 在if while语句中 表达式后面都没有分号 而在do while语句的表达式后面则必须加分号 do while和while语句相互替换时 要注意修改循环控制条件 3 2 3for语句 1 for的形式 for 初始表达式1 条件表达式2 循环表达式3 循环体 表达式1 用于循环开始前为循环变量设置初始值 表达式2 控制循环执行的条件 决定循环次数 表达式3 循环控制变量修改表达式 循环体语句 被重复执行的语句 表达式3 计算表达式1 循环体 假 零 真 非零 for的下一条语句 2 执行过程 例3 11 用for语句编程实现1 100的和 includevoidmain inti sum 0 for i 1 i 100 i sum sum i printf d n sum 程序运行结果 5050 补充 用for语句编程计算1 9的平方 includevoidmain inti j for i 1 j 1 i 10 i j printf d d 4d i j i j 注意 for中各个表达式 表达式1 可以省 此时应在for语句之前给循环变量赋初值 但其后的分号不能省略 省略表达式2 不判断循环条件 这时在循环体中必须要有出口 使循环能够结束 表达式3也可以省略 循环体中要有改变循环变量值的语句 保证循环正常结束 典型例题分析 例 求累加和1 2 3 1000 基本方法 属于 累加器 类型问题 1 在进入累加前先给累加器赋初值 一般为0 2 用循环语句实现累加 for 循环变量赋初值 循环条件 循环变量改变规律 3 循环体语句的设计 累加器当前值 累加器原值 循环变量当前值 累加器赋初值 思考 求偶数和2 4 6 100 参考程序 voidmain longintk s s 0 for k 2 k 100 k 2 s s k printf s ld s 累加 1 给累乘器赋初值 一般为1 2 用循环语句实现累乘 for 循环变量赋初值 循环条件 循环变量改变规律 3 循环体设计 累乘器当前值 累乘器原值 循环变量当前值 例 求累乘积 如 1 2 3 100 基本方法 属于 累乘器 类型问题 累乘器赋初值 思考 求n 1 2 3 n 参考程序 voidmain doubles 1 intk for k 1 k 100 k s s k printf s lf s 累乘 整数连乘结果一定是整数 而本例中结果数值相当大 用long型都无法存放 因此将存放累乘结果的变量s定义为double型 在循环体语句中又包含有另一个完整的循环结构的形式 称为循环的嵌套 如果内循环体中又有嵌套的循环语句 则构成多层循环 3 3 4循环的嵌套 嵌套在循环体内的循环体称为内循环 外面的循环称为外循环 while do while for三种循环都可以互相嵌套 下面几种都是合法的形式 1 while 2 do 3 for while dofor while while 4 while 5 for 6 do do while for while while 循环语句之间的关系 真 真 外循环初始条件 内循环初始条件 内循环体 外循环条件 假 内循环条件 假 内循环循环条件 外循环循环条件 循环结束 二重循环嵌套结构执行流程 例3 12 编程输出如下形式的九九乘法表 includevoidmain inti j for i 1 i 10 i printf 4d i 打印表头 第一行 printf n for i 1 i 36 i printf c printf n for i 1 i 9 i 被乘数i从1变到9 for j 1 j 9 j 乘数j从1变到9 printf 4d i j 输出第i行j列的值i j printf n 换行 打印下一行 1 break语句 3 3 5break语句和continue语句 1 语句形式 break 2 作用 结束break所在的switch语句 结束当前循环 跳出break所在的循环结构 break语句用法示例 includevoidmain inti for i 0 i 6 i printf d n i if i 5 break 程序运行结果012345 思考 为什么不输出6 例3 13 从键盘任意输入若干个整数 直到输入了负数或输入整数的个数大于50为止 编程计算已输入整数之和 includevoidmain inti n sum 0 for i 0 i 50 i printf nInputnumber scanf d 补充 计算半径为1 2 8的圆面积 但当面积大于100时结束计算 in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山东省聊城市单招职业适应性考试必刷测试卷及答案解析(夺冠系列)
- 2026年海南卫生健康职业学院单招职业适应性测试必刷测试卷带答案解析
- 2026年哈尔滨应用职业技术学院单招职业适应性考试题库及答案解析(名师系列)
- 2026年新疆天山职业技术大学单招职业适应性考试题库带答案解析
- 2026年仰恩大学单招职业倾向性考试必刷测试卷带答案解析
- 2026年宁夏建设职业技术学院单招职业适应性考试题库及答案解析(名师系列)
- 2026年上海戏剧学院单招职业适应性测试必刷测试卷及答案解析(夺冠系列)
- 2026年徽商职业学院单招职业适应性考试必刷测试卷及答案解析(夺冠系列)
- 2026年成都工业职业技术学院单招职业倾向性考试题库带答案解析
- 2026年宁夏工商职业技术学院单招职业技能测试题库带答案解析
- 专题10 圆锥曲线综合大题 (解析版)
- 短视频推广运营餐饮
- 后工序考试试题(4组)
- 《烹饪美学》课件-项目五-饮食器具造型艺术
- 汽车租赁服务投标方案
- Leica M525F40手术显微镜的使用注意事项与保养
- 乡村振兴的实践探索(湖南农业大学)学习通超星课后章节答案期末考试题库2023年
- 4 1中美南海撞机事件
- 眼震视图检查及报告
- 江西滨湖总体方案设计框架
- GA 504-2004阻燃装饰织物
评论
0/150
提交评论