C语言讲义第03章-控制语句.ppt

上传人:max****ui 文档编号:8620154 上传时间:2020-03-30 格式:PPT 页数:66 大小:530.81KB
返回 下载 相关 举报
C语言讲义第03章-控制语句.ppt_第1页
第1页 / 共66页
C语言讲义第03章-控制语句.ppt_第2页
第2页 / 共66页
C语言讲义第03章-控制语句.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
第三章控制语句 C语言程序设计 主要内容 控制语句简介if else语句Switch Casefor语句while do while语句break continue语句特别的goto语句多重循环小结 控制语句 控制语句是C语言中非常重要的语句 用来实现结构程序设计中的选择和循环结构 语言主要有八种控制语句 可分成以下三类 1 选择控制语句 if else语句 switch case语句 2 循环控制语句 for语句 while语句 dowhile语句 3 转移控制语句 break语句 continue语句 goto语句 3 1if else语句 if else语句判定所给的条件是否满足 根据判定的结果选择执行两种操作之一执行 if else语句的三种形式if 表达式 语句if 表达式 语句1else语句2if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 语句nelse语句n 1 形式1 if 表达式 语句功能 这种形式的语句无else部分 它的功能是首先对表达式进行求解 若表达式的值为非0 则执行语句 若表达式的值为0 则该语句不起作用 不执行 而继续执行if语句下面的语句 例如 if a b printf themaxis d a 当a b为真时 打印输出a的值 否则什么也不执行 3 1if else语句三种形式之一 形式2 if 表达式 语句1else语句2功能 首先对表达式进行求解 若表达式的值为非0 则执行语句1 否则执行语句2 例如 if a b printf themaxis d a elseprintf themaxis d b 当a b为真时 打印输出a的值 否则打印输出b的值 3 1if else语句三种形式之二 形式3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 语句nelse语句n 1 3 1if else语句三种形式之三 功能 依次判断表达式的值 当出现某个值为非0时 则执行其对应的语句 然后跳到整个if语句之外继续执行程序 如果所有的表达式均为假 则执行语句n 1 然后继续执行后续程序 前二种形式的if else语句一般都用于两个分支的情况 当有多个分支选择时 可采用第3种形式if else语句 例如 if grade 80 printf A elseif grade 70 printf B elseif grade 60 printf C elseprintf D 3 1if else语句三种形式之三 注意事项 1 在if后面的表达式 其类型可以是任意的 整形 实型 字符型 指针型 C语言在判断时只要非0 就认为是真 按真处理 只有0时才认为是假 按假处理 因此 而不仅仅限于逻辑表达式或关系表达式 3 1if else语句注意事项 如 if a b 2 C语句必须在最后出现分号 分号是语句中不可缺少的一部分 因此if和else后面的语句都必须有分号 例如 if a b printf themaxis d a elseprintf themaxis d b 3 1if else语句注意事项 3 1if else语句注意事项 语句可以是复合语句if x if x 0 if x if x 0 在每个else前面有一分号 整个语句结束处有一分号在if或else后可有多个操作语句 此时需加 将几个语句括起来成为一个复合语句 例考虑下面程序的输出结果 includemain intx y scanf d d CompileError 例3 1接收任意输入的两个实数 按从大到小的顺序输出 程序如下 3 1if else语句举例 例3 3要求判别键盘输入字符的类别 可以根据输入字符的ASCII码来判别类型 由ASCII码表可知ASCII值小于32的为控制字符 在 0 和 9 之间的为数字 在 A 和 Z 之间为大写字母 在 a 和 z 之间为小写字母 其余则为其它字符 这是一个多分支选择的问题 可采用第3种形式的 程序如下 3 1if else语句举例 lt03 03 c includevoidmain charc printf Enteracharacter c getchar if c 0 运行 Enteracharacter Thecharacterisacontrolcharacter 运行 Enteracharacter 8 Thecharacterisadigit 运行 Enteracharacter D Thecharacterisacapitalletter 运行 Enteracharacter h Thecharacterisalowerletter 运行 Enteracharacter F1 Thecharacterisothercharacter If语句嵌套 在一个if语句中又包含一个或多个if语句 一般形式 注意事项 if else配对原则 缺省 时 else总是和它上面离它最近的未配对的if配对 3 1 2if else语句嵌套 例 if a b if b c printf a b c elseprintf a b 修改 if a b if b c printf a b c elseprintf a b 实现if else正确配对方法 加 例考虑下面程序输出结果 main intx 100 a 10 b 20 intv1 5 v2 0 if a b if b 15 if v1 x 1 elseif v2 x 10 x 1 printf d x ifz c 结果 1 例3 5有一函数如下 y 写一程序 输入x 输出y的值 程序如下 3 1 2if else语句嵌套注意事项 x x 4 2x 1 4 x 10 3x 12 x 10 条件运算符 条件运算符为 和 它是一个三目运算符 即有三个参与运算的量 由条件运算符组成条件表达式的一般形式为 表达式1 表达式2 表达式3功能 如果表达式1的值为非0 真 则以表达式2的值作为条件表达式的值 否则以表达式3的值作为整个条件表达式的值 条件表达式通常用于赋值语句之中 条件运算符 例如 max a b a b它等价于 if a b max a elsemax b 说明 1 条件运算符是一个三目运算符 即有三个参与运算的量 它是C语言中唯一的一个三目运算符 2 条件运算符的运算优先级低于关系运算符和算术运算符 但高于赋值符 因此max a b a b可以去掉括号而写为max a b a b 如果有a b a b 1则它等价于 a b a b 1 3 条件运算符 和 是一对运算符 不能分开单独使用 4 条件运算符的结合方向是自右至左 a b a c d c d应理解为a b a c d c d 这也就是条件表达式嵌套的情形 即其中的表达式3又是一个条件表达式 如果a 2 b 3 c 4 d 5 则条件表达式的值为5 条件运算符 5 条件表达式不能取代一般的if语句 只有当if语句的表达式为 真 和 假 时 都执行赋值语句并且都给同一个变量赋值时才能代替if语句 6 表达式1的类型可以与表达式2和表达式3的类型不同 如 a b c 表达式2和表达式3的类型也可以不同 此时条件表达式的值的类型为二者中较高的类型 例如 a b 3 3 5此时如果a b 则条件表达式的值为3 5 若a b 值应为3 但是由于3 5为实型数据 比整型的数据类型高 因此 将3转换成实型数据3 0 所以当a b时 条件表达式的值为3 0 条件运算符 例3 7输入一个字符 如果是小写字母 转换成对应的大写字母 其它字符不变 程序如下 条件运算符 举例 switch语句 开关分支语句 一般形式 switch 表达式 caseE1 语句组1 break caseE2 语句组2 break caseEn 语句组n break default 语句组 break 执行过程 3 2Switch Case语句 switch语句说明 Switch后面的表达式允许为任何类型 一般为整形或字符型 当表达式的值与某一个case后面的常量表达式的值相等时 就执行case后面的语句 若所有的case中的常量表达式的值都没有与表达式的值相匹配 就执行default后面的语句 执行完一个case后面的语句后 流程控制转移到下一个case继续执行 若无break语句 每一个case的常量表达式的值必须互不相等 各个case和default的出现次序影响执行结果 若无break语句 break语句为了保证各个case和default的出现次序不影响执行结果 在case语句后加一break语句 3 2Switch Case语句 例switch score case5 printf Verygood case4 printf Good case3 printf Pass case2 printf Fail default printf dataerror switch1 c 运行结果 score为5时 输出 Verygood Good Pass Fail dataerror 3 2Switch Case语句 运行结果 a 2 b 1 附加说明 case后可包含多个可执行语句 且不必加 switch可嵌套多个case可共用一组执行语句 例voidmain intx 1 y 0 a 0 b 0 switch x case1 switch y case0 a break case1 b break case2 a b break case3 a b printf na d b d a b switch2 c 如 case A case B case C printf score 60 n break 3 2Switch Case语句 例3 8求一元二次方程ax2 bx c 0的根 程序分析 一元二次方程ax2 bx c 0的求根公式为 x 当a 0时 不是二次方程 当a 0 b 0时 方程无解 当a 0 b 0时 方程的解为 当a 0时 b2 4ac 0有两个不相等的实根 b2 4ac 0有两个相等的实根 b2 4ac 0有两个复根 程序如下 3 2多分支程序举例 3 2多分支程序举例 例3 9写程序 判断某一年是否是闰年 分析 能被4整除但不能被100整除的是闰年 能被4 100 400同时整除的也是闰年 程序如下 例3 10四则运算求值 判断运算符 然后输出运算值 当输入运算符不是 时给出错误提示 程序如下 for循环使用灵活 功能很强 不仅可用来表示循环次数已知的情况 而且也可以用于循环次数不确定只给出循环终止条件的情况 for语句的一般形式 执行过程 3 3for语句 for expr1 expr2 expr3 循环体语句 例3 12编写程序计算1 2 3 100的和 3 3for语句 includevoidmain intis ii is 0 for ii 1 ii 100 ii is is ii printf thesumis d n is for循环最简单也就是最容易理解的形式如下 for 循环变量赋初值 循环条件 循环变量增值 循环体语句 说明 1 for语句一般形式中的表达式1可以省略 注意省略表达式1时 其后的分号是不能省略的 省略后的一般形式如下 for 表达式2 表达式3 没有了表达式1 此时就没有了给循环变量赋初值的操作 一般情况下程序设计者应在for语句之前给循环变量赋初值 3 3for语句说明1 2 for语句一般形式中的表达式2也可以省略 注意省略时 其后的分号是不能省略的 省略后的一般形式如下 for 表达式1 表达式3 没有了表达式2 此时就没有了循环判断条件 循环会无止境的执行下去 相当于表达式2始终为真 此时程序设计者可采用我们以后要讲的break语句强制结束循环 3 3for语句说明2 3 表达式3也可以省略 省略后的一般形式如下 for 表达式1 表达式2 此时没有了循环变量增值的操作 为了保证循环能正常结束 一般情况下程序设计者应在循环体内改变循环变量的值 3 3for语句说明3 4 表达式1和表达式3可以同时省略 省略后的一般形式如下 for 表达式2 此时的for循环相当于我们以后要讲的while循环 程序设计者应在for语句之前给循环变量赋初值 在循环体内改变循环变量的值 3 3for语句说明4 5 表达式1 表达式2和表达式3都可以省略 省略后的一般形式如下 for 此时程序设计者应在for语句之前给循环变量赋初值 在循环体内改变循环变量的值 强制结束循环 6 表达式1和表达式3也可以是逗号表达式 如 for i 0 j 100 i j i j s s i j这个循环实现的也是1 2 3 100的功能 7 表达式2的值只要非0 就执行循环体 例如 for c getchar n 在表达式2中不断从终端接收字符赋给变量c 直到输入一个 换行 为止 3 3for语句说明5 6 7 3 3for语句 例3 13在屏幕上输出1到100 每行输出5个 程序如下 例3 14将输入的一串字符显示在屏幕上 直到输入字符 时停止 程序如下 includevoidmain intii for ii 1 ii 100 ii printf d ii if ii 5 0 printf n includevoidmain charcc printf pleaseinputastring for cc getchar cc cc getchar putchar cc 3 4 1While语句While语句是专门的 当型 循环语句 其一般形式如下 while 表达式 循环体语句功能 先判断表达式 当表达式的值为非0 真 时 就反复执行循环体语句 直到表达式的值为0 假 退出while语句 继续执行while语句后面的语句 3 4while do while语句 例3 15用while语句编写程序计算1 2 3 100的和 程序如下 3 4while do while语句 说明 1 循环体有可能一次也不执行 2 循环体可为简单语句也可为复合语句 若为复合语句应该用花括号括起来 3 循环体内应有使表达式的值趋向于0 假 的操作 使得能够退出while循环 例3 16编程实现显示1 10的平方 程序如下 3 4while do while语句 4 循环表达式可以始终为真 通过在循环体中加break语句 关于该语句 参见3 5节内容 对循环进行控制 例如例3 16也可以用如下的程序实现 includevoidmain intii 1 while 1 循环表达式始终为真 printf d d d n ii ii ii ii ii if ii 10 break 当ii 10时 break语句跳出循环 3 4while do while语句 3 4 2do while语句do while语句用来实现 直到型 循环 其一般形式如下 do循环体语句 while 表达式 功能 先执行循环体 然后判断表达式的值 若为非0 真 时 就反复执行循环体 直到表达式的值为0 假 退出while语句 继续执行while语句后面的语句 3 4while do while语句 例3 17用do while语句编写程序计算1 2 3 100的和 程序如下 3 4while do while语句 说明 至少执行一次循环体 在if语句 while语句中 表达式后面都不加分号 而在do while语句的表达式后面则必须加分号 在do和while之间的循环体由多个语句组成时 也必须用 括起来组成一个复合语句 do while可转化成while结构 但do while和while语句相互替换时 要注意修改循环控制条件 3 4while do while语句 例3 18输入若干个职工的工资 直到输入负数结束 求工资的总和及平均工资 程序如下 3 4while do while语句举例 3 5 1break语句break语句的一般形式为 break 功能 在分支结构程序设计中已经介绍过用break语句可以使流程跳出switch结构 继续执行switch语句下面的一个语句 实际上 break语句还可以用来从循环体内中途跳出循环体 即提前结束循环 执行循环下面的语句 3 5break continue语句 while 表达式1 语句组1if 表达式2 break 语句组2 当表达式1成立时 进入循环体执行 若表达式2成立时执行break语句 提前结束循环 即不再继续执行循环 即使此时表达式1还成立 3 5break continue语句 说明 break语句使用应该注意的问题 1 在循环语句中 break语句一般都是与if语句一起使用 2 break语句不能用于循环语句和switch语句之外的任何其它语句中 3 5break continue语句注意 例3 19计算1 2 3 100的和 当和大于2500时停止 程序如下 在3 3节讲解for循环时 曾提到for语句一般形式中的表达式2可以省略 当省略表达式2时 因为没有了表达式2 此时就没有了循环判断条件 循环会无止境的执行下去 相当于表达式2始终为真 此时程序设计者应采用break语句强制结束循环 例3 20编写程序计算1 2 3 100的和 程序如下 3 5break continue语句 3 5 2continue语句continue语句的一般形式为 continue 功能 continue语句是跳过循环体中剩余的语句而强制执行下一次循环 其作用为结束本次循环 即跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环的判定 3 5break continue语句 如 while 表达式1 语句组1if 表达式2 continue 语句组2 当表达式1成立时 进入循环体执行语句组1 若表达式2成立时执行continue语句 语句组2就不再执行 而转去判定下一次循环是否执行 3 5break continue语句 说明 continue语句使用应该注意的问题 1 continue语句只能用在循环语句中 2 一般都是与if语句一起使用 例3 21把1 100之间的不能被5整除的数输出 程序如下 3 5break continue语句 goto语句是无条件转移语句 goto语句的一般形式为 goto语句标号 功能 无条件转向 语句标号 处执行 说明 1 语句标号是一标识符 它的命名规则与变量名相同 2 goto语句可以灵活跳转 它能从多重循环体一下子跳到外面 用不着写很多次的break语句 这个特点使得程序处理一些异常情况时非常的方便 但是如果不加限制 它会破坏结构化设计风格 但实事求是地说 错误是程序员自己造成的 不是goto的过错 所以我们主张少用 慎用goto语句 而不是禁用 3 6特别的goto语句 循环体内的语句本身还可以是另一个循环语句 因此这样就构成了另一层循环 其中 处于外层的循环称为外循环 处于内层的循环称为内循环 这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套 这种嵌套结构的循环可以有多层 从而构成多重循环 三种循环 while循环 do while循环和for循环 可以互相嵌套 3 7多重循环 多重循环的执行过程中 外循环控制变量的值变化得较慢 内循环控制变量的值变化得较快 外循环进行1次 内循环就要完成所有的循环 说明 写多重循环程序时要注意 内外循环的层次要分明 内层循环必须被完整地嵌套在外循环在里面 可以若干个循环嵌套 并列 但绝对不允许循环之间相互交叉 例3 22输出由星号构成的一个5行的直角三角形 程序如下 例3 23编写一个程序 输出如下所示九九乘法表 程序如下 例3 24百马百担问题程序如下 3 7多重循环 例3 25任意输入一个自然数n 判断它是否为素数 算法分析 一个自然数n如果只能被1和它本身整除 则该自然数为素数 否则不是素数 根据素数的定义 可以编写一个容易理解的判定素数的程序 程序如下 上面的程序容易理解 但这种方法效率不高 当自然数in较大时 循环次数较多 可采取一种改进效率的方法 ii从2循环到即可 可以提高循环的效率 程序如下 3 7多重循环举例 include includevoidmain intin ii ik scanf d 3 7多重循环举例 例3 26求Fibonacci数列 1 1 2 3 5 8 的前40个数 即 1 1 n 1 1 2 3 4 5 6 7 2 1 n 2 11235813 n n 1 n 2 n 3 程序如下 3 7多重循环举例 例3 27用 4 1 1 3 1 5 1 7 公式求 的近似值 直到最后一项的绝对值小于10 6为止 程序如下 3 7多重循环举例 3 8小结 本章主要讲解了控制语句的使用及其功能 控制语句用于控制程序的流程 是C语言中非常重要的语句 用来实现程序的选择结构和循环结构 语言主要有八种控制语句 选择控制语句包括 if else语句和switch case语句 循环控制语句包括 for语句 while语句 do while语句转移控制语句包括 break语句 continue语句 goto语句 3 8小结 选择控制语句包括 if else语句和switch case语句 if else语句是选择控制语句 它判定所给的条件是否满足 根据判定的结果选择两种分支之一执行 if后面是一种分支 else后面是另外一种分支 如果条件满足 选择if后面的分支执行 如果条件不满足 选择else后面分支执行 if else语句并不是只能用于实现两分支的情况 if else语句有三种不同的形式 使得它可用于两分支情况也可用于多分支情况 3 8小结 switch case语句是多分支选择语句 利用嵌套的if语句也可以处理多分支选择问题 但如果分支较多 则嵌套的if语句层数多 致使程序冗长而且可读性降低 所以C语言提供switch语句直接处理多分支选择 3 8小结 循环控制语句包括 for语句 while语句 do while语句for语句用来实现for循环 for循环使用灵活 功能很强 不仅可用来表示循环次数已知的情况 而且也可以用于循环次数不确定只给出循环终止条件的情况 for语句的一般形式如下 for 表达式1 表达式2 表达式3 循环体语句 3 8小结 while语句是先判断表达式后再执行循环体的循环语句 因此 有可能一次循环体也不执行 do while循环是先执行循环体后再判断表达式的循环语句 通常用它来完成必须至少执行一次循环体的操作 3 8小结 转移控制语句包括 break语句 continue语句 goto语句 break语句用于从内循环跳到外循环 使循环提前结束 但它只能跳一层循环 不能跳多层循环 continue语句用于跳过其后的语句 使本轮循环提前结束 goto语句是无条件转移语句 我们主张少用 慎用goto语句 而不是禁用 3 8小结 多重循环 循环体内的语句本身还可以是另一个循环语句 因此这样就构成了另一层循环 其中 处于外层的循环称为外循环 处于内层的循环称为内循环 这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套 这种嵌套结构的循环可以有多层 从而构成多重循环 多重循环的执行过程中 外循环控制变量的值变化得较慢 内循环控制变量的值变化得较快 外循环进行1次 内循环就要完成所有的循环 写多重循环程序时要注意 内外循环的层次要分明 内层循环必须被完整地嵌套在外循环在里面 可以若干个循环嵌套 并列 但绝对不允许循环之间相互交叉
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!