版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 语句和控制流 一个完整的C程序代码可以存放在一个或多个C源文件中。每一个C源文件可以包含若干预处理命令和C函数, 一个C函数只能包含在一个C源文件中。整个C程序只有 一个主函数(名为main)。而C函数又由数据说明和执行语句构成。 语句是指示计算机完成某项任务的完整命令。程序或函数的功能是由一系列语句实现的。 C语言属于第三代语言,是过程性语言。 从理论上讲,结构化程序设计只要有顺序、选择和循环三种基本结构就可以了。表4-1列出了C语言中各种语句及其示例。它分为4类,即:简单语句、选择语句、循环语句和转移语句。4.1 表达式语句4.2 空 语 句4.3 返 回 语 句4.4 复 合 语
2、 句4.5 if 语 句4.6 switch语句4.7 while语句4.8 for 语 句4.9 dowhile语句4.10 break语句4.11 continue语句4.12 goto语句4.13 循 环 嵌 套4.1 表达式语句由表达式构成的语句称作表达式语句。其一般形式为: 表达式;例如:a5;xab*10;i;printf( Input your data ! n);最常用的表达式语句是赋值语句和函数调用语句。分号是一个语句中不可缺少的组成部分。4.2 空 语 句C语言中的空语句就是只有一个分号的语句: ;空语句不执行任何动作。 但从语法上看,它起一个语句的作用。while(get
3、char()! n );4.3 返 回 语 句C语言中返回语句有两种形式,即:return;return 表达式; 第二种形式的返回语句在程序中经常遇到,它不仅把控制权返回给主调函数,而且还把表达式的值返回。为了表达清晰,易于理解,往往把返回语句中的表达式用圆括号括起来,形式为:return(表达式);return (n1);4.4 复 合 语 句在C语言中,复合语句又称为分程序(block),它是由一对花括号括起来的若干语句组成的。例如: count; i; xtemp10; totaltotalx; printf( Totald n ,total);从语法上看,复合语句是作为一个语法整体出
4、现的。在编写程序时要注意,复合语句中最后一条语句后面的分号不能省略,否则会造成语法错。4.5 if 语 句4.5.1 if语句的形式第一种形式是:if(表达式) 语句if语句的第二种形式是: if(表达式) 语句1 else 语句2例4-3:判定输入的整数是否是13的倍数。/* Whether a number is multiple of 13 or not */#include void main() int number,rm; printf(Input your number. n); scanf(d,&number ); rmnumber13; if ( rm0 ) printf(I
5、ts true. n); else printf(Its false.n);4.5.2 if语句的嵌套形式在if语句中又包含一个或多个if 语句的情况,称作if语句的嵌套。1“语句1”是if-else结构 if ( 表达式1) if ( 表达式2) 语句1 else 语句2 else 语句3if ( score60 ) if ( score90 ) printf(Excellent!n); else printf(Fair.n);else printf(Failure!n);如果一般形式中的“语句1”是if语句的简化形式,就出现了如下式所示的情况: if(表达式1) if(表达式2) 语句1
6、else 语句2else与上面哪个if配成一对呢?在C语言中约定,else总是与前面最近的if配对。为了保证else是与第一个if配对,必须用花括号将第二个简化形式的if语句括起来。2“语句2”是if-else结构else-if嵌套结构的一般形式是:if(表达式) 语句1else if(表达式) 语句2else if(表达式3) 语句3.else 语句n在使用if语句的嵌套结构时,应注意: 合理地安排判定条件,既符合给定问题在逻辑功能上的要求,又要增加可读性。 注意else子句与if子句的配对约定,即:else与它前面最近的一个if配对。如果if子句中的语句又是嵌套的if语句的简化形式,应注意
7、加花括号。 如果是多重的else-if结构,为了便于书写,可采用上面的形式,即第一个if与下面各个else左对齐,上下都在同一列上,显得层次清晰,易于阅读和理解。例4-6:求一元二次方程ax2bxc0的根。 如果系数a和b同时为0,则原方程退化,不再是方程了; 如果a是0,而b不是0,则原方程退化成一次方程,只有一个根,其值是c/b; 如果a不是0,而c是0,则原方程有两个根,其值分别是b/a和0; 如果a和c都不为0,则可利用求根公式计算:#include #include void main() double a,b,c; /*方程的系数*/ double dsc; /* 判别式的值*/
8、double re,im; /* 实部和(可能的)虚部*/ printf(Input values of A,B,C n); scanf(lflflf,&a,&b,&c); if(a0.0)&(b0.0) printf(The equation is degenerate.n); else if(a0.0) printf(Single root:xfn,c/b); else if(c0.0) printf(Two roots:x1ftx2fn,0.0,b/a); else reb/(2.0*a); dscpow(b,2.0)4.0*a*c; imsqrt(fabs(dsc)/(2.0*a);
9、if(dsc0.0) printf(Two roots:x1=%ftx2=%fn,reim,reim); else printf(Two complex roots:n); printf(x1ffitx2ffin,re,im,re,im); 4.6 switch语句switch语句的简单语法结构形式如下:switch(表达式) 语句switch是关键字,紧跟其后的“表达式”的值必须是整型的一般来说,switch语句的语法结构如下:switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句n1例如:switch(o
10、pt) case :printf (dn,v1v2 ); break; case :printf (dn,v1v2 ); break;case * :printf (dn,v1*v2 ); break; case / :if( v2 !0) printf (dn,v1/v2 ); else printf ( Division by zero. n); break; case :if( v2 !0) printf (dn,v1v2 ); else printf (Modulus by zero. n); break; default:printf ( Unknown operator. n );
11、 break;对switch语句的特性和使用还要说明以下几点: 执行该语句时,先计算switch后的表达式,其结果必须是整型量。它依次与每一个case之后的常量表达式比较,如果出现匹配,就转去执行相应的语句。 case后面必须是整数或一个字符常量(也是整型量),或者是可以得到整型量的一个常量表达式。不允许这种常量表达式中包含有变量或函数调用。 在一个switch语句中不允许出现两个或更多的情况常量具有同样的值。 如果有关键字default,那么,在给定表达式的值与所有case之后的情况常量都不匹配的情况下,就转去执行default 之后的语句。但应强调两点:第一,default不一定出现在sw
12、itch 结构的最后,其实,它可以出现在中间,甚至出现在所有case之前。第二,如果没有default这一部分,也没有出现与情况常量相匹配的情况,那么,这个switch语句实际上就成了一个空语句,什么也不做。 case及后面的常量表达式,实际仅起标号作用。表达式的值与某个情况常量一旦匹配,那么,在执行下面语句的过程中,只要不遇到break语句,就一直执行下去,而不再判别与别的情况常量是否匹配。下面是一个例子,用于说明switch语句的功能和特性。#include void main() int reply; while(1) printf( Enter a value between 1 an
13、d 10,0 to exit:); scanf(d,&reply); switch(reply) case 0: exit(0); case 1: case 2: case 3: case 4: case 5: printf( You entered 5 or below . n); break; case 6: case 7: case 8: case 9: case 10: printf( You entered 6 or higher . n); break; default: printf( Between 1 and 10,please ! n); break; /* end of
14、switch */ /* end of while */4.7 while语句C语言提供了三种循环语句,即:while、for和do- while。while语句的语法形式如下: while(表达式)语句例4-8:利用参考级数 可以求出的近似值。很显然,如果要求的精度越高,则计算的项数越多。我们可以指定一个精度要求,如10-7。当最后一项的绝对值小于该精度时,就认为达到要求了。/* Evaluating the PI with while */#include #include void main() int sign; double pi,n,temp; n1.0; temp1; sign1
15、; pi0; while(fabs(temp)1e7) pi temp; n 2; signsign; tempsign/n; pi *4; printf(PIfn,pi);在使用while语句时要注意: 循环条件设置要合理构成while无限循环的最简单形式是: while(1) 如果循环体的动作是由多个语句完成的,那么,要用花括号把它们括起来,以复合语句的形式出现。4.8 for 语 句for语句的一般语法形式是: for(表达式1;表达式2;表达式3) 语句for语句等价于下列形式的while结构:表达式1;while(表达式2) 语句 表达式3;例4-10:求一个等差数列前n项的和。等差
16、数列的一般形式是: a1,a2,an其中,ai1aid (i1,2 ,n1)d称为公差。求前n项和的基本办法是逐项相加,即:sa1a2an 因为从第二项开始,每一项恰是前一项加上d。这样,知道第一项和d的值以及所求项数n,就可求出前n项的和。/* Calculating sum of n terms,with for */#include void main() int a,d,n,i; int ai,sum0; printf(Type in:a?td?tn?n); scanf(ddd,&a,&d,&n); aia; for(i1;in;i) sum ai; ai d; printf(Sumd
17、n,sum);在使用for语句时,应注意以下几点: 与while循环一样,for循环的条件测试总是在进入循环体之前进行的。 for语句不仅可以用于循环次数能直接确定的情况,也可用于无法直接确定循环次数、但在满足一定条件时就可终止循环的情况。例4-12:用for语句改写例4-8。/* Evaluating the PI with for */#include #include void main() int sign; double pi,n,temp; n1.0; temp1; sign1; pi0; for(temp1;fabs(temp)1e7;tempsign/n) pi temp; n
18、 2; signsign; pi *4; printf(PIfn,pi); 除了上述一般形式的for循环外,在使用中往往会遇到以下几种略有变化的形式。 循环变量可以多于1个。 for(i0,jN;i;,j ) csi; sisj; sjc; 循环终止条件可由一个较复杂表达式的值来确定。for(i0;si!c & si! 0;i); 在for语句中,初值、终值及步长可以省略其中一个、两个或者全部,但是其中的分号(;)不能省略。a如果省略for语句一般形式中的“表达式1”,那么,循环变量的初值应在for语句之前给定。例如: i5; for(;i100;i ) sum 1.0/i;b如果省略for语
19、句一般形式中的“表达式2”,则执行该for语句时,不判别循环的终止条件。这样,也就认为循环条件始终为真,循环将永远执行下去,从而构成无限循环。c如果省略for语句一般形式中的“表达式3”,则循环变量的增量应在循环体内实现。d如果省略for语句一般形式中的三个语句,则成为以下形式: for(;) 语句这就相当于下面的while语句: while(1) 语句此时,循环条件永远为真,从而无休止地执行循环体。为了终止循环,就要在循环体中加入break语句或者goto语句等。例4-14:数列。1,1,2,3,5,8,13,21,是著名的菲波那奇(Fibonacci)数列,其通项递推公式为: 其中表示项数
20、(3),即从第三项起,每一项都是它前面两项之和。#include void main() long a,b; int i,c,n; for(;) printf(n?*0 for exit.n); scanf(d,&n); if(n0) break; cn; if(c20) c; a1;b1; for(i1;ic/2;i) a b; b a; printf(NO. d ist,n); if(n20) printf(ldn,b); else printf(ldn,a); 循环语句是可以嵌套的。就是说,在循环体内还可以有循环语句。4.9 dowhile语句do-while语句是C语言中另一种结构形式
21、的循环语句。其语法形式是: do 语句while(表达式);例4-16:把输入的整数按反方向输出。例如,输入的数是12345,要求输出结果是54321。/* reversing the digits of a number */#include void main() int number,digit; printf(Enter an integer.n); scanf(d,&number); do digitnumber10; printf(d,digit); number /10; while(number ! 0); printf(n);在使用do-while语句时应注意: do-whi
22、le语句是先执行循环体“语句”,后判别循环终止条件。 在书写格式上,循环体部分要用花括号括起来,即使只有一条语句也如此。do-while语句最后以分号结束。 通常情况下,do-while语句是从后面控制表达式那里退出循环。但它也可以构成无限循环,此时要利用break语句或 return语句直接从循环体内跳出循环。4.10 break语句它的语法形式很简单,仅由关键字break和后随的分号组成,即: break;它的功能是:从switch语句或者包含它的最内层循环语句中跳出。因此,它的用途有两个方面: 在switch语句中,终止某个情况常量后面动作的执行,从而退出该switch语句。 迫使一个循
23、环语句(包括for、while、do-while语句)立即终止,程序从该循环语句后面的第一条语句开始继续向下执行。这样,通过使用break语句,就不必等到循环条件起作用,就使循环提前结束了。例4-18:把316这个数表示为两个数的和,其中一个数是13的倍数,另一个数是11的倍数。#include void main() int i; for(i1;i) if(!(316i*13)11) break; printf(dd316n,i*13,316i*13);如果在break语句用于嵌套的循环语句中,它只能从包含它的最内层循环中跳出,并且只能跳出一重循环。如图4-9所示。4.11 continue
24、语句continue语句的形式也十分简单: continue;它使控制转移到包含它的最内层的while、do-while或for循环的末尾,然后重新开始下一轮循环。例4-20:印出1100之间不能被3整除的数,10个数为一行。#include void main( ) int i0; int j0; while(i100) if( i 30 ) continue; printf(d ,i ); j; if( j 100 ) printf(n); printf(n);在使用continue语句时要注意它与break语句的区别:一般说来,只要它的功能可以用单个if测试所代替、又不增加嵌套深度,就尽量用if而不用continue。4.12 goto语句goto语句(包括break、continue等语句)不是理论上程序控制结构所必需的。但是在某些场
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术经济学课件-不确定性分析
- 妊娠合并甲状腺功能减退的临床护理
- 类丹毒的临床护理
- 《机械设计基础》课件-第10章
- 银屑病的临床护理
- 《证券经纪人培训》课件
- JJF(陕) 010-2019 标准厚度块校准规范
- 《计算器定时器》课件
- 制定图文并茂的工作计划
- 秋季素质测评与综合评价体系计划
- 消防联动调试记录表通用
- EN10204-2004中文版
- (重要)高中数学数列十种求通项和七种求和方法,练习及答案
- 教师师德考核记录表
- 江苏省对口单招计算机原理教案课件
- 300MW机组热力系统计算与经济性分析
- 苏教版三年级数学上册教材分析各单元目标解读
- 人大代表议案范文5篇优秀版
- 健康生活-健康养生七字决
- 女性主义视角下《地下铁道》中科拉命运的解读[精选]
- 低压变频器技术协议书
评论
0/150
提交评论