您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第四章 C语言控制语句
第四章控制语句(教材的第四、五章)1/364.1分支语句4.2循环语句4.3其它语句4.4本章要点小结2/36§4.1分支语句4.1.1if语句的三种形式4.1.2if语句的嵌套4.1.3switch(多分支)语句3/364.1.1if语句的三种形式形式一:if(表达式)语句序列;表达式成立吗?语句序列真(非0)假(0)执行过程:例如:if(xy)printf(%d\n,x);printf(%d\n,y);if(ab&&bc)x=a;if(4.5)x=a;if(ab){t=a;a=b;b=t;}问题:abc是否合法?eg401.c4/36形式二:if(表达式)语句序列1;else语句序列2;执行过程:例如:if(ab)x=a;elsex=b;if(x=0)printf(%.3f\n,x);elseprintf(%.3f\n,-x)真(非0)假(0)表达式成立吗?语句序列1语句序列25/36形式三:if(表达式1)语句序列1;elseif(表达式2)语句序列2;elseif(表达式3)语句序列3;……elseif(表达式n)语句序列n;else语句序列n+1;6/36语句序列1表达式1成立吗?表达式2成立吗?表达式3成立吗?表达式n成立吗?…语句序列2语句序列3语句序列n语句序列n+1真(非0)假(0)假(0)假(0)…真(非0)真(非0)真(非0)假(0)……if(x0)y=1;elseif(x==0)y=0;elsey=-1;7/36说明:1、表达式一般为关系表达式或逻辑表达式。但在C语言中它也可以是任意的数值表达式。if(3)n=1;if('a')printf(%d,'a');if(n=3-3)x=1;elsex=-1;4、每个语句序列可以是一个语句也可以是若干个语句,但要构成复合语句。3、else只能与if配对使用。仅else本身不能单独作为一个语句使用。if(ab){t=a;a=b;b=t;}if(a+bc&&b+ca&&c+ab){s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(area=%.2\n,area);}elseprintf(Itisnotatrilateral!\n);2、每个语句都要以“;”结束,分号是语句的一部分。8/364.1.2if语句的嵌套形式:if(表达式1)if(表达式2)语句序列2;else语句序列3;elseif(表达式4)语句序列4;else语句序列5;在if语句的原“语句序列”中又包含一个或多个if语句称为if语句的嵌套。当然,语句序列2、3、4、5还可以是if语句。例如:max=(a,b,c)if(a=b)if(a=c)max=a;elsemax=c;elseif(b=c)max=b;elsemax=c;9/36二义性:if(表达式1)if(表达式2)语句序列2;else语句序列3;if(表达式1)if(表达式2)语句序列2;else语句序列3;if(表达式1)if(表达式2)语句序列2;else语句序列3;应如何理解?有两种理解方式:C语言规定:else总是与它前面最近的且未曾配对的if配对。if(表达式1){if(表达式2)语句序列2;else语句序列3;}if(表达式1){if(表达式2)语句序列2;}else语句序列3;10/364.1.3switch(多分支)语句1、格式:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;…………case常量表达式n:语句n;break;default:语句n+1;break;}2、功能:先计算表达式的值,测试该值是否与某常量表达式的值相同。①、若有相同者,流程转向其后面的语句执行②、若无,再看有没有default部分:若有default,则执行其后面的语句;若无default,则switch语句什么也不做,流程转向其后继语句。3、例:读入1到7之间的某个数,输出一个星期中相应的某一天的单词。eg404.c11/364、说明:①、switch语句的执行部分是由若干个case语句和一个可缺省的default语句组成的复合语句,整个语句要用大括号括起来;②、switch后面括号内的表达式可以是整型也可以是字符型或枚举类型;③、每个case后的常量表达式只起语句标号的作用,所以当表达式的值与某一个case后的常量表达式的值相等时,就执行相应的语句,它后面若没有break语句,程序就自动地执行下一个case之后的语句,所以每个case之后通常都有一个break,使流程跳出switch语句;④、各个case的常量表达式的值必须互不相同;⑤、各个case和default的出现次序是任意的,出现次序不影响执行结果;一般常量表达式按升序(或降序)排列,并将default放在所有case语句之后;⑥、各个case后的语句可以是多个语句,且不用花括号括起来;⑦、switch语句允许几种情况执行相同的语句;case6:case7:printf(“Reset\n”);break;但不能写成:case6,7:printf(“Reset\n”);break;5、例:输入一个年号year和月号month,计算该月有几天,并输出结果。eg404.c12/36§4.2循环语句4.2.1while语句4.2.2do-while语句4.2.3for语句4.2.4循环嵌套4.2.5几种循环的比较13/364.2.1while语句1、格式:while(表达式)循环体;2、功能:首先计算表达式的值,若表达式成立(非0),执行一遍循环体,再判断表达式,若成立再执行循环体……当表达式不成立(其值为0)时退出循环,跳转到循环体之后的语句执行。eg406.c表达式成立吗?循环体真(非0)假(0)3、特点:先判断表达式,然后执行循环体。若表达式一开始就不成立,则循环体一次也不执行。4、注意:(1)、循环部分为多个语句时,必须用大括号构成复合语句;(2)、循环体中应有语句修改控制条件5、例:计算sum=1+2+3+…+10014/364.2.2do-while语句1、格式:do循环体;while(表达式);2、功能:先执行一遍循环体,再判断表达式,当表达式的值为非0(真)时,返回重新执行循环体;如此反复,直到表达式的值为0(假)时退出循环。eg407.c表达式成立吗?循环体真(非0)假(0)3、特点:先执行循环体,后判断循环条件(表达式)是否成立,即循环体至少执行一次。4、推荐书写格式:do{……}while(…);5、例:计算sum=1+2+3+…+10015/36对于同一个问题既可以用while语句处理,也可以用do-while语句处理。do-while语句结构可以转换成while结构。do-while语句流程图可以改写为:表达式成立吗?循环体真(非0)假(0)循环体语句可见,do-while结构是由一个语句加一个while结构构成的。一般情况下,用while语句和do-while语句处理同一问题时,若二者的循环体一样,则结果也一样。但是如果while后面的表达式一开始就为假(0)时,两种循环的结果是不同的。例:计算:(分别用while和do-while实现)10inn结论:当while后面的表达式的第一次的值为“真”时,两种循环的结果相同。否则,二者结果不相同(指二者具有相同的循环体的情况)。eg408.c、eg409.c16/364.2.3for语句1、格式:for(表达式1;表达式2;表达式3)循环体;其中:表达式1规定循环控制变量的初始值表达式2指出循环条件表达式表达式3修改循环变量的值2、功能:①先求解表达式1,给循环控制变量赋初值②求解表达式2,若为真(非0),执行循环体③求解表达式3,它改变了表达式2中的某个变量④返回②⑤直到条件为假(0),退出循环表达式2成立吗?求解表达式3真(非0)假(0)求解表达式1循环体语句for语句最易理解的形式:for(循环控制变量赋初值;循环条件;循环变量增值)循环体;3、例:计算sum=1+2+3+…+100eg410.c17/36for(i=1;i=100;i++)sum=sum+i;i=1;while(i=100){sum=sum+i;i++;}for语句的功能和执行过程与while相似。在上例中,若把给循环控制变量赋初值的工作放在语句之外,把循环变量的修改放在循环体内,则跟while循环相同,所以for语句的一般形式可以用while表示成:表达式1;while(表达式2){语句序列;表达式3;}18/36说明:①、for语句的三个表达式都可以缺省,但两个分号不能缺省;②、若在for语句之前已经对循环控制变量赋初值,则表达式1可以缺省;例:i=1;for(;i=100;i++)sum=sum+i;for(i=1;i=100;i++)sum=sum+i;③、通常不缺省表达式2;有时缺省表达式2,即不判断循环条件,循环将无终止的执行,即认为表达式2始终为真;在循环体内用if和break控制循环结束。if(条件)break;for(i=1;;i++)sum=sum+i;i=1;while(1){sum=sum+i;i++;}19/36④、表达式3也可以缺省,但应设法修改循环控制变量,保证程序正常结束。for(i=1;i=100;){sum=sum+i;i++;}⑤、可以省略表达式1和表达式3,即只给循环条件。如:for(;i=100;){sum=sum+i;i++;}while(i=100){sum=sum+i;i++;}此时,完全等同于while语句。⑥、3个表达式都可以省略,如:for(;;)循环体;while(1)循环体;将无终止的执行循环。从语法上讲是正确的,但一般没有实际意义。20/36for语句表达式的计算:①、for语句中的表达式1和表达式3可以由一个或多个赋值表达式组成,当为多个表达式时,各表达式之间要用逗号运算符(即组成逗号表达式)。for(sum=0,i=1;i=100;i++)sum=sum+i;for(i=0,j=100;i=j;i++,j--)k=i+j;printf(i=%d,j=%d,k=%d\n,i,j,k);i=?j=?k=?#includestdio.hmain(){inta,b,c;for(a=0,b=50;ab;a++,b--)printf(a=%d,b=%d\n,a,b);c=a+b;printf(a=%d,b=%d,c=%d\n,a,b,c);}a=?b=?c=?②、for语句中的表达式1和表达式3通常与循环变量有关,但也可以无关。eg411.c21/36②、for语句中的表达式1和表达式3通常与循环变量有关,但也可以无关。#includestdio.hmain(){inti,sum;i=1;for(sum=0;i=100;sum=sum+i)i++;printf(sum=%d\n,sum);}i=?sum=?③、for语句中的表达式2通常为关系表达式或逻辑表达式,但也可以是数值或字符表达式,判断时,只要其值非0,就执行循环体,为0则退出循环。for(i=0;(ch=getchar())!='\n';i+=ch);eg412.c、eg413.c22/364.2.4循环嵌套一个循环体内又包含另一个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。三种循环可以相互嵌套。while(){······while(){······}······}for(;;){······for(;;){······}······}do{······do{······}while();······}while();while(){······for(;;){······}······}for(;;){······do{······}while();······}while(){······do{······}whi
本文标题:第四章 C语言控制语句
链接地址:https://www.777doc.com/doc-3861744 .html