资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章,C,语句及控制结构,4.1,C,语句概述,C,语句可分为四类:,1.空语句:,;,作用:循环体和转向点,2.表达式语句,表达式;,功能:表达式求值,如:1+3;,a+b-c;,常用的表达式语句:,a=3;,b+;,I=1,j=2,k=3;,a+=2;,t=a,a=b,b=t;,I=3*5+6;,函数调用语句也属于表达式语句的一个特例,如:,printf,(“%dn”,5);,ch,=,getchar,();,putchar,(,ch,);,4.1,C,语句概述,3.块,(,复合语句),语句组,例:,t=a;,a=b;,b=t;,4.,控制语句:条件、循环,4.1,C,语句概述,4.2 关系运算符和关系表达式,一、关系运算符(6种),(小于),(大于),=(大于或等于),=(等于),!=(不等于),二、关系表达式,关系表达式的值是一个逻辑值,即“真”或“假”。如:“5=3”的值为“假”,“63”的值为“真”.,三、说明,前4种关系运算符(,=)的优先级相同,后两种也相同。且前4种的优先级高于后两种。,语言没有逻辑型数据,以整数1代表“真”,以0代表“假”。如,:,a=(53),结果将,a,置为1,4.2 关系运算符和关系表达式,4.3,逻辑运算符和逻辑表达式,一、逻辑运算符(3种):,!逻辑非(一元运算符),&逻辑与(二元运算符),|逻辑或(二元运算符),逻辑运算符的操作数为逻辑型量,优先顺序如下:,!(非)&(与)|(或,),二、运算规则,!,a:,若,a,为“真,”,则!,a,的值为“假”,若,a,为“假”,则!,a,的值为“真”。,a&b:,若,a,和,b,皆为“真”,,则,a&b,的值为“真”,否则为“假”。,a|b:,若,a,和,b,皆为“假”,,则,a|b,的值为“假”,否则为“真”。,三、逻辑表达式,表达式的结果最终是由逻辑运算符运算的称为逻辑表达式.,如:,a=3,b=2,c=4,d=5,则:,(,ab)&(cb),值为,0,(,ab)|(c3&2|8=a&,ch,b)t=a;a=b;b=t;,如果写成,if(ab)t=a;a=b;b=t;,则完全不同。,表达式,语句,非0,0,二、块,if,if(,表达式),语句1,else,语句2,例:,if(ab),printf,(“%d”,a);,else,printf,(“%d”,b);,4.4 条 件 分 支,表达式,语句1,非0,0,语句2,三、,if-else-if,语句,if(,表达式1),语句 1,else if(,表达式2),语句 2,else if(,表达式,n),语句,n,else,语句,n+1,4.4 条 件 分 支,表达式1,语句1,非0,表达式2,表达式3,表达式,n,语句22,非0,语句3,非0,语句,n,非0,语句,n+1,0,例:将百分制成绩,s1,换为5分制成绩,s2。,if(s160),if(s160),s2=1;,s2=1;,else if(s170)else,s2=2;if(s170),else if(s180),等价,s2=2;,s2=3;else,else if(s190),if(s180),s2=4;,s2=3;,else else,s2=5;,if(s1b),if(bb),if(bc),c=a;,else,c=b;,4.4 条 件 分 支,计算,x-1 (x0),程序:,main(),int,x,y;,scanf,(“%d”,if(x0)y=x-1;,else if(x=0)y=0;,else y=x+1;,printf,(“x=%d,y=%d”,x,y);,4.4 条 件 分 支,五、条件运算符?:(也叫三元运算符.),1.语法:?:,2.功能:如果表达式1的值是非0的,则其结果是表达式2的值,否则为表达式3的值.,例1:,printf,(“max is%dn”,(ab)?a:b);,常常用条件表达式构成一个赋值语句 例:,ch,=(,ch,=a&,ch,=z)?,ch,-a+A:,ch,;,3.,注意:?:的优先级仅比赋值运算符和逗号运算符高,故在和其它运算符混合使用时应在其两边加上括号。,4.4 条 件 分 支,4.5,循,环,一、,while,循环,1.,while,语句的语法是:,while(,表达式),语句,2.,功能:条件满足时执行循环体,条件不满足时结束循环转去执行下一条语句.,0,表达式,语句,非0,语句,非0,表达式,例:,main(),int,i=0;,while(i4),printf,(“%dn”,i+);,printf,(“Were out of the loopn”);,运行结果:,4.5,循,环,0,1,2,3,Were out of the loop,3.注意,while,循环是“先判断,后执行”。如果刚进入循环时条件就不满足,则循环体一次也不执行。它相当于一条空语句。,如:,while(0),printf,(“%dn”,x);,循环条件一定要有不满足的时侯,否则将出现“死循环”。,如:,while(1),printf,(“%dn”,x);,循环体如果包含一个语句以上,应组成复合语句.,如:,while(ab)t=a;a=b;b=t;,4.5,循,环,4.,break,语句,作用:中断循环,例:,main(),int,i=0;,while(i1000),if(i=5),break;,else,printf,(“%dn”,i);,i+;,printf,(“the loop break outn”);,4.5,循,环,out,0,1,2,3,4,the loop break out,break,语句通常是和,if,语句一起使用的。,例:判别一 个整数,n(n2),是否为素数,.,4.5,循,环,isprime,(n),int,n;,int,i=1;,while(+in),if(n%i=0),printf,(“%d is not primen”,n);,break;,if(i=n)/*,是否被自己整除?*/,printf,(“%d is primen”,n);,4.5,循,环,isprime,(n),int,n;,int,i=1;,while(+in),if(n%i=0),printf,(“%d is not primen”,n);,i=n;,if(i=n)/*,是否被自己整除?*/,printf,(“%d is primen”,n);,4.5,循,环,isprime,(n),int,n;,int,i=2;,while(n%i)i+;,if(i=n),printf,(“%d is primen”,n);,else,printf,(“%d is not primen”,n);,4.5,循,环,5.,continue,语句,使用,continue,语句跳出本次循环体直接进入下一轮循环。,continue,通常要和,if,语句一起使用。,main(),int,i=0;,while(+i10),if(i=5)continue;,printf,(“%dn”,i);,4.5,循,环,1,2,3,4,6,7,8,9,二、,do-while,循环,1.,do-while,循环的语法:,do,语句,while(,表达式);,2.注意:,do-while,循环是“先执行,后判断”。不管循环条件是否满足,循环体至少执行一次。等价于:,s;,while(e),s;,循环体如果包含一个语句以上,应组成复合语句.,同,while,循环一样,,break,和,continue,在,do-while,语句中也起相同的作用.,4.5,循,环,表达式,语句,非0,0,表达式,语句,非0,三、,for,循环,用于,定长循环,(循环次数确定的循环)。还可以用于,变长循环,。且完全可以取代,while,循环。,for,语句的基本形式:,for(e1;e2;e3),语句,这里,e1,e2,e3,都是表达式,分别对应着循环控制中的三个基本组成部分.即:,循环控制变量的初始化。,循环条件测试。,循环控制变量的增量操作。,例:,for(i=1;i=10;i+),sum=sum+i;,4.5,循,环,我们可以将以上,for,循环用下面的,while,循环等价地表示:,e1;,while(e2),语句,e3;,例:,i=1;,while(i=10),sum=sum+i;,i+;,4.5,循,环,0,e2,语句,非0,求解表达式,e1,求解表达式,e3,例:求2至32767之间的所有素数。,main(),int,i,n;,for(n=2;n=32767;+n),for(i=2;n%i;+i);,if(i=n),printf,(“%dn”,n);,2,3,5,7,11,13,17,19,23,.,4.5,循,环,说明:,(1),for,语句中的表达式可以部分省略或全部省略,但分号不能省略.如果,e2,省略,则认为测试结果恒为“真”。故循环将永远执行下去。例,:,for(;);,for(;),putchar,(a);,但下面循环不会永远执行下去,for(i=1;i+)sum=sum+i;,(2)for,语句中,e1,e2,e3,可以是任何有效的,C,语言表达式,.,可以是逗号表达式.例:,for(i=1,sum=0;i5;i+,i+),sum+=i;,4.5,循,环,(3,),for,语句的循环体由多个语句组成,要形成复合语句.,(4)在,for,语句的循环体中使用,break,和,continue,语句。例:,main(),int,i;,for(i=1;i=100;+i),if(i=5)continue;,printf,(“%dn”,i);,if(i=10)break;,1,2,3,4,6,7,8,9,10,4.5,循,环,。,例:猴子第一天摘下若干个桃子,当天吃了一半,还不过瘾,又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天再想吃时,只剩下一个桃子了。求第一天共摘下多少个桃子。,设桃子总数为,N1,,则有:,n1=2(n2+1)main(),n2=2(n3+1),int,i=1,s=1;,n3=2(n4+1),for(;i=9;+i),s=2*(s+1);,n9=2(n10+1),printf,(“%dn”,s);,n10=1 ,4.5,循,环,main(),int,i,s;,for(i=1,s=1;i=9;+i,s+=s)+s;,printf,(The,peachs,number is%d n,s);,out:,The,peachs,number is 1534,4.5,循,环,4.6,goto,语句及语句标号,goto,语句为无条件转向语句,其语法为:,goto,语句标号;,语句标号是一个标识符。其命名规则和变量名相同。语句标号只在说明它的函数中是可见的,不能重名。,main(),int,i,s;,i=1;,s=0;,loop:,if(i=100),s+=i;,+i;,goto,loop;,printf,(“%dn”,s);,OUT:505,4.7,switch,语句,一、语法如下:,switch(,整型表达式),case,常量表达式1:,语句组1,case,常量表达式2:,语句组2,case,常量表达式,n:,语句组,n,default:,语句组,n+1,二 功能:,求解关键字,switch,后面的表达式得到一个整型值。,用该值和,case,后面的整常数值逐个进行匹配,,当和某个值匹配上后,则转去逐条执行该,case,以及所有后继,case,及,default,中的语句。,如果一个也没有匹配上,则转去执行,default,后面的语句.,main(),int,i=2;,switch(i),case 1:,printf,(“Im in case 1n”);,case 2:,printf
展开阅读全文