




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 控制语句 C语言程序设计 主要内容 控制语句简介 ifelse语句 SwitchCase for语句 while、dowhile语句 break、continue语句 特别的goto语句 多重循环 小结 控制语句 控制语句是C语言中非常重要的语句,用来实现结构 程序设计中的选择和循环结构。 语言主要有八种控制语句。可分成以下三类: (1) 选择控制语句: ifelse语句,switchcase语句 (2) 循环控制语句: for语句,while语句,do while语句 (3) 转移控制语句: break语句,continue语句,goto语句 3.1ifelse语句 ifelse语句判定所给的条件是否满足,根据判定的 结果选择执行两种操作之一执行。 ifelse 语句的三种形式 if(表达式) 语句 if (表达式) 语句1 else 语句2 if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1 形式1: if(表达式) 语句 功能:这种形式的语句无else部分, 它的功能是首先对表达式进行求解, 若表达式的值为非0,则执行语句;若 表达式的值为0,则该语句不起作用, 不执行,而继续执行if语句下面的语 句。 例如: if(ab) printf(“the max is %d “,a); 当ab为真时,打印输出a的值,否则 什么也不执行。 3.1ifelse语语句三种形式之一 expr statement 非0 =0 形式2:if (表达式) 语句1 else 语句2 功能:首先对表达式进行求解,若表达式的 值为非0,则执行语句1,否则执行语句2。 例如: if (ab) printf(“the max is %d “,a); else printf(“the max is %d “,b); 当ab为真时,打印输出a的值,否则打印输出 b的值。 3.1ifelse语语句三种形式之二 expr statement1statement2 非0=0 形式3: if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1 3.1ifelse语语句三种形式之三 expr1 statemnt1 非0 =0 expr2 expr3 statemntnstatemnt3statemnt2 非0 非0 =0 =0 功能:依次判断表达式的值,当出现某个值为非0时, 则 执行其对应的语句。然后跳到整个if语句之外继续执行程 序。 如果所有的表达式均为假,则执行语句n+1。 然后继 续执行后续程序。前二种形式的ifelse语句一般都用于 两个分支的情况。 当有多个分支选择时,可采用第3种形 式ifelse语句。 例如: if(grade=80) printf(“A“); else if(grade=70) printf(“B“); else if(grade=60) printf(“C“); else printf(“D“); 3.1ifelse语语句三种形式之三 注意事项: 1、在if 后面的表达式,其类型可以是任意的(整形、实型、 字符型、指针型), C语言在判断时只要非0,就认为是真 ,按真处理,只有0时才认为是假,按假处理。因此,而不 仅仅限于逻辑表达式或关系表达式。 3.1ifelse语语句注意事项 如:if(a=b if(3) printf(“OK”); if(a) printf(“%d”,a); 2、C语句必须在最后出现分号,分号是语句中不可缺少的一部 分,因此if和else后面的语句都必须有分号。 例如: if(ab) printf(“the max is %d “,a); else printf(“the max is %d “,b); 3.1ifelse语语句注意事项 3.1ifelse语语句注意事项 u语句可以是复合语句 u if(x) if(x!=0) if(!x) if(x=0) u在每个else前面有一 分号,整个语句结束处 有一分号 u在 if 或 else 后可 有多个操作语句,此时 需加 将几个语句括 起来成为一个复合语句 。 例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y); Compile Error! 例3.1 接收任意输入的两个实数,按从大到小的顺 序输出。 程序如下: 3.1ifelse语语句举例 例3.3 要求判别键盘输入字符的类别。 可以根据输入字符的ASCII码来判别类型。由ASCII码表可 知ASCII值小于32的为控制字符。 在0和9之间的 为数字,在A和Z之间为大写字母, 在a和 z之间为小写字母,其余则为其它字符。 这是一个多 分支选择的问题,可采用第3种形式的. 程序如下: 3.1ifelse语语句举例 /*lt03_03.c*/ #include void main() char c; printf(“Enter a character:“); c=getchar(); if(c=0 else max=b; 说明: (1)条件运算符是一个三目运算符,即有三个参与运算的量, 它是C语言中唯一的一个三目运算符。 (2)条件运算符的运算优先级低于关系运算符和算术运算符,但 高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b,如果有 ab?a:b+1 则它等价于:ab?a: (b+1) 。 (3)条件运算符?和:是一对运算符,不能分开单独使用。 (4)条件运算符的结合方向是自右至左。 ab?a:cd?c:d应理解为ab?a:(cd?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的类型也可以不同,此时条件表达式的值的类 型为二者中较高的类型。 例如:ab? 3:3.5 此时如果ab,则条件表达式的值为3.5,若ab,值应为3,但是 由于3.5为实型数据,比整型的数据类型高,因此,将3转换成 实型数据3.0,所以当ab时,条件表达式的值为3.0 条件运算符 ?: 例3.7 输入一个字符,如果是小写字母,转换成对应 的大写字母,其它字符不变。 程序如下: 条件运算符 ?:举例 switch语句(开关分支语句) v一般形式: switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; v执行过程: switch 表达式 语句组1语句组2语句组n语句组 . E 1E 2Endefault case 3.2 SwitchCase语句 switch语句说明: Switch后面的表达式允许为任何类型,一般为整形或字符型 。 当表达式的值与某一个case后面的常量表达式的值相等时 ,就执行case后面的语句,若所有的case中的常量表达式 的值都没有与表达式的值相匹配,就执行default后面的语 句。 执行完一个case后面的语句后,流程控制转移到下一个 case继续执行。( 若无break语句) 每一个case的常量表达式的值必须互不相等。 各个case和default的出现次序影响执行结果。 ( 若无 break语句) break语句 为了保证各个 case和default的出现次序不影响执行结果 ,在case语句后加一break语句。 3.2 SwitchCase语句 例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); /* switch1.c */ 运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error! 3.2 SwitchCase语句 运行结果:a=2,b=1 l附加说明: lcase后可包含多个可执行语句,且不必加 lswitch可嵌套 l多个case可共用一组执行语句 例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); /*switch2.c */ 如: case A: case B: case C: printf(“score60n”); break; 3.2 SwitchCase语句 例3.8 求一元二次方程ax2+bx+c=0的根。 程序分析: 一元二次方程ax2+bx+c=0的求根公式为: x= 当a=0时,不是二次方程。 当a=0,b=0时,方程无解。 当a=0,b0时,方程的解为 。 当a0时,b2-4ac0 有两个不相等的实根。 b2-4ac=0 有两个相等的实根。 b2-4ac void main ( ) int is , ii ; is = 0 ; for (ii = 1 ; ii void main ( ) int ii ; for (ii = 1 ; ii void main ( ) char cc ; printf (“please input a string:“) ; for (cc = getchar () ; cc != ! ; cc = getchar() putchar (cc) ; 3.4.1 While语句 While语句是专门的“当型”循环语句。其一般形式如下: while(表达式) 循环体语句 功能:先判断表达式,当表达式的值为非0(真)时,就反复 执行循环体语句,直到表达式的值为0(假),退出while语句 ,继续执行while语句后面的语句。 3.4 while、dowhile语句 例 3.15用while语句编写程序计算1+2+3+100的和 。 程序如下: 3.4 while、dowhile语句 说明: (1)循环体有可能一次也不执行。 (2)循环体可为简单语句也可为复合语句,若为复合语句应该用 花括号括起来。 (3)循环体内应有使表达式的值趋向于0(假)的操作,使得能 够退出while循环。 例3.16编程实现显示110的平方。 程序如下: 3.4 while、dowhile语句 (4)循环表达式可以始终为真,通过在循环体中加break语句( 关于该语句,参见3.5节内容)对循环进行控制。 例如例3.16也可以用如下的程序实现: # include void main() int ii = 1 ; while (1)/*循环表达式始终为真*/ printf (“%d*%d=%dn“ , ii , ii , ii * ii) ; ii + ; if (ii 10) break ;/*当ii10时,break语句跳出循环*/ 3.4 while、dowhile语句 3.4.2 dowhile语句 dowhile语句用来实现“直到型”循环。其一般形 式如下: do 循环体语句; while(表达式); 功能:先执行循环体,然后判断表达式的值,若 为非0(真)时,就反复执行循环体,直到表达式的 值为0(假),退出while语句,继续执行while语句 后面的语句。 3.4 while、dowhile语句 例3.17 用dowhile语句编写程序计算1+2+3+100 的和。 程序如下: 3.4 while、dowhile语句 说明: 至少执行一次循环体。 在if语句,while语句中, 表达式后面都不加分号, 而在 do-while语句的表达式后面则必须加分号。 在do和while之间的循环体由多个语句组成时,也必须用 括起来组成一个复合语句。 dowhile可转化成while结构,但do-while和while语句相 互替换时,要注意修改循环控制条件。 3.4 while、dowhile语句 例3.18 输入若干个职工的工资,直到输入负数结束 ,求工资的总和及平均工资。 程序如下: 3.4 while、dowhile语句举例 3.5.1break语句 break语句的一般形式为: break; 功能:在分支结构程序设计中已经介绍过用break语句可以 使流程跳出switch结构,继续执行switch语句下面的一个 语句。实际上,break语句还可以用来从循环体内中途跳出 循环体,即提前结束循环,执行循环下面的语句。 3.5 break、continue语句 while(表达式1) 语句组1 if(表达式2) break; 语句组2 当表达式1成立时,进入循环体执行,若表达式2成 立时执行break语句,提前结束循环,即不再继续 执行循环(即使此时表达式1还成立)。 3.5 break、continue语句 说明: break语句使用应该注意的问题 (1)在循环语句中,break语句一般都是与if语句一起使用。 (2)break语句不能用于循环语句和switch语句之外的任何其它 语句中。 3.5 break、continue语句注意 例3.19计算1+2+3+100的和,当和大于2500时 停止。 程序如下: 在3.3节讲解for循环时,曾提到for语句一般形式中的 表达式2可以省略,当省略表达式2时,因为没有了 表达式2,此时就没有了循环判断条件,循环会无止 境的执行下去,相当于表达式2始终为真,此时程序 设计者应采用break语句强制结束循环。 例3.20编写程序计算1+2+3+100的和。 程序如下 3.5 break、continue语句 3.5.2continue语句 continue语句的一般形式为: continue; 功能:continue语句是跳过循环体中剩余的语句而强制执行 下一次循环。其作用为结束本次循环,即跳过循环体中下面尚 未执行的语句,接着进行下一次是否执行循环的判定。 3.5 break、continue语句 如: while(表达式1) 语句组1 if(表达式2) continue; 语句组2 当表达式1成立时,进入循环体执行语句组1,若表 达式2成立时执行continue语句,语句组2就不再执 行,而转去判定下一次循环是否执行。 3.5 break、continue语句 说明: continue语句使用应该注意的问题 (1)continue语句只能用在循环语句中。 (2)一般都是与if语句一起使用。 例3.21把1100之间的不能被5整除的数输出。 程序如下: 3.5 break、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 # include void main() int in , ii , ik ; scanf (“%d“, ik = sqrt (in) ; for (ii = 2 ; ii = ik + 1) printf (“%d is a prime numbern“,in) ; else printf (“%d is not a prime numbern“,in) ; 3.7多重循环举例 例3.26求Fibonacci数列:1,1,2,3,5,8,的前40个 数,即 11 (n=1) 1 2 3 4 5 6 7 . 21 (n=2) 1 1 2 3 5 8 13 n n-1 n-2 (n=3) 程序如下: 3.7多重循环举例 例3.27用/4 11/31/51/7 公式求的近 似值,直到最后一项的绝对值小于10-6为止。 程序如下: 3.7多重循环举例 3.8小结 本章主要讲解了控制语句的使用及其功能,控制语 句用于控制程序的流程,是C语言中非常重要的语句 ,用来实现程序的选择结构和循环结构。 语言主要有八种控制语句: 选择控制语句包括:ifelse语句和switchcase语句。 循环控制语句包括:for语句,while语句,dowhile语句 转移控制语句包括:break语句,continue语句,goto语句 3.8小结 选择控制语句包括:ifelse语句和switchcase语 句。 ifelse语句是选择控制语句,它判定所给的条件是否满 足,根据判定的结果选择两种分支之一执行。 if后面是一种分支,else后面是另外一种分支。如果条件 满足,选择if后面的分支执行,如果条件不满
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版基础设施建设项目融资担保借款合同
- 二零二五年度二手房买卖合同含物业费结算及调整
- 2025版绿色生态停车场建筑施工装修合同
- 二零二五年度商铺租赁合同范本下载
- 2025版智能农业机耕与植保服务合同
- 二零二五年度粮食储备居间服务合同
- 二零二五年度煤气管道维护及安全保障合同
- 二零二五年度重型卡车全方位维修及改装合同
- 2025至2030年中国百洁布行业市场发展现状及投资战略咨询报告
- 二零二五年度办公空间租赁及增值服务合同
- 2025年全国焊工证理论考试题库及答案
- 乡村基地代运营合同范本
- 医学科研诚信和相关行为规范
- 2025年烟叶生产考试题库
- 学堂在线 自我认知与情绪管理 章节测试答案
- 房颤导管消融护理
- 多元化经营战略下小米公司盈利能力的分析
- 网络直播行业自律发展现状与内容监管趋势2025年研究
- 安徽省2025年公需科目培训测验答案(科目一)
- 2025年汽车驾驶员技师资格证书考试及考试题库含答案
- 档案高级职称考试题库及答案
评论
0/150
提交评论