




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 程序的控制结构3.1 程序的基本结构3.2 简单语句与复合语句3.3 选择结构3.4 循环结构3.5 编译预处理3.13.1程序的基本结构程序的基本结构程序的基本结构有三种:顺序结构、分支结构、循环结构 前面的例子都是顺序结构,大量的实际问题需要通过各种控制流程来解决。分支和循环结构的控制语句有:条件语句:if语句开关语句:switch语句循环语句:for语句 、while语句、do while语句转移语句:break、continue、goto语句33.1程序的基本结构图图3.4 while型循环结构型循环结构入口入口假假出口出口SA图图3.5 do-while型循环结构型循环结构入
2、口入口假假出口出口AS真真53.2 简单语句和复合语句简单语句:均是以“;”结尾的语句 。z=x+y;c=getchar();复合语句:复合语句是用花招号“ ”把“说明”和若干个有序的简单语句组合在一起而构成的语句集合。其一般形式是:63.2 简单语句和复合语句复合语句实例:int i,j,k;i=i+1;j=j*2;空语句:空语句的含义是什么动作都不执行,语句本身仅有一个分号。 while (putchar(getchar()!=n);空语句空语句问题提出:计算分段函数: y=3-x x02/x x0解题的步骤:输入xx0是 y=3-xy=2/x否 输出y的值 C语言提供的选择结构有两种:
3、if语句、switch语句。 3.3 选择结构选择结构3.3.1 if 3.3.1 if 语句语句ifif语句:对所给条件进行判定,根据判定结果决定是语句:对所给条件进行判定,根据判定结果决定是 否执行程序段。否执行程序段。 语句形式:语句形式: if (表达式) 语句; 语句执行流程:语句执行流程: 表达式语句真(非0)假(0)例例3-1:读程序,理解数值作为读程序,理解数值作为if 表达式表达式 #include void main() int i=10,m=3; if(i!=0) printf(“i is not 0n”); if(m) printf(“m is not 0n”);程序运
4、行结果:i is not 0m is not 0例例3-2:读程序,理解读程序,理解”=”与与”=”的作用及区别的作用及区别#include void main() int m=10; if(m=100) printf(“m=%d”,m); if(m=100) printf(“m is assigned %dn”,m);程序运行结果: m is assigned 100if (表达式) 语句1; else 语句2;表达式语句1真(非0)假(0)语句23.3.2 if-else 3.3.2 if-else 语句语句if-else 语句适合于解决双分支选择问题语句形式:语句形式:语句执行流程:语句
5、执行流程:例例3-3:输入一个整数,判断该整数的奇偶性输入一个整数,判断该整数的奇偶性#include void main() int m; printf(“input m:”); scanf(“%d”,&m); if(m%2=0) printf(“%d 是偶数n”,m); else printf(“%d 是奇数n”,m);输入mm%2=0偶数结束真假奇数例例3-4:读程序,理解浮点数的运算与比较读程序,理解浮点数的运算与比较#include void main() float f; f=1.0; f=f/13.0; f=f*13.0; if( f=1.0) printf( “f is
6、 still 1.0n”); else printf( “f isnt still 1.0n”);程序运行结果:f isnt 1.0注意:注意:有的有的if-else语句可以用语句可以用条件运算符(?条件运算符(? :):)来实现来实现if(ab) max=a;else max=b;max=(ab)?a:b;例例3-5:输入一个英文字符,若为大写则改为小写,输输入一个英文字符,若为大写则改为小写,输出得到的字符。出得到的字符。#include void main() char zm; scanf(“%c”,&zm); zm=(zm=A& zm=Z)?(zm+32):zm) ;
7、printf(“%c”,zm);程序运行结果:程序运行结果:B Bb bif (表达式1) 语句1;else if (表达式2)语句2; else if (表达式n)语句n; else 语句n+1;3.3.3 3.3.3 嵌套的嵌套的if-else if-else 语句语句语句形式:语句形式:表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)语句执行流程:语句执行流程:例例3-6:将将0100分的百分制换算成分的百分制换算成AE的五级学分制。的五级学分制。#include void main() int s; scanf(“%d”,&s);
8、 if(s=90) printf(“score is An”); else if(s=80) printf(“score is Bn”); 程序运行结果:84Belse if(s=70) printf(“score is Cn”); else if(s=60) printf(“score is Dn”);else printf(“score is en”);例例3.7:计算分段函数计算分段函数:假输入xX0真X=0y=1y=0y=-1假真 y=-1 (x0)#include void main() int x,y; scanf( %f ,&x); if (x0) y=-1; else
9、if (x=0) y=0; else y=1; printf(x=%d,y=%dn,x,y); 语句形式:语句形式: switch (表达式) case 常量1: 语句 1; case 常量2: 语句2; case 常量3: 语句3; . case 常量n: 语句n; default : 语句n+1; 。整型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号3.3.4 switch 3.3.4 switch 语句语句语句执行流程:语句执行流程:指语句的最指语句的最后一条是否后一条是否为为breakbreak简单语句或简单语句或复合语
10、句复合语句breakbreakbreakbreak有有无breakbreak有无有计算表达式计算表达式常量常量1 1常量常量2 2常量常量n n=语句语句1 1=语句语句2 2语句语句n n其它其它=语句语句n+1n+1无值值casecase语句出语句出现的次序并现的次序并不影响执行不影响执行结果。结果。例例3-8: 按照考试成绩等级打印出百分制分数段。按照考试成绩等级打印出百分制分数段。程序运行结果:B8089#include void main() char grade; scanf( %c ,&grade); switch(grade) case A printf(”90100n
11、”);break; case B printf (”8089n”); break; case C printf (”7079n”); break; case D printf (”6069n”); break; case E printf (”059n”); break; default printf (“errorn”); switch 的嵌套的嵌套:switch语句允许嵌套,即语句允许嵌套,即switch本本身可以作为另一个层身可以作为另一个层switch语句的一部分语句的一部分switch( i ) case 0: switch ( j ) case 0:printf( “i= =j”)
12、;break; case 1:printf(“ij”); break;case 1:.switch几个注意点几个注意点1、if语句能测试关系和逻辑表达式,而switch只能测试相等。2、switch语句的每个case后面的常数必须是整型或字符型,在使用字符常量时,自动转换成整数。3、switch语句中每个case常数必须不同。已知:int a,b;下列switch语句中,( )是正确的。(A)switch(a) (B)switch(a+b) case a: a+;break; case 1: a+; case b: b+;break; case 2: b+; (C)switch(a*b) (D
13、)switch(a/10+b) case 1,2: a+b; case a+b: +a;break; case 3,4: a-b; case a-b: -b; B# include void main() int a=2,b=-1,c=2; if(ab) if(by); (B) if(x=y) x+=y; (C) if(x!=y) x=x*x else x+=1; (D) if(xy) x+;y+;C 在C语言中有三种循环结构:while,do-while和for循环,利用 有关的运算符构造表达式,以控制循环的执行。3.4 循环结构循环结构 循环: 就是在给定的条件成立时反复执行某一程序段,被
14、反复执行的程序段称为循环体。1、while 语句的形式: while (表达式) 循环体; 3.4.1 while3.4.1 while语句语句2 、 while 语句 常称为“当型”循环语句。真(非零)循环体假(零)表达式3、说明:先判断表达式,后执行语句。表达式同if语句后的表达式一样,可以是任何类型的表达式。 循环体多于一句时,用一对 括起。while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。 例:分析下列程序段的循环次数例:分析下列程序段的循环次数i=1; while (i=100) putchar(*); i+; i=1; while (i=100) pu
15、tchar(*); i+; 例例3- 9:用用while编程实现编程实现1100的和。的和。#include void main() int i,sum; i=1; sum=0 ; while (i=100) sum=sum+i; i+; printf(%dn,sum); 程序运行结果: 5050例例3-10:用用while语句语句 计算计算n!。#include void main() int n,m,temp; scanf(“%d”,&n); m=1; temp=n; while (n=1) m=m*n; n-; printf(“%d!=%dn”,temp,m); 程序运行结果:
16、55!=120注意表达式在判断前,必须要有明确的值。 循环体中一般有改变条件表达式的语句。 while (表达式)后面没有分号。 3.4.2 3.4.2 do-do-while-while语句语句1、 do-while的形式: do 循环体; while (表达式);2、 do-while语句 常称为“直到型”循环语句。真(非零)表达式 循环体假(零)例例3-10:用用do-while编程实现编程实现1100的和。的和。#include void main() int i, sum=0 ; i=1; do sum=sum+i; i+; while (i=100); printf(%dn,sum
17、); 程序运行结果: 5050例例3-11:用用while语句语句 计算计算5!。#include void main() int t=1,i=2; do t=t*i; i+; while (i=5); printf(“5!=%dn”,t); 程序运行结果: 55!=1203、说明:do-while语句先执行语句,后判断表达式。第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。void main() int i,sum=0; scanf(%d,&i); do sum += i;i+; while(i=10); printf(%d,sum);void mai
18、n() int i,sum=0; scanf(%d,&i); while(i=10) sum += i;i+; printf(%d,sum);在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。do-while和while语句相互替换时,要注意修改循环控制条件 。3.4.3 for语句1 1、forfor的形式:的形式:for (for (初始表达式初始表达式1 1;条件表达式;条件表达式2 2;循环表达式;循环表达式3 3) 循环体循环体 ; ; 表达式1:用于循环开始前为循环变量设置初始值。表达式2:控制循环执行的条件,决定循环次数表达
19、式3:循环控制变量修改表达式。循环体语句: 被重复执行的语句。表达式3计算表达式1循环体判断表达式2零非零非零for的下一条语句2 2、执行过程、执行过程例例3- 13:用用for语句编程实现语句编程实现1100的和。的和。#include void main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i ;printf(“%dn”,sum); 程序运行结果: 5050例例3- 14:用用for语句编程计算语句编程计算19的乘法表。的乘法表。#include void main() int i,j; for(i=1,j=1;i10;i+,j+) prin
20、tf(%d*%d=%4dn,i,j,i*j); 注意:三个表达式都可以是逗号表达式。 三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。(1)表达式表达式1可以省略可以省略 for(;i100;i+) /分号不能省略分号不能省略 sum+=i; (2)表达式表达式2可以省略可以省略 for (i=1;i+) /等效于等效于for(i=1;1;i+) sum+=i; (3)表达式表达式3可以省略可以省略 for(i=1;i=100;) sum+=i+; (4)表达式表达式1和表达式和表达式3可以同时省略可以同时省略 for(;i100) break; sum+=i+;i
21、f(i100) break;(1)在进入累加前先给累加器赋初值(一般为0);(2)用循环语句实现累加;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体语句的设计。 累加器当前值=累加器原值+循环变量当前值 ;典型例题分析【例】 求累加和1+2+3+1000基本方法:属于“累加器”类型问题。 累加器赋初值思考:求偶数和2+4+6+100参考程序:void main() long int k,s; s=0; for(k=1;k=1000;k+) s=s+k; printf( s=%ld ,s); 累加(1)给累乘器赋初值,一般为1;(2)用循环语句实现累乘; for(循环变量赋初值
22、;循环条件;循环变量改变规律)(3)循环体设计。 累乘器当前值=累乘器原值*循环变量当前值; 例: 求累乘积。 如:123.100基本方法:属于“累乘器”类型问题。 累乘器赋初值思考:求n!=1 2 3 n参考程序:void main() double s=1; int k; for(k=1;k=100;k+) s=s*k; printf( s=%lf ,s);累乘 整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。 在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多
23、重循环。3.4.4 3.4.4 循环的嵌套循环的嵌套嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。while 、do-while、for三种循环都可以互相嵌套。下面几种都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); (4) while( ) (5) for(;) (6) do do while( ) for(;) while( ); while( ); 循环语句之间的关系循环语句之间的关系for(.).for(.).内循环外循环for(.).for(.). 并列循环嵌套循环真真
24、外循环初始条件内循环初始条件内循环体外循环条件假内循环条件假内循环循环条件外循环循环条件循环结束二重循环嵌套结构执行流程 例例3-15 编程输出如下形式的九九乘法表编程输出如下形式的九九乘法表1 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 92 4 6 810121416183 6 91215182124274 8121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281#include void main() int i,j; for
25、(i=1;i=9;i+) printf(%4d,i); /*打印表头,第一行打印表头,第一行*/ printf(n); for(i=1;i=36;i+) printf (%c,-); printf (n); for (i=1;i=9; i+) /*被乘数被乘数i从从1变到变到9*/ for (j=1;j=9;j+) /*乘数乘数j从从1变到变到9*/ printf (%4d,i*j); /*输出第输出第i行行j列的值列的值i*j*/ printf (n); /*换行,打印下一行换行,打印下一行*/ main() int i,j,k,m=0; for(i=1;i4;i+) for(j=1;j4;
26、j+) for(k=1;k4;k+) m+; printf(M=%d,m); (1) 以上程序输出M=( )。 (A) 3 (B) 6(C) 9(D) 27(2) 如果在以上程序中语句m+; 之前增加一条语句:if(!(i=j|i=k|j=k),则输出M=( )。 (A) 3 (B) 6 (C) 9 (D) 27 1.break1.break语句语句3.4.5 break3.4.5 break语句和语句和continuecontinue语句语句(1) 语句形式: break;(2)作用: 结束break所在的 switch语句。 结束当前循环,跳出break所在的循环结构。 例例3-16:计算
27、半径为计算半径为1,28的圆面积,但当面积大于的圆面积,但当面积大于100时结束计算。时结束计算。#include void main() int r; float area; for(r=1;r100) break; printf(“%n”,area); 程序运行结果: 3.14000012.56000028.26000050.24000278.500000例例3-17:break语句用法示例语句用法示例#include void main() int i; for(i=0;i=6;i+) printf(“%dn”,i); if(i=5) break; 程序运行结果: 012345思考:为什
28、么不输出6(1)语句形式: continue;(2)语句作用: 结束本次循环。2 2、continue continue 语句语句(3)语句执行流程: continue语句可以结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。 例例3-18:continue语句用法示例语句用法示例#include void main() int i; for(i=0;i=6;i+) if(i=5) continue; printf(“%dn”,i); 程序运行结果: 012346例例3-193-19:输出输出150150之间不能被之间不能被3 3整除的数。整除的
29、数。 #include void main()int n; for(n=1;n=50;n+) if(n%3=0) continue; printf(“%d”,n); while(条件) 语句A; break; 语句 B; 真语句B条件语句Abreak假结束循环3、break语句与continue语句的区别至此位置while(条件) 语句A; continue; 语句 B; 真语句B条件语句Acontinue假结束循环至此位置#include stdio.hvoid main()int a, b; for(a=1,b=1; a=10) break; if(b%3=1) b+=3; continu
30、e; printf(%dn,a);【例例】 分析以下程序的运行结果。分析以下程序的运行结果。 44、goto语句的使用 语法结构: goto 标识符; 作用:无条件转向,常用于跳出某种嵌套较深的结构,比如一次跳出二层甚至更多层嵌套循环,而break语句只能跳出最里一层循环。 注意:goto语句是一种可以让程序员任意控制流程的有效工具,使得程序很灵活,但对结构化的程序设计而言,goto语句的使用会使得 程序无规律,可读性差,所以我们主张但是不是绝对禁止地 限制使用goto语句。标识符是指标识符是指goto语句的转语句的转移目标,它必须是局限于移目标,它必须是局限于当前函数的标号,命名格当前函数的
31、标号,命名格式与变量名相同。式与变量名相同。#include stdio.hvoid main()int i,j;for(i=2;i=500;i+) for(j=2;j=i/2;j+) if(i%j=0) goto ll; printf(“%4d”,i); ll:;【例例】 用逐个判别法输出用逐个判别法输出25002500以内的所有素数。以内的所有素数。 3.5 编译预处理编译预处理作用:对源程序编译之前做一些处理,生成扩展C源程序种类 宏替换 #define 文件包含 #include 条件编译 #if-#else-#endif等格式: “#”开头 占单独书写行 语句尾不加分号不带参数宏定义
32、 一般形式: #define 宏名 宏体 功能:用指定标识符(宏名)代替字符序列(宏体) 宏展开:预编译时,用宏体替换宏名-不作语法检查#include #define PI 3.1415926 void main() float l,s,r,v; printf(input radius:); scanf(%f,&r); l=2.0*PI*r; s=PI*r*r; v=4.0/3*PI*r*r*r;printf(l=%10.4fns=%10.4fnv=%10.4fn,l,s,v);程序运行结果: l= 25.1327s= 50.2655v= 150.7964带参数宏定义 一般形式: #
33、define 宏名(参数表) 宏体例 #define S (r) PI*r*r相当于定义了不带参宏S,代表字符串“(r) PI*r*r” 宏展开:形参用实参换,其它字符保留 宏体及各形参外一般应加括号()例 #define S(a,b) a*b . area = S(3,2);宏展开: area = 3*2;不能加空格例如:下面程序运行的结果是( )。#define f(x) 1+x+x*x#includevoid main() int a=2,b=3; printf(%dn,f(a+b); (A)17 (B)31 (C)13 (D)7#include #define PI 3.1415926
34、#define S(r) PI*r*rvoid main() float a,Area; scanf(“a=%f”,&a); Area=S(a); printf(Area=%fn, Area);运行情况如下:a=3.6Area=40.715038例例3-213-21 用带参数宏实现圆面积的计算用带参数宏实现圆面积的计算赋值语句“area=S(a); ” 经宏展开后为:area=3.1415926*; 例如:下面程序运行的结果是( )。#define f(x) 1+x+x*x#includevoid main() int a=2,b=3; printf(%dn,f(a+b); (A)17 (B)31 (C)13 (D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024初级社会工作者职业资格笔试高频题库新版
- 2024北京一零一中高一(下)期中物理(非选考)试题及答案
- 家庭装修单项工程承包合同填写3篇
- 对校规的无视与反思3篇
- 制定合同项目建议书方案3篇
- 五一节保证书的特点及其作用3篇
- 对卫生检查不达标的原因3篇
- 工程专业年度分包协议书2篇
- 安全驾驶承诺自律从我做起
- 工程索赔中的关键问题解读
- 2025年北京市西城区九年级初三一模英语试卷(含答案)
- 2025年的房屋租赁合同书模板
- 广东省深圳市2025年高三年级第二次调研考试数学试题(含答案)
- 中国铁路发展史课件
- 银行车贷合同范本
- DB32T 5083-2025江苏省公共体育设施基本标准
- 小学数学新人教版一年级下册欢乐购物街第2课时《买卖我做主》教案(2025春)
- 异常子宫出血的护理查房
- 外墙涂料作业安全技术交底表(样表)
- 国家开放大学《人文英语3》章节测试参考答案
- 绘本Pete the cat Too cool for school 课件
评论
0/150
提交评论