《《吉大康辉老师讲c语言》第四章:c语句及控制结构》由会员分享,可在线阅读,更多相关《《吉大康辉老师讲c语言》第四章:c语句及控制结构(40页珍藏版)》请在金锄头文库上搜索。
1、第四章 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 关系运算符和关系表达式,一、
2、 关系运算符(6种) (大于) =(大于或等于) =(等于) !=(不等于),二、关系表达式 关系表达式的值是一个逻辑值,即“真”或“假”。如:“5=3”的值为“假”,“63” 的值为“真”. 三、说明 前4种关系运算符(,=)的优先级相同,后两种也相同。且前4种的优先级高于后两种。 语言没有逻辑型数据,以整数1代表 “真”,以0代表“假”。如:a=(53) 结果将a置为1,4.2 关系运算符和关系表达式,4.3 逻辑运算符和逻辑表达式,一、逻辑运算符(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)|(cd) 值为 1,4.3 逻辑运算符和逻辑表达式,四. 四种运算符的优先级: ! 高 算术运算符 关系运算符 & | 赋值运算符 低 例: a = 53 & 2 | 84-!0 结果为 1,4.3
4、 逻辑运算符和逻辑表达式,五、说明 1.将一个量作为逻辑量来判断其真假值时,将非0作为“真” ,将0作为“假”。例如: 3|0 的值是1(真) 3&0 的值是0(假) !3 的值是0(假) !0 的值是1(真) 2.逻辑运算符的操作数,可以是任何类型的数据,系统最终以0和非0来判定它们的逻辑值是“真”还是“假”。如: c & d 的值是1 4 & !a| 2 的值是1,4.3 逻辑运算符和逻辑表达式,例: 判别某年year是否为闰年,可用如下逻辑表达式来进行判断: (year%4=0&year%100!=0)|year%400=0 非闰年的判断条件为: !(year%4=0&year%100!
5、=0)|year%400=0) (year%4!=0|year%100=0)&year%400!=0 (year%4|!(year%100)&year%400,4.3 逻辑运算符和逻辑表达式,4.4 条 件 分 支,语言提供了三种形式的条件分支语句。 一、简单if if (表达式) 语句 if(ch=ab=t;则完全不同。,二、块if if(表达式) 语句1 else 语句2 例: if(ab) printf(“%d”,a); else printf(“%d”,b);,4.4 条 件 分 支,非0,0,三、if-else-if语句 if(表达式1) 语句 1 else if(表达式2) 语句
6、2 else if(表达式n) 语句 n else 语句 n+1,4.4 条 件 分 支,例:将百分制成绩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(s190) s2=4; else s2=5;,4.4 条 件 分 支,在嵌套使用if语句时,应注意的一点是if和else的配对关系. 原则:else只和其前面最靠近
7、它的if配对. 例: if(ab) if(bc) c=a; else c=b; 尽管我们在书写程序时,让else和最外层的if对齐,但它实际上是和内层if配对的。,4.4 条 件 分 支,如果要让其和最外层if配对,必须用块来显式地标界如下: if(ab) if(bc) c=a; else c=b;,4.4 条 件 分 支,计算 x-1 (x0) 程序: main() int x,y; scanf(“%d”, ,4.4 条 件 分 支,五、条件运算符 ?: (也叫三元运算符.) 1.语法: ?: 2.功能:如果表达式1的值是非0的,则其结果是表达式2的值,否则为表达式3的值. 例1:print
8、f(“max is%dn”,(ab)?a:b); 常常用条件表达式构成一个赋值语句 例: ch=(ch=a 3.注意 :?:的优先级仅比赋值运算符和逗号运算符高,故在和其它运算符混合使用时应在其两边加上括号。,4.4 条 件 分 支,4.5 循 环,一、while循环 1. while语句的语法是: while(表达式) 语句 2. 功能:条件满足时执行循环体,条件不满足时结束循环转去执行下一条语句.,0,表达式,语句,非0,例: main( ) int i=0; while(i4) printf(“%dn”,i+); printf(“Were out of the loopn”); 运行结果
9、:,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
10、; 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 循 环,isprim
11、e(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语句跳出本次循环体直接进入下一轮循环。contin
12、ue通常要和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
13、循 环,表达式,语句,非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+; ,
14、4.5 循 环,例:求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 循 环,。,例:猴子第一天摘下若干个桃子,当天吃了一半,还不过瘾,又多吃了一个。第二天又将剩下的桃子吃掉