《C语言程序控制结构.ppt》由会员分享,可在线阅读,更多相关《C语言程序控制结构.ppt(100页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第第4章章 程序控制结构程序控制结构l 主要内容主要内容4.1 C4.1 C语言的执行语句语言的执行语句4.2 4.2 顺序结构顺序结构4.3 4.3 选择结构选择结构4.4 4.4 循环结构循环结构34.1C语言的执行语句语言的执行语句 C语言的语句分为声明语句和执行语句。第语言的语句分为声明语句和执行语句。第3章介绍的变量章介绍的变量定义语句是最常见的声明语句,定义语句是最常见的声明语句,声明语句在编译时处理声明语句在编译时处理,在程,在程序序运行时不产生相应的操作运行时不产生相应的操作。执行语句的作用是在程序运行时执行语句的作用是在程序运行时向计算机系统发出操作命令向计算机系统发出操作
2、命令,使计算机执行特定的操作,使计算机执行特定的操作.C语句:以语句:以“;”作结束符,编译后产生机器指令作结束符,编译后产生机器指令。C语句分类:语句分类:u表达式语句表达式语句u空语句空语句u控制语句控制语句u复合语句复合语句44.1.1表达式语句表达式语句表达式语句是在表达式的末尾加上分号构成的语句。表达式语句是在表达式的末尾加上分号构成的语句。nz=x+sin(y);na-=a*a;赋值语句赋值语句ni+;自增自增1语句语句nx=0,y=1;逗号表达式语句逗号表达式语句nx+y;无意义无意义nprintf(“This is a C program.n”);函数调用语句函数调用语句赋值语
3、句和函数调用语句赋值语句和函数调用语句是使用最多的表达式语句是使用最多的表达式语句如:如:printf(This is a C printf(This is a C statement.);statement.);func(a,5);func(a,5);y=max(a,b);y=max(a,b);54.1.2空语句空语句n仅由一个仅由一个“;”构成的语句构成的语句n只是在逻辑上起到一个语句的作用,在编译时不只是在逻辑上起到一个语句的作用,在编译时不产生任何指令,在执行时不产生任何操作。产生任何指令,在执行时不产生任何操作。n作用:作用:n构成标号语句,标示流程的转向点;构成标号语句,标示流程的
4、转向点;n构成循环语句中空循环体构成循环语句中空循环体。n例如:例如:while(getchar()!=n);n只要从键盘上输入的字符不是回车则重新输入。只要从键盘上输入的字符不是回车则重新输入。64.1.3复合语句复合语句用用 括起来的一组语括起来的一组语句。句。一般形式:一般形式:执行语句;执行语句;说明:说明:说明:说明:“”后不加分号后不加分号后不加分号后不加分号 其中最后一个语句后也要加分号其中最后一个语句后也要加分号其中最后一个语句后也要加分号其中最后一个语句后也要加分号 语法上和单一语句相同语法上和单一语句相同语法上和单一语句相同语法上和单一语句相同 复合语句可嵌套复合语句可嵌套
5、复合语句可嵌套复合语句可嵌套如:如:z=x+y;z=x+y;t=z/100;t=z/100;printf(%f,t)printf(%f,t);如:如:z=x+y;z=x+y;t=z/100;t=z/100;printf(%f,t)printf(%f,t);74.1.4控制语句控制语句n控制语句:完成一定的控制功能控制语句:完成一定的控制功能。辅助控制辅助控制if()else if()else switchswitchfor()for()while()while()dowhile()dowhile()continuecontinuebreakbreakgotogotoreturnreturn分支
6、分支循环循环如:如:if (xy)z=x;if (xy)z=x;else z=y;else z=y;84.2顺序结构顺序结构n流程图流程图流程图是表示算法的一种工具,用一些图框来流程图是表示算法的一种工具,用一些图框来表示各种操作。表示各种操作。一个流程图包括以下几部分一个流程图包括以下几部分:n表示相应操作的框;表示相应操作的框;n带箭头的流程线;带箭头的流程线;n框内外必要的文字说明。框内外必要的文字说明。如,顺序结构流程图:如,顺序结构流程图:A AB B9顺序结构顺序结构n常用的流程图符号:常用的流程图符号:起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流向线流
7、向线连接点连接点 N-SN-S流程图:完全去掉了流程线流程图:完全去掉了流程线流程图:完全去掉了流程线流程图:完全去掉了流程线,算法的每一步都用矩算法的每一步都用矩算法的每一步都用矩算法的每一步都用矩形框描述形框描述形框描述形框描述,把一个个矩形框按执行的次序连接起来就是一,把一个个矩形框按执行的次序连接起来就是一,把一个个矩形框按执行的次序连接起来就是一,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。个完整的算法描述。个完整的算法描述。个完整的算法描述。10顺序结构顺序结构n结构化程序的三种基本结构结构化程序的三种基本结构顺序结构顺序结构:按书写顺序执行的语句构成的程序段按书写顺
8、序执行的语句构成的程序段ABAB流程图N-S图 选择结构选择结构 循环结构循环结构11n例例4.1 输入任意两个整数,求它们的和及平均值。输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。要求平均值取两位小数输出。/例例例例4.14.1#include#include#include#includevoid main()void main()int num1,num2;int num1,num2;float float sum,aver;sum,aver;printf(Please input two integers:n);printf(Please input two int
9、egers:n);scanf(%d,%d,&num1,&num2scanf(%d,%d,&num1,&num2););sum=(float)num1+num2;sum=(float)num1+num2;/*求累计和求累计和求累计和求累计和*/aver=sum/2.0;aver=sum/2.0;/*求平均值求平均值求平均值求平均值*/printf(sum=%.0f,aver=%.2fn,sum,printf(sum=%.0f,aver=%.2fn,sum,aver);aver);运行情况:运行情况:运行情况:运行情况:3000030000,5005 5005 sum=35005,aver=175
10、02.50sum=35005,aver=17502.50开始开始输入两整数输入两整数计算计算sumsum计算计算averaver结束结束12n例例4.2 给定一个三位正整数,分别输出其个位数、十位数给定一个三位正整数,分别输出其个位数、十位数和百位数。和百位数。#include#include void main()void main()int m,m0,m1,m2;int m,m0,m1,m2;printf(“Input a number(100999):”);printf(“Input a number(100999):”);scanf(%d,&m);scanf(%d,&m);m0=m%1
11、0;m0=m%10;m1=(m/10)%10;m1=(m/10)%10;m2=m/100;m2=m/100;printf(%d,%d,%dn,m0,m1,m2);printf(%d,%d,%dn,m0,m1,m2);运行结果:运行结果:运行结果:运行结果:Input a number(100999)Input a number(100999):263 263 输出:输出:输出:输出:3,6,2 3,6,213n例例4.3 取一个取一个16位的二进制数位的二进制数a的的7、6、5、4四个位,四个位,如图如图4-2中加阴影的部分。中加阴影的部分。void main()unsigned a,b,c,
12、d;scanf(%x,&a);/*以十六进制形式输入整数以十六进制形式输入整数a*/b=a4;c=(04);d=b&c;printf(%xn%xn,a,d);/*以十六进制输出以十六进制输出a和结果和结果d*/14n例4.4 求ax2+bx+c=0方程的根。a,b,c由键盘输入,设 。一元二次方程式的根为 x1=x2=可以将上面的分式分为两项:p=,q=,则 x1=p+q,x2=p-q。顺序结构顺序结构15#include#include#include#include void main()void main()float a,b,c,disc,x1,x2,p,q;float a,b,c,d
13、isc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,&a,&b,&c);scanf(a=%f,b=%f,c=%f,&a,&b,&c);disc=b disc=b*b-4b-4*a a*c;c;p=-b/(2 p=-b/(2*a);a);q=sqrt(disc)/(2 q=sqrt(disc)/(2*a);a);x1=p+q;x2=p-q;x1=p+q;x2=p-q;printf(nx1=%5.2fnx2=%5.2fn,x1,x2);printf(nx1=%5.2fnx2=%5.2fn,x1,x2);运行情况:运行情况:运行情况:运行情况:输入:输入:输入:输入:a=1,b=3
14、,c=2 a=1,b=3,c=2 输出:输出:输出:输出:x1=-1.00 x1=-1.00 x2=-2.00 x2=-2.00164.3选择结构选择结构n选择结构选择结构是指在程序执行过程中,是指在程序执行过程中,根据指定条件根据指定条件的当前值的当前值在两条或多条路径中选择一条执行。在两条或多条路径中选择一条执行。nC语言的选择控制语句有两条语言的选择控制语句有两条:n条件选择语句:条件选择语句:if语句语句n开关分支语句:开关分支语句:switch语句语句174.3.1 if语句语句表达式语句1真(非0)假(0)1、if 格式(单分支语句)格式(单分支语句)if (判断表达式判断表达式)
15、语句语句1;语句语句 1可以是一条语句或复合语句。可以是一条语句或复合语句。注意:满足条件时注意:满足条件时想要执行多条语句一定要想要执行多条语句一定要用复合语句用复合语句 当判断表达式值不为零当判断表达式值不为零(即即”真真”),则执行语句则执行语句1,再执行其后继语句再执行其后继语句;否则否则,不执行语句不执行语句 1,执行其后继执行其后继语句。语句。18单分支语句单分支语句判断表达式应该是具有一定意义、有实用价值的表达式,因判断表达式应该是具有一定意义、有实用价值的表达式,因此,最常用此,最常用关系表达式和逻辑表达式关系表达式和逻辑表达式来表达,例如:来表达,例如:if(a=b)if(a
16、=0)等价于等价于if(!a)if(a!=0)等价于等价于if(a)if(a=5&a=10)例:输入一个整数例:输入一个整数,求绝对值求绝对值.main()int i;scanf(%d,&i);if (i 0)i=-i;printf(%d,i);例:执行下列程序段例:执行下列程序段后后 a 的值是的值是_。int a=3;if(2)a=5;19单分支语句单分支语句#include main()char c;printf(input a letter:);c=getchar();if(c=A&c=z)c=c+32;printf(%cn,c);例例4.5 从键盘输入一个字母,以小写字母形式输出该字
17、母从键盘输入一个字母,以小写字母形式输出该字母20单分支语句单分支语句例例4.6从键盘输入两个整数,按升序输出这两个数。从键盘输入两个整数,按升序输出这两个数。#include#includevoid main()void main()int a,b,t;int a,b,t;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);if(ab)if(ab)t=a;/t=a;/交换两数交换两数交换两数交换两数 a=b;a=b;b=t;b=t;printf(%d,%dn,a,b);printf(%d,%dn,a,b);T TF Fababt=at=aa=ba=bb=tb=t21例例:
18、输入三个数输入三个数a,b,c,a,b,c,要求按由小到大的顺序输出。要求按由小到大的顺序输出。If ab If ab 将将a a和和b b对换对换If ac If ac 将将a a和和c c对换对换If bc If bc 将将b b和和c c对换对换abacbca和b交换a和c交换c和b交换yyynn单分支语句单分支语句22单分支语句单分支语句#include#include void main()void main()float a,b,c,t;float a,b,c,t;scanf(%f%f%f,&a,&b,&c);scanf(%f%f%f,&a,&b,&c);if(ab)if(ab)t
19、=a;a=b;b=t;t=a;a=b;b=t;if(ac)if(ac)t=a;a=c;c=t;t=a;a=c;c=t;if(bc)if(bc)t=b;b=c;c=t;t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2fn,a,b,c);printf(%5.2f,%5.2f,%5.2fn,a,b,c);必不可少,否必不可少,否必不可少,否必不可少,否则,会出现逻辑则,会出现逻辑则,会出现逻辑则,会出现逻辑错误!错误!错误!错误!232 2、if(if(表达式表达式)语句语句1 1 else else 语句语句2 2 条件条件 语句句1 语句句2YN双分支双分支if-else语
20、句语句各有一个分号;但属于一个语句各有一个分号;但属于一个语句各有一个分号;但属于一个语句各有一个分号;但属于一个语句例:例:if(xy)if(xy)printf(“%d”,xprintf(“%d”,x););else else printf(“%d”,yprintf(“%d”,y););24双分支双分支if-else语句语句说明:在说明:在if和和else后面后面可以只含有一条语句可以只含有一条语句,也可以也可以含有用花括号含有用花括号 括起来的复合语句括起来的复合语句。如:。如:if(a+b)c&(b+c)a&(c+a)b)s=0.5*(a+b+c);area=sqrt(s*(s-a)*(
21、s-b)*(s-c);printf(area=%6.2f,area);else printf(it is not a trilateral.);25n例:例:输入两个数并判断两数是否相等输入两个数并判断两数是否相等。#include void main()int a,b;printf(Enter integer a:);scanf(%d,&a);printf(Enter integer b:);scanf(%d,&b);if(a=b)printf(a=bn);else printf(a!=bn);运行结果:运行结果:Enter integer a:12 Enter integer a:12 E
22、nter integer b:12Enter integer b:12 a=b a=b 运行结果:运行结果:Enter integer a:12 Enter integer a:12 Enter integer b:9Enter integer b:9 a!=b a!=b 双分支双分支if-else语句语句26分析以下程序的输出结果:分析以下程序的输出结果:(1)(1)#include#include void main()void main()int a,b;int a,b;scanf(%d,&a);scanf(%d,&a);b=1;b=1;if(a=5)if(a=5)b=a+3;b=a+3
23、;b=6;b=6;printf(%dn,b);printf(%dn,b);(2)(2)#include#include void main()void main()int a,b,t;int a,b,t;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);if(ab)if(ab)t=a;a=b;b=t;t=a;a=b;b=t;printf(a=%d,b=%dn,a,printf(a=%d,b=%dn,a,b);b);getch();getch();27(3)(3)#include#include void main()void main()int x,y;int x,y;s
24、canf(%d,&x);scanf(%d,&x);y=-1y=-1;if(x!=0)y=1;if(x!=0)y=1;if(x0)y=1;if(x0)y=1;else else y=0;y=0;(4)(4)程序输出结果程序输出结果程序输出结果程序输出结果#include#include void main()void main()int x,y;int x,y;scanf(%d,&x);scanf(%d,&x);y=0;y=0;if(x=0)if(x=0)if(x0)y=1;if(x0)y=1;else else y=-1;y=-1;printf(%dn,y);printf(%dn,y);283
25、.多分支语句多分支语句几种形式:几种形式:if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达式表达式2)2)语句语句语句语句1 1 elseelse 语句语句语句语句2 2 内嵌内嵌if if if(if(表达式表达式表达式表达式1)1)语句语句语句语句1 1elseelse if(if(表达式表达式表达式表达式2)2)语句语句语句语句3 3 else else 语句语句语句语句4 4内嵌内嵌if if if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达式表达式2)2)语句语句语句语句1 1 else else 语句语句语句语句2 2elseelse
26、 if(if(表达式表达式表达式表达式3)3)语句语句语句语句3 3 else else 语句语句语句语句4 4内嵌内嵌if if内嵌内嵌if if if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达式表达式2)2)语句语句语句语句1 1 else else 语句语句语句语句2 2内嵌内嵌if if293 3、ifif(表达式(表达式1 1)语句)语句1 1 else if(else if(表达式表达式2)2)语句语句2 2 else if(else if(表达式表达式3)3)语句语句3 3 else if(else if(表达式表达式m)m)语句语句m m else e
27、lse 语句语句n n多分支语句多分支语句30例:if(number500)cost=0.15;if(number500)cost=0.15;else if(number300)cost=0.10;else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number100)cost=0.075;else if(number50)cost=0.05;else if(number50)cost=0.05;else cost=0;else cost=0;多分支语句多分支语句31多分支语句多分支语句匹配规则:匹配规则:ElseE
28、lse总是与它上面的,最近的,统一复合语句中的,未配总是与它上面的,最近的,统一复合语句中的,未配对的对的ifif语句配对。语句配对。当当ifif和和elseelse数目不同时,可以加数目不同时,可以加花括号花括号来确定配对关系。来确定配对关系。例:例:if(a if(a=b)b)if(b if(b=c)c)printf(“a printf(“a=b b=c”);c”);else else printf(“a!=b”);printf(“a!=b”);修改:修改:if(a if(a=b)b)if(b if(b=c)c)printf(“a printf(“a=b b=c”);c”);else el
29、se printf(“a!=b”);printf(“a!=b”);32 -1 (x0)算法算法1 1:算法算法1 1:输入输入x x 输入输入x x若若x0,x0,则则y=-1 y=-1 若若x0,x0,x0,则则y=1 y=1 若若x=0,x=0,则则y=0y=0输出输出y y 若若x0,x0,则则y=1y=1 输出输出y y 多分支语句多分支语句33程序程序#include#includevoid main()void main()int x,y;int x,y;scanf(“%d”,&x);scanf(“%d”,&x);if(x0)if(x=0)if(x=0)if(x0)y=1;if(x
30、0)y=1;else y=0;else y=0;else y=-1;else y=-1;正确?正确?34程序1:程序2:if(x=0)y=-1;if(x0)y=1;else else y=0;if(x=0)y=0;else y=-1;else y=1;程序3:程序4:y=-1;y=0;if(x!=0)if(x=0)if(x0)y=1;if(x0)y=1;else y=0;else y=-1;正确正确上例中的程序段有四个,请判断哪个是正确的?上例中的程序段有四个,请判断哪个是正确的?X=90)printf(An);else if(score=80)printf(Bn);else if(score
31、=70)printf(Cn);else if(score=60)printf(Dn);else printf(En);37多分支语句多分支语句例例4.8 分段函数定义如右:分段函数定义如右:根据所输入的根据所输入的x的值,求函数值。的值,求函数值。main()float x,y;scanf(%f,&x);if(x0)y=0;else if(x=50)y=x;else y=x*x;printf(x=%f,y=%fn,x,y);384.3.2 switch语句语句switchswitch语句的格式:语句的格式:switchswitch (表达式)case常量表达式:语句 break;case常量表
32、达式:语句 break;case常量表达式:语句 break;default :语句 执行过程:执行过程:执行过程:执行过程:当表达式的值与某一个当表达式的值与某一个case后面的常量表达式的后面的常量表达式的值相值相等时等时,就,就从此从此case后面的语句开始执行下去后面的语句开始执行下去,若所有的,若所有的case中的常量表达式的值都中的常量表达式的值都没有与表达式的值匹配的没有与表达式的值匹配的,就就执行执行default后面的语句后面的语句。39switch语句语句case 1语句组语句组1break?case 2语句组语句组2break?case N语句组语句组nbreak?是是是
33、是是是否否否否否否有有无无无无无无有有有有case N+140switch语句语句执行流程:执行流程:n首先计算首先计算switch圆括号中表达式的值圆括号中表达式的值,然后将结果值按前,然后将结果值按前后顺序依次与各个后顺序依次与各个case后的常量表达式进行比较。后的常量表达式进行比较。n当表达式的值与某一个当表达式的值与某一个case后面的常量表达式的后面的常量表达式的值相等时值相等时,就执行就执行该该case后边的语句组后边的语句组k,接着如果接着如果遇到遇到break语句语句,则结束整个则结束整个switch语句语句(即退出即退出switch)。如果。如果不遇到不遇到break语句语
34、句,则按顺序执行下面其他则按顺序执行下面其他case后边的语句组后边的语句组,直直至遇到至遇到break语句或最后边的语句或最后边的“”为止为止,才结束才结束switch语语句句n当结果值与常量表达式当结果值与常量表达式k的值都不相等时的值都不相等时,若有若有default,则执行其后语句则执行其后语句;若无若无default,则什么都没执行则什么都没执行41switch语句语句说明:说明:1)switch关键字,关键字,case也是关键字,与其后面的常量表达式也是关键字,与其后面的常量表达式合称合称case语句标号,常量表达式类型必须与语句标号,常量表达式类型必须与switch后面表后面表达
35、式类型相匹配,达式类型相匹配,且各且各case语句标号的值各不相同,不能语句标号的值各不相同,不能重复重复;default也是关键字也是关键字,起语句标号的作用,代表除了,起语句标号的作用,代表除了以上所有以上所有case标号之外的那些标号;标号之外的那些标号;2)语句)语句1、语句、语句2可以是一条语句,也可以是若干条可以是一条语句,也可以是若干条,在必要,在必要时,时,case语句标号后的语句可以省略不写语句标号后的语句可以省略不写;3)switch的表达式通常是的表达式通常是一个整型或字符型变量一个整型或字符型变量,也允许,也允许枚枚举型变量举型变量,其结果,其结果为相应的整数、字符或枚
36、举常量为相应的整数、字符或枚举常量;4)break语句不是一定需要加上,语句不是一定需要加上,执行完一个执行完一个case后面的语后面的语句,若没有遇到句,若没有遇到break,就自动进入下一个,就自动进入下一个case继续执行继续执行,而不再判断是否与之匹配而不再判断是否与之匹配。42当程序在执行时,如果输入的是当程序在执行时,如果输入的是A#include stdio.hmain()char a;a=getchar();switch(a)case 65:printf(%c,A);case 66:printf(%c,B);default:printf(%sn,other);运行结果:运行结果
37、:运行结果:运行结果:ABotherABother43当程序在执行时,屏幕上输出为:当程序在执行时,屏幕上输出为:#include stdio.hmain()int k=2;switch(k)case 1:printf(%dn,k+);break;case 2:printf(%d,k+);case 3:printf(%dn,k+);break;cade 4:printf(%dn,k+);default:printf(Full!n“);运行结果:运行结果:运行结果:运行结果:2 32 344switch语句语句例例:要求按照考试成绩的等级输出百分制分数段,用要求按照考试成绩的等级输出百分制分数段
38、,用switch语句实现语句实现 应写为:应写为:应写为:应写为:switch switch(gradegrade)case A:printf(85100n);break;case A:printf(85100n);break;case B:printf(7084n);break;case B:printf(7084n);break;case C:printf(6069n);break;case C:printf(6069n);break;case D:printf(60n);break;case D:printf(60n);break;default:printf(errorn);defau
39、lt:printf(errorn);45补充例:输入成绩补充例:输入成绩,用用A、B、C、D、F、R分别表示优分别表示优、良、中、及格、不及格、补考、缺考。、良、中、及格、不及格、补考、缺考。grade=getchar();switch(grade)case A:case a:printf(优优);break;case B:case b:printf(良良);break;case C:case c:printf(中中);break;case D:case d:printf(及格及格);break;case F:case f:printf(不及格不及格);/*此处没有此处没有break语句语句*
40、/case R:case r:printf(请补考请补考);break;default:printf(输入错输入错);46switch语句语句例:某幼儿园只收例:某幼儿园只收2至至6岁的儿童。岁的儿童。23岁入小班,岁入小班,4岁入中班,岁入中班,56岁入大班。根据输入的年龄,求岁入大班。根据输入的年龄,求应入的班级。应入的班级。分析:分析:设年龄为设年龄为age,当,当age为为2和和3时,应输出时,应输出同样的内容同样的内容“入小班入小班”,age为为5和和6时输出同样的时输出同样的内容内容“入大班入大班”。该题算法比较简单。该题算法比较简单。47switch语句语句#include vo
41、id main()int age;printf(Please enter age:);scanf(%d,&age);switch(age)case 2:case 3:printf(入小班入小班n);break;case 4:printf(入中班入中班n);break;case 5:case 6:printf(入大班入大班n);break;default:printf(不能入园不能入园n);48void main()int x,y,a=0,b=0;scanf(x=%d,y=%d,&x,&y);switch(x)case 1:switch(y)case 0:a+;case 1:b+;default
42、:a+;b+;break;case 2:a+=2;b+=2;break;default:a+=3;b+=3;printf(a=%d,b=%dn,a,b);运行结果:运行结果:输入:输入:x=1,y=0 输出:输出:a=2 b=2switch语句的嵌套语句的嵌套49选择结构程序举例选择结构程序举例例例4.13 输入一个字符,判别该字符是数字、英文大写字母、输入一个字符,判别该字符是数字、英文大写字母、小写字母还是其它字符。小写字母还是其它字符。#include void main()char c;printf(input a char:);c=getchar();if(c=0&c=A&c=a&c
43、=z)printf(This is a small letter.n);else printf(This is an other character.n);50选择结构程序举例选择结构程序举例例例4.14 输入三角形三边长,求三角形面积。输入三角形三边长,求三角形面积。#include void main()float a,b,c,s,area;scanf(%f,%f,%f,&a,&b,&c);if(a+bc&a+cb&b+ca)s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%7.2fn,area);else printf(Not
44、a triangle.n);51选择结构程序举例选择结构程序举例例例4.15 输入输入a、b、c三个整数,输出最大数和最小数。三个整数,输出最大数和最小数。void main()int a,b,c,max,min;printf(input three numbers:);scanf(%d,%d,%d,&a,&b,&c);max=ab?a:b;min=amax)max=c;else if(c=6)printf(%dn,n);else printf(%dn,+n);2对于整型变量对于整型变量a,赋值语句,赋值语句 a=(a%3=0?1:0);与(与()语)语句不等价。句不等价。(A)if(a%3=
45、0)a=1;else a=0;(B)if(a%3!=0)a=0;else a=1;(C)if(a%3)a=0;else a=1;(D)if(a%3)a=1;else a=0;53课堂练习课堂练习3以下程序的运行结果是(以下程序的运行结果是()。)。main()int n=c;switch(n+)default:printf(error);break;case a:case b:printf(good);break;case c:printf(pass);case d:printf(warn);54循环结构循环结构n在许多问题中需要用到循环控制。循环结构是结在许多问题中需要用到循环控制。循环结构
46、是结构化程序设计的基本结构之一,它和顺序结构、构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元选择结构共同作为各种复杂程序的基本构造单元。n特点特点:当给定的条件成立时:当给定的条件成立时,反复执行某个程序反复执行某个程序段,直到条件不成立为止。段,直到条件不成立为止。给定的条件称为循环给定的条件称为循环条件条件,反复执行的程序段称为循环体,反复执行的程序段称为循环体,它由它由C C的语的语句构成。句构成。nC语言提供了语言提供了3种循环结构:种循环结构:while语句;语句;do-while语句;语句;for语句语句554.4.1用用while语句实现循环
47、语句实现循环whilewhile语句用来实现语句用来实现“当型当型”循环结构。循环结构。一般形式:一般形式:while(while(表达式表达式)语句语句 当表达式为非当表达式为非0 0值时,值时,执行执行whilewhile语句中的内嵌语句中的内嵌语句。语句。其特点是其特点是:先判断表达式,先判断表达式,后执行语句。后执行语句。(1)与与 if 的区别的区别,if 只只一次一次,while反复判断反复判断,反复执行反复执行;(2)while 语句中通常语句中通常有改变表达式的值的语有改变表达式的值的语句句。56用用while语句实现循环语句实现循环例例4.18 计算计算1+2+100。mai
48、n()int i=1,s=0;while(i=100)s+=i;i+;printf(%d,%d,i,s);getch();1.1.如果缺少如果缺少i+i+这一行会出现这一行会出现什么情况?什么情况?2.2.若计算若计算:n!:n!该该程序应如何修程序应如何修改改?57例例4.19 根据公式根据公式 计算计算的值。的值。#include void main()int i=1,n;double pi=0;printf(Input an integer:n);scanf(%d,&n);while(i=n)pi+=1.0/(i*i);i+;pi=sqrt(pi*6);printf(pi=%lfn,pi
49、);58用用while语句实现循环语句实现循环例例4.21 猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数的一半多一个,第二天吃剩下的一半多一个,以后每天都吃的一半多一个,第二天吃剩下的一半多一个,以后每天都吃前一天剩下的一半多一个,到第十天想再吃时剩一个,求猴前一天剩下的一半多一个,到第十天想再吃时剩一个,求猴子摘了多少个桃子?子摘了多少个桃子?算法分析算法分析:设第设第 i 天未吃前有天未吃前有 x i 个桃子个桃子,由题意得由题意得:x1/2-1=x2 x2/2-1=x3 x9/2-1=x10已知已知x10=1,我们有我们有:x10=1 xn
50、-1=(xn+1)*2void main()int k,x1,x2;k=1;x2=1;while(k=9)x1=(x2+1)*2;x2=x1;k+;printf(Total number=%dn,x1);59用用while语句实现循环语句实现循环补充补充1.统计从键盘输入的统计从键盘输入的字符个数。字符个数。(以回车结束以回车结束)补充补充2.从键盘输入一个整数从键盘输入一个整数(至少大于至少大于9),求最高位的数求最高位的数字字.#include main()int count=0;while(getchar()!=n)count+;printf(count=%d,count);这种结构的循