1、 5.1 C语言语句类型语言语句类型 5.2 程序的三种基本结构程序的三种基本结构 5.3 if语句语句 5.4 switch语句语句 5.5 while语句语句 5.6 do-while语句语句 5.7 for语句语句 5.8 循环嵌套循环嵌套 5.9 break语句和语句和continue语句语句 5.1 C语言语句类型 C C语句分为语句分为5类类控制语句控制语句函数调用语句函数调用语句表达式语句表达式语句空语句空语句复合语句复合语句空语句空语句 只有一个分号(;)的语句只有一个分号(;)的语句 (什么也不做)(什么也不做)表达式语句表达式语句 语句形式:语句形式:表达式;表达式;例如:
2、例如:a a*=10;=10;(a+b(a+b*5)20;5)20;注意:注意:一个表达式可以成为另一个更复杂的表达式一个表达式可以成为另一个更复杂的表达式的一部分,而表达式语句则不能。的一部分,而表达式语句则不能。例如:例如:a=b(表达式),可以写(表达式),可以写(a=b)0 a=b;(表达式语句),不可以写(表达式语句),不可以写(a=b;)0复合语句复合语句 用一对用一对 括起来的语句括起来的语句 z=x+y;t=z/100;printf(“%f”,t);注意:注意:复合语句中最后一个语句中最后的分号复合语句中最后一个语句中最后的分号不能忽略不写。不能忽略不写。函数调用语句函数调用语
3、句 语句形式:语句形式:函数名(实参列表);函数名(实参列表);例如:例如:scanf(scanf(“%d%d”,&a);,&a);printf(printf(“%d%d”,a);,a);控制语句控制语句 用于完成一定的控制功能用于完成一定的控制功能C C语言有语言有9 9中控制语句:中控制语句:if()elseif()else/条件语句,实现选择结构条件语句,实现选择结构switchswitch/多分支选择语句多分支选择语句while()while()/当型循环语句,实现循环结构当型循环语句,实现循环结构do while()do while()/直到型循环语句直到型循环语句for()for(
4、)/循环语句循环语句continuecontinue/结束本次循环语句结束本次循环语句breakbreak/中止执行中止执行switchswitch或循环语句或循环语句gotgoto o/转向语句转向语句returnreturn/从函数返回语句从函数返回语句5.2 程序的三种基本结构程序的三种基本结构 程序的基本结构有三种:程序的基本结构有三种:(1)(1)顺序结构:各操作步骤顺序执行,是一顺序结构:各操作步骤顺序执行,是一种最简单的基本结构。种最简单的基本结构。(2)(2)选择结构选择结构 (3)(3)循环结构循环结构 例例 交换两个变量的值交换两个变量的值#include void mai
5、n()int a=3,b=5,c;printf(“交换前:交换前:a=%d,b=%d”,a,b);c=a;a=b;b=c;printf(“交换后:交换后:a=%d,b=%d”,a,b);顺序结构程序设计举例顺序结构程序设计举例例例 输入三角形的三边输入三角形的三边长,求三角形面积。长,求三角形面积。假设:三个边长假设:三个边长a a,b b,c c能构能构成三角形。成三角形。已知面积公式:已知面积公式:area=area=s=(a+b+c)/2s=(a+b+c)/2c)-b)(s-a)(s-s(s开始开始输入三边长输入三边长计算计算s s计算面积计算面积结束结束#include#include
6、#include#includevoid main()void main()float a,b,c,s,area;float a,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);scanf(“%f%f%f”,&a,&b,&c);s=1.0/2s=1.0/2*(a+b+c);(a+b+c);area=area=sqrtsqrt(s(s*(s-a)(s-a)*(s-b)(s-b)*(s-c);(s-c);printf(“a=%7.2f,b=%7.2f,c=%7.2f,printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn”,a,b,c,s);s=%
7、7.2fn”,a,b,c,s);printf(“area=%7.2fn”,area);printf(“area=%7.2fn”,area);数学函数库因为要用到其中的sqrt函数运行情况:3.4 4.5 5.6a=3.40,b=4.50,c=5.60area=7.65 5.3 if语句语句5.3.1 if语句的语句的3种形式种形式IfIf语句形式语句形式ifif(表达式)(表达式)语句语句表达式为条件判断表达式,表达式为条件判断表达式,结果为逻辑值结果为逻辑值例:例:if(xy)printf(“%d”,x);表达式表达式语句语句真(非真(非0)假假(0)if的内嵌语句通常多于一条语句,这时必须
8、的内嵌语句通常多于一条语句,这时必须使用使用 把这些语句括起来,形成复合语句,把这些语句括起来,形成复合语句,使其在语法上成为一条单语句使其在语法上成为一条单语句 例如:例如:if(x0)y=1;z=10;printf(“y=%d,z=%dn”,y,z);如果不加如果不加,程序会有什么变化,程序会有什么变化 例:输入一个学生的两门课程考试成例:输入一个学生的两门课程考试成绩,如果两门课程成绩均在绩,如果两门课程成绩均在90分以上,分以上,则显示则显示“优秀优秀”。分析:分析:输入两门课程的考试成绩(输入两门课程的考试成绩(scanf)判断两门课程成绩是否均在判断两门课程成绩是否均在90分以上分
9、以上 如果如果“是是”,则显示,则显示“优秀优秀”if 需要定义两个变量需要定义两个变量x1、x2存放输入的存放输入的成绩成绩 用用scanf接受输入的数据存放到接受输入的数据存放到x1、x2中中 判断是否是判断是否是x190并且并且x290 如果是,则如果是,则printf(“优秀优秀”);if#include main()float x1,x2;printf(“请输入两门课程的考试成请输入两门课程的考试成绩:绩:”);scanf(“%f%f”,&x1,&x2);if(x190&x290)printf(“优秀优秀n”);lif-elseif-else语句形式语句形式if(if(表达式表达式)
10、语句语句1 1else else 语句语句2 2例:例:if(xy)printf(“%d”,x);else printf(“%d”,y);条件条件 语句语句1 语句语句2YN开始开始输入输入a,b输出输出zabz=az=b结束结束#include void main()int a,b,z;scanf(“%d,%d”,a,b);if(ab)z=a;else z=b;printf(“最大数是:最大数是:%d”,z);YesNo 例:输入一个英文字母,判断是否为大例:输入一个英文字母,判断是否为大写字母,若是,则转换成小写字母输出,写字母,若是,则转换成小写字母输出,否则不转换直接输出。否则不转换直
11、接输出。分析:分析:输入一个英文字母存放在变量输入一个英文字母存放在变量ch中中 判断判断ch是否为大写字母是否为大写字母 如果是则需要将其转换为小写字母如果是则需要将其转换为小写字母 输出字母输出字母 char ch;printf(请输入一个英文字母:请输入一个英文字母:);scanf(%c,&ch);if(ch=A&chb,则,则max=a,否则,否则max=b;再判断:再判断:如果如果maxb)max=a;else max=b;if(cmax)max=c;printf(三个数中最大的值为:三个数中最大的值为:%dn,max);lif-else ifif-else if语句形式:语句形式:
12、ifif(表达式(表达式1 1)语句)语句1 1else if(else if(表达式表达式2)2)语句语句2 2else if(else if(表达式表达式3)3)语句语句3 3 else if(else if(表达式表达式m)m)语句语句m melse else 语句语句n n3 例:例:scanf(“%d”,&grade);if(grade100|grade=90)score=A;else if(grade=80)score=B;else if(grade=70)score=C;else if(grade=60)score=D;else score=E;例:例:scanf(“%d”,&g
13、rade);if(grade=90&grade=90&grade=80)score=else if(grade=80)score=B B;else if(grade=70)score=else if(grade=70)score=C C;else if(grade=60)score=else if(grade=60)score=D D;else if(grade=0)score=else if(grade=0)score=E E;例:求解下面的分段函数并显示结果。例:求解下面的分段函数并显示结果。分析:分析:分段函数中需要用到两个变量分段函数中需要用到两个变量x、y 判断判断x的范围,根据判断
14、结果选择使用哪个公的范围,根据判断结果选择使用哪个公式计算式计算y的值的值 声明变量声明变量x、y 输入输入x的值的值 判断:如果判断:如果x10,则,则y=2*x;否则再判断是否否则再判断是否x=0并且并且x10)y=2*x;else if(x=0)y=x+1;else y=x-10;printf(y=%d,y);例例 输入某人的身高和体重,根据下面输入某人的身高和体重,根据下面的计算公式判断此人的体重是标准、的计算公式判断此人的体重是标准、过胖还是过瘦。过胖还是过瘦。(1)标准体重)标准体重=(身高(身高-110)公斤;)公斤;(2)超过标准体重)超过标准体重5公斤为过胖;公斤为过胖;(3
15、)低于标准体重)低于标准体重5公斤为过瘦。公斤为过瘦。步骤:步骤:将输入的身高存放到变量将输入的身高存放到变量h中,体重存中,体重存放到变量放到变量w中中 计算标准体重,放到变量计算标准体重,放到变量bw 中中(bw=h-110)。)。如果如果w-bw5,则体重过胖,否则进一,则体重过胖,否则进一步进行判断,如果步进行判断,如果bw-w5,则体重过,则体重过瘦,否则体重为标准。瘦,否则体重为标准。#include main()float h,w,bw;printf(请输入某人的身高和体重(公斤):);scanf(%f%f,&h,&w);bw=h-110;if(w-bw5)printf(过胖n)
16、;else if(bw-w5)printf(过瘦n);else printf(标准n);ifif语句的嵌套语句的嵌套在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句语句称为称为ifif语句的嵌套。语句的嵌套。形式:形式:If(If(表达式表达式1)1)if(if(表达式表达式2 2)语句语句1 1else else 语句语句2 2ElseElseif(if(表达式表达式3 3)语句语句3 3else else 语句语句4 4内嵌内嵌ifif 例例 输入三个数输入三个数x,y,z,然后按从大到小输出。然后按从大到小输出。如果如果xy&xz,说明,说明x最大,应该首先输出,最大
17、,应该首先输出,然后判断,如果然后判断,如果yz,则接下来应该先输出,则接下来应该先输出y然后输出然后输出z,否则接下来应该先输出,否则接下来应该先输出z后输出后输出y。如果如果yx&yz,说明,说明y最大,应该首先输出,最大,应该首先输出,然后判断,如果然后判断,如果xz,则接下来应该先输出,则接下来应该先输出x然后输出然后输出z,否则接下来应该先输出,否则接下来应该先输出z后输出后输出x。如果以上两种情况都不是,则说明如果以上两种情况都不是,则说明z最大,应最大,应该首先输出该首先输出z的值,然后判断,如果的值,然后判断,如果xy,则,则接下俩应该按照先接下俩应该按照先x后后y的顺序输出,
18、否则应的顺序输出,否则应该按照先该按照先y后后x的顺序输出。的顺序输出。xy&xz输出输出x真真yz输出输出y输出输出z输出输出z输出输出yyx&yz输出输出y真真xz输出输出x输出输出z输出输出z输出输出x输出输出zxy输出输出x输出输出y输出输出y输出输出x假假假假假假假假假假真真真真真真#include main()float x,y,z;printf(请输入三个数字:请输入三个数字:);scanf(%f%f%f,&x,&y,&z);printf(三数从大到小为:三数从大到小为:”);if(x=y&x=z)printf(%ft,x);if(y=z)printf(%ft%fn,y,z);e
19、lse printf(%ft%fn,z,y);else if(y=x&y=z)printf(%ft,y);if(x=z)printf(%ft%fn,x,z);elseprintf(%ft%fn,z,x);elseprintf(%ft,z);if(x=y)printf(%ft%fn,x,y);elseprintf(%ft%fn,y,x);例 输入三个数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对换对换nabacbca和b交换a和c交换c和b交换yyynn
20、#include#include void main()void main()float a,b,c,t;float a,b,c,t;scanf(scanf(“%f,%f,%f%f,%f,%f”,&a,&b,&c);,&a,&b,&c);if(aif(a b)b)t=a;a=b;b=t;t=a;a=b;b=t;if(a if(a c)c)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);匹配规则
21、:匹配规则:ElseElse总是与它上面的,最近的,总是与它上面的,最近的,同一复合语句中的,未配对的同一复合语句中的,未配对的ifif语句配对。语句配对。例:If()if()语句1elseif()语句2 else 语句3例:If()if()语句1elseif()语句2 else 语句3当当ifif和和elseelse数目不同时,可以加数目不同时,可以加花括号花括号来确定配对关系。来确定配对关系。-1 (x0)#include#includevoid main()void main()int x,y;int x,y;scanf(scanf(“%d%d”,&x);,&x);程序段程序段 prin
22、tf(printf(“x=%d,y=%dnx=%d,y=%dn”,x,y);,x,y);上例中的程序段有四个,请判断哪个是正确的?上例中的程序段有四个,请判断哪个是正确的?程序程序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;正确正确条件运算符和条件表达式条件运算符和条件表达式格式:格式:表达式?表达式表达式?表达式表达式表达式功能:功能:判断判
23、断表达式表达式1 1的值,如果成立就执行的值,如果成立就执行表表 达式达式2 2,否则就执行,否则就执行表达式表达式3 3例:例:ifif ()()max=max=;else else maxmax;当当abab时将时将a a的值赋给的值赋给maxmax,当,当abab时将时将b b的值赋给的值赋给maxmax,可以看到无论可以看到无论abab是否满足,都是向同一个变量赋值。是否满足,都是向同一个变量赋值。可以用下面的条件运算符来处理:可以用下面的条件运算符来处理:()?)?;输入一个整数输入一个整数c,判断,判断c是否大于是否大于10,如果大于如果大于10,则输出,则输出“c10”,否,否则
24、,输出则,输出“c10)printf(“c10”);else printf(“c10?”c10”:”cb?amax=ab?a:b+1b+1相当于:相当于:max=(ab)?a:(b+1)max=(ab)?a:(b+1)不等于:不等于:max=(ab?a:bmax=(ab?a:b)+1+1说明:(2).(2).条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”。(3).3).“表达式表达式2 2”和和“表达式表达式3 3”不仅可以是数值表达式,不仅可以是数值表达式,还可以是赋值表达式或函数表达式。还可以是赋值表达式或函数表达式。(4).(4).条件表达式中,表达式的类型可以与表达式
25、条件表达式中,表达式的类型可以与表达式和表达式的类型不同。和表达式的类型不同。例例 输入一个字符,判别它是否大写字母,如果输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。然后输出最后得到的字符。#include void main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);5.4 switch语句switchswitch (表达式)(表达式)casecase常量表达式:语句序列常量表达式:语句序列 casecas
26、e常量表达式:语句序列常量表达式:语句序列 case case常量表达式常量表达式i i:语句序列:语句序列i i case case常量表达式:语句序列常量表达式:语句序列 default default:语句序列:语句序列 功能:当功能:当switchswitch后的表达式的值与某后的表达式的值与某casecase分支中的分支中的常量表达式常量表达式i i相等时,执行该相等时,执行该casecase分支后语句序列直分支后语句序列直到退出到退出switchswitch结构,否则执行结构,否则执行defaultdefault后的语句序列。后的语句序列。例例:要求按照考试成绩的等级输出百分制分数
27、段,用要求按照考试成绩的等级输出百分制分数段,用switchswitch语句实现:语句实现:switch(gradegrade)case printfprintf(););break;/break;/表示退出表示退出switchswitch结构结构 case printf printf(););break;break;case case printf printf(););break;break;case case printf printf(););break;break;default printf printf(););说明:说明:(1)switch(1)switch和和casecase
28、语句中的表达式需要是整型、字语句中的表达式需要是整型、字符类型或者枚举类型。符类型或者枚举类型。(2)(2)每一个每一个casecase的常量表达式的值必须互不相同,的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。一个值,有两种或多种执行方案)。(3)(3)执行完一个执行完一个casecase后面的语句后,流程控制转后面的语句后,流程控制转移到下一个移到下一个casecase继续执行。不再判断表达式与继续执行。不再判断表达式与“casecase常量表达式常量表达式”是否相等。是否相等。为避免执行后为避
29、免执行后面面casecase分支中的语句,应该在一个分支中的语句,应该在一个casecase分支后分支后,用一个用一个breakbreak语句来终止语句来终止switchswitch语句的执行。语句的执行。switch(grade)case printf(););case printf(););case printf(););case printf(););default printf(););(4)(4)良好的程序逻辑结构应该有良好的程序逻辑结构应该有defaultdefault分支,分支,但也可以没有这个分支,如果没有但也可以没有这个分支,如果没有defaultdefault,那,那么在找
30、不到与表达式相等的常量表达式时,不执么在找不到与表达式相等的常量表达式时,不执行任何分支。行任何分支。defaultdefault语句的位置没有要求。语句的位置没有要求。(5)(5)多个多个casecase可以共用一组执行语句。可以共用一组执行语句。int i=10;switch(i)default:printf(“defaultn”);case 1:printf(“1n”);break;case 2:printf(“2n”);break;最终显示:最终显示:default1 switch(day)case 1:case 2:case 3:case 4:case 5:printf(“工作日工作
31、日 n);break;case 6:case 7:printf(“休息日休息日 n);break;default:printf(“输入不在(输入不在(17)中)中 n);break;例例 编程实现两个整数的算术运算。编程实现两个整数的算术运算。分析:分析:算术运算的基本形式为:算术运算的基本形式为:根据操作符的不同会有不同的计算结果根据操作符的不同会有不同的计算结果 因此需要判断的是操作符的种类,根据这个因此需要判断的是操作符的种类,根据这个判断来选择不同的计算公式判断来选择不同的计算公式 操作符的可能种类有:操作符的可能种类有:+、-、*、/、%,是,是有限的几种情况,可以在进行选择判断时使
32、有限的几种情况,可以在进行选择判断时使用用switch语句语句 变量声明:变量声明:操作符:操作符:char op;操作数:;操作数:int x,y;输入算术运算:输入算术运算:scanf(%d%c%d,&x,&op,&y);操作符判断:操作符判断:switch(op)case+:printf(x+y=%dn,x+y);break;case-:printf(x-y=%dn,x-y);break;case*:printf(x*y=%dn,x*y);break;case/:printf(x/y=%dn,x/y);break;case%:printf(x%y=%dn,x%y);break;#include main()int x,y;char op;scanf(%d%c%d,&x,&op,&y);switch(op)case+:printf(x+y=%dn,x+y);break;case-:printf(x-y=%dn,x-y);break;case*:printf(x*y=%dn,x*y);break;case/:printf(x/y=%dn,x/y);break;case%:printf(x%y=%dn,x%y);break;