【文档说明】C语言程序设计课件第4章.ppt,共(76)页,697.047 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44531.html
以下为本文档部分文字说明:
第4章结构化程序设计返回主目录第4章结构化程序设计本章主要介绍结构化程序设计方法与设计过程和C语言程序结构化程序设计。1.顺序结构程序设计2.选择结构程序设计3.循环结构程序设计第4章结构化程序设计一、C语言程序结构分类C语言程序
三大结构:顺序结构、选择结构、循环结构按照各语句的先后顺序逐行执行,且每个语句都会被执行到。当满足(或不满足)某个条件时不停地重复执行某些语句。当满足(或不满足)某个条件时执行某些语句。第4章结构化程序设计二、C语言程序基本语句在C语言程序中,语句可以分为以下五类:⑴控制语句
:能完成一定的控制功能(有9种控制语)①if()~else~(条件选择语句)②for()~(多功能循环语句)③while()~(当型循环语句)④do~while()(直到型循环语句)⑤goto(无条件转移语句)⑥switch(多支
选择语句)⑦continue(结束本次循环语句)⑧break(执行中止语句)⑨return(函数返回值语句)第4章结构化程序设计⑵函数调用语句:能实现函数的调用功能。例如:printf("%d",a);⑶表达式语句:由一
个表达式加分号构成,能实现数据计算功能。例如:a=3*b;⑷空语句:由单独的一个分号组成,对程序执行不产生直接影响,没有实际意义。例如:;表示什么也不做,没有实际意义第4章结构化程序设计⑸复合语句:用{}将若干个语句括起来,形成一个整体,组成一个复合语句。例如:{a=3;b=4;c
=a*b+25;d=a*b*c;}第4章结构化程序设计三、顺序结构程序一般设计方法顺序结构程序设计方法:一般先对要处理的“事件”进行分析,根据分析的结果写出相应算法,画出流程图,再写出相关的源程序。第4章结构化程
序设计程序开头的编译预处理命令main(){对变量类型进行说明的语句对相应变量提供数据的语句运算部分输出部分}#include"stdio.h"main(){inta,b,c;a=3;b=5;c=a+b;p
rintf(“c=%d”,c);}在顺序结构程序中,一般包括以下几个部分:第4章结构化程序设计例4-1输入三角形的三条边长,求三角形的周长和面积。①三角形周长:len=a+b+c②三角形面积:s=)1()
1()1(1csbsass,s1=0.5*(a+b+c)。开始floata,b,c,len,s1,ss1=0.5*(a+b+c)len=a+b+cs=sqrt(s1*(s1-a)*(s1-b)*
(s1-c))输出len,s结束输入a,b,c第4章结构化程序设计#include"stdio.h"#include"math.h"main(){floata,b,c,s1,len,s;printf("Inputthea,b,c:");scanf("%f,%f,%f",&a,&b,&c);s1
=0.5*(a+b+c);len=a+b+c;s=sqrt(s1*(s1-a)*(s1-b)*(s1-c));printf("a=%f,b=%f,c=%f\n",a,b,c);printf("len=%f,s=%f\n",len,s);}第4章结构化程序设计325/9
cf例4-2输入一个摄氏温度,输出它的华氏温度。温度换算公为(f为华氏温度,c为摄氏温度)开始floatf,cf=9.0/5.0*c+32输出c,f结束输入c#include"stdio.h"main(){floatf,c;printf("请输入一个摄氏温度值:");
scanf("%f",&c);f=9.0/5.0*c+32;printf("摄氏温度为:c=%8.2f\n",c);printf("华氏温度为:f=%8.2f\n",f);}第4章结构化程序设计例4-3设圆的半径为r=1.5,圆柱高h=3,求圆柱表面积、圆柱体积。(圆半
径、圆柱高从键盘输入,输出结果时要求小数点保留2位小数。)#include“stdio.h"main(){floatr,h,ar,av;printf("输入半径和高");scanf("%f,%f",&r,&h);ar=3.1415926*r*r*2+2*3.1415926*r
*h;av=3.1415926*r*r*h;printf("表面积ar=%8.2f,体积=%8.2f",ar,av);}第4章结构化程序设计一、选择结构程序设计在C语言中,用if语句或switch语句来实现选择结构条件选择结构多支选择结构根据所给的条件作出
判断,有选择性的执行部分语句。根据所给的数据和已有的选择支相比较,执行相符合的选择支。第4章结构化程序设计二、条件选择if语句if语句是用来判定所给的条件是否满足,根据判断的结果决定执行何种操作。if语句有三种形式:if()~if(
)~else~if()~elseif()~else~第4章结构化程序设计1.逻辑if语句格式:if(表达式){语句}功能:当括号内表达式的值为“真”时,才能执行后面的操作,并且只能执行一个语句而不能执行若干个语句
,如果括号内表达式的值为“假”时,将不执行任何操作。表达式语句假真例如:①if(x>y)a=x*y;②if(x<y){a=x-y;b=x+y;}第4章结构化程序设计例4-4输入三个整数x,y,z,按从小到大的顺序输
出。分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。第4章结构化程序设计程序如下:#include"std
io.h"main(){intx,y,z,t;printf("pleaseinputthethreenumbers:");scanf("%d,%d,%d",&x,&y,&z);if(x>y){t=x;x=y;y=t;}if(x>z){t=z;z=
x;x=t;}if(y>z){t=y;y=z;z=t;}printf("smalltobig:%d%d%d\n",x,y,z);}第4章结构化程序设计表达式语句1假语句2真例如:①if(x>y)a=b;elsea=c;②if(a>b)a=a+b;else{t=a;a=b;b=t;}功能:当括号
内表达式的值为“真”时,执行语句1的操作,否则,执行语句2的操作。同样,也只能执行一个语句而不能执行若干个语句。2.结构模块if()~else~语句格式:if(表达式){语句1}else{语句2}第4章结构化程序设计例4-5有一函数:
)0(1)0(1)(22xxxxxf编一程序,输入一个x值,求y值。#include"stdio.h"main(){intx,y;scanf("%d",&x);if(x<0)y=x*x-1;elsey=x*x+1;printf("x=%d,y=%d",x,y);}if(x<0)y=x*
x-1;if(x>=0)y=x*x+1;第4章结构化程序设计例4-6写一程序,从键盘上输入年份year(4位以内十进制正整数),判断其是否为闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。
#include"stdio.h"main(){intyear;printf("Pleaseinputtheyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))
printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}第4章结构化程序设计3.结构模块if~elseif~语句格式
:if(表达式1){语句1}elseif(表达式2){语句2}.........elseif(表达式n){语句n}else{语句n+1}功能:当表达式1的值为“真”时,执行语句1;如果表达式1的值为“假”,再判定表达式2是否为“真”,如果表达式2的值为“真”,执行语
句2,如果表达式2的值为“假”,再判定表达式3是否为“真”,如果表达式3的值为“真”,执行语句3;以此类推;如果所有表达式的值都为“假”,则执行语句n+1。同样,也只能执行一个语句而不能执行若干个语句。第4章结构
化程序设计表达式1语句1假表达式2表达式n语句2语句n............语句n语句n+1假假假真真真…………例如:①if(x<100)t=0.1;elseif(x<200)t=0.2;elseif(x<300)t=0.
3;elseif(x<400)t=0.4;elset=0.5;②if(x>400){t=0.4;a=1.5;}elseif(x>300){t=0.3;a=1.2;}elseif(x>200){t=0.2
;a=1.0;}else{t=0.1;a=0.8;}第4章结构化程序设计例4-7有一函数:)0()0()0(1012)(2xxxxxxf编一程序,输入一个x值,求y值。#include"stdio.h"main()
{intx,y;scanf("%d",&x);if(x<0)y=2*x-1;elseif(x==0)y=0;elsey=x*x+1;printf("x=%d,y=%d",x,y);}if(x<0)y=2*x-1;if(x==0)
y=0;if(x>0)y=x*x+1第4章结构化程序设计注意:①在if语句中,括号内的表达式一般为关系表达式或逻辑表达式,如果括号内的表达式为其它表达式,则无法实现选择操作。例如:if(2)print(“howareyou”);该语句
的输出结果为“howareyou”,因为表达式的值为2,按“真”处理。如果写成if('a')print("howareyou");输出结果同样为“howareyou”,因为表达式的值为a,还是按“真”处理。②在if语句中,每次只能执行一个语句或一个选择支,如果
要执行多个语句,应当将这些语句用{}括起来,形成一个复合语句。③在if语句中,允许括号内存在赋值表达式。例如if((a=b)>0)t=a;④if语句在程序中相当一个复合语句。第4章结构化程序设计4.条件运算符与条件
表达式格式如下:表达式1?表达式2:表达式3功能:先算表达式1,若表达式1为“真”,则求解表达式2,此时表达式2的值就是整个条件表达式的值。若表达式1为“假”,则求解表达式3,此时表达式3的值就是整个条件表达式的值。第4章结构化程序设计条件运算符是一个三目运算符,要求
有三个操作数;结合方式是从右到左;优先级别很低,只比赋值运算符和逗号运算符高。例如:①假定a=3,b=4,执行表达式mmx=a>b?a+1:b+1后,mmx的值为5。②假定a=3,b=5,c=2,d=3,执行表达式mmx=a>b?a:c>d?c:d后,mmx的值为3。第4章结构化程序
设计例4-8从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。#include"stdio.h"main(){charch;printf("Inputacharacter:
");scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c\n",ch);}第4章结构化程序设计思考题:例4-9企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数。例4-10从键盘上输入任意三个数作为三角形的三条边,求三角形的面积。第4章结构化程序设计
三、多支选择switch语句C语言提供了switch语句直接处理多分支选择。switch语句的一般形式为:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;......case常量表达式n:语句n;
break;default:语句n+1;}功能:先算出表达式的值,然后判断该表达式的值是否与某个case后面的常量表达式的值相等,若相等,则执行此case后面的语句,当执行到break语句时,跳出switch语句。若该表达式的值与所有case后面的常
量表达式的值都不等,则执行default后面的语句。第4章结构化程序设计注意:①switch后面括号内的表达式一般为普通表达式,可以是int、char和枚举型中的一种,不应为关系表达式或逻辑表达式,如
果为关系表达式或逻辑表达式,就不能实现多支选择。②每个case后面常量表达式的值,必须各不相同,否则会出现相互矛盾。同时必须使case后面的常量表达式类型和switch后面括号内表达式的类型保持一致。第4章结构化程序设计③case后面的常量表达式仅起语句标号作用,并不进行条件判
断。系统一旦找到相匹配的标号,就从此标号开始执行,不再进行标号判断,因此,必须加上break语句来结束switch语句的执行。④各case及default子句出现的先后次序,不影响程序执行结果。⑤多个case子句,
可共用同一语句。⑥一个switch语句在C语言程序中相当于一个复合语句。用switch语句实现的多分支结构程序,完全可以用if语句来实现。第4章结构化程序设计例4-11从键盘上输入一个百分制成绩score
,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。第4章结构化程序设计#include"stdio.h"main(){floatsco
re,intgrade;printf("Inputascore(0~100):");scanf("%f",&score);grade=(int)(score/10);switch(grade){case10:case9:printf("grade=A\n
");break;case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:
printf("grade=E\n");break;default:printf(“dataerror!\n");}getch();}程序如下:第4章结构化程序设计#include"stdio.h"vo
iddummy(){}main(){charch;printf("1.输入记录\n");printf("2.记录列表\n");printf("3.删除记录\n");printf("4.修改记录\n");printf("请输入选择:\n");ch=ge
tchar();switch(ch){case'1':printf("输入记录\n");dummy();break;case'2':printf("记录列表\n");dummy();break;case'3':printf("删除记录\n");dummy();break;cas
e'4':printf("修改记录\n");dummy();break;default:printf("选择错!\n");}getch();}例4-12在显示器上显示一个菜单程序的模型。第4章结构化程序设计四、选择结构的嵌套C语言程序中,可以在
一个选择语句中嵌套一个或多个选择语句。if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;if(a<b){if(c<d)x=1;elseif(a<c){if(b<d)x=2
;elsex=3;}elsex=6;}elsex=7;1.if语句可以实现多重嵌套:一般而言,确定if语句的嵌套次序的方法如下:①else只能与其前面最近的if配对。②每个else只能配对一次。配对后的if()~else~相当于一
个复合语句。第4章结构化程序设计例4-13求方程ax2+bx+c=0的根。#include"stdio.h"#include"math.h"main(){floata,b,c,x1,x2,delta,rel,ima;printf("Inputthea,b,c:");scanf("%f,%f,%f
",&a,&b,&c);if(fabs(a)<=1e-6&&fabs(b)<=1e-6)printf("theequationisnotexist!\n");if(fabs(a)<=1e-6&&fabs(
b)>1e-6){printf("thisisasimpleequation!");x1=-c/b;printf("thesimpleequationroot:x=%8.4f\n",x1);}if(fabs(a)>1e-6){pri
ntf("thisisaquadraticequation!");delta=b*b-4.0*a*c;if(delta>1e-6)第4章结构化程序设计{printf("hastworealroots:\n");x1=(-b+sqrt(delta))/(2.0*a);x2=(-b
-sqrt(delta))/(2.0*a);printf("x1=%8.4f,x2=%8.4f",x1,x2);}if(fabs(delta)<=1e-6){printf("hastwoequalrealroots:\n");x1=(-b+sqrt(delta
))/(2.0*a);x2=(-b-sqrt(delta))/(2.0*a);printf("x1=%8.4f,x2=%8.4f",x1,x2);}if(delta<-1e-6){printf("hastwocomplexroots:\n");rel=(-b)/(2.0*a);ima=sqr
t(-delta)/(2.0*a);printf("x1=%8.4f+%8.4fi",rel,ima);printf("x2=%8.4f-%8.4fi",rel,ima);}}getch();}第4章结构化程序设计2.switch语句的嵌套:main(){intx=1,y
=0;switch(x){case1:switch(y){case0:printf(“**1**\n”);case1:printf(“**2**\n”);}case2:printf(“**3**\n”);}}第4章结构化程序设计思考题:编写一个简单的财务应用程序来计算职工的所得的实际工资
。具体要求:①总工资=基本底薪+奖金。高级职员:底薪2000元,奖金系数1.15一般职员:底薪1500元,奖金系数1.10办事员:底薪1000元,奖金系数1.0利润<50万,奖金提成1%;50万≤利润<80万,高出50万部分奖金提成1.2%80万≤利润<10
0万,高出80万部分奖金提成1.3%利润>100万,高出100万部分奖金提成1.5%②按国家要求扣税。③按国家要求扣养老金(占基本底薪8%)、医疗保险(占基本底薪6%)、失业保险(占基本底薪5%)等。第4章结构化程序设计循环结构程序设计循环操作是指重复执行一组指令或一个程
序段。程序中存在两种循环:无条件的循环和有条件的循环。无条件的循环是无休止地执行一组指令或一个程序段。有条件的循环是在满足一定的条件下重复执行一组指令或一个程序段。第4章结构化程序设计C语言提供以下4种语句
构成循环结构①goto语句标号;goto语句标号;②while语句while(表达式){语句}③do~while语句do{语句}while(表达式);④for语句for(表达式1;表达式2;表达式3){语句}第4章结构化程序设计一、goto语句C语言程序允许使用goto语句
来实现无条件转移。goto语句的一般形式为:goto语句标号;功能:跳转到语句标号所在处执行程序。语句标号是C语言的标识符,由数字、字母、下划线构成,开头不能为数字,不能与关键字同名,最长不得超过31个字符。语句标号在程序中只起一个标识作用,无
其它含义。例如:gotoloop1;注意:goto语句是一个无条件转移语句,通常与if语句合一起使用,实现有条件的转移。第4章结构化程序设计例4-14求1+2+3+…+100的和#include"stdio.h"main(){inti=1,sum=0;loop1:sum=sum+i;
i++;if(i<=100)gotoloop1;printf("%d",sum);}注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。如果程序中没有if(i
<=100),将出现死循环。第4章结构化程序设计二、while语句while语句是“当型”循环语句,常用来实现“当型”循环结构。While语句的一般使用形式为:while(表达式){语句}功能:①计算表达
式的值,判断表达式的真假关系.②如果表达式的值为“假”时,则不执行循环体,中止循环,直接执行第③步操作;如果表达式的值为“真”时,则执行循环体,重复第①步操作。③执行循环体下面的其它语句。表达式循环体真假循环体第4章结构化程序设计循环体循环条件使用while语句应注意的地方:while(表达式)
{语句}1、循环条件一般为关系表达式或逻辑表达式。2、如果循环条件为常量表达式,就会造成死循环或不循环。3、如果循环体有两或两条以上语句时,应当用{}将其括起来,形成一个复合语句。4、循环体中必须有能改变循环条件的语句存在,否则将出现死循环。5、在C语言
程序中,可以将一个while循环结构看成一个复合语句。第4章结构化程序设计例4-14求1+2+3+…+100的和#include"stdio.h"main(){inti=0,sum=0;while(i<=100){sum=sum+i;i++;}print
f("%d",sum);}构成循环的必要条件:1.循环变量赋初值(如:i=0)2.合适的循环条件(如:i<=100)3.循环变量必须有变化(如:i++)①while(i<=100)sum+=i++;②while(i++<=100)sum+=i;③while(++i<=100)sum+=i;第
4章结构化程序设计例4-15从键盘输入若干个整数求和,当和大于300时就停止输出。#include<stdio.h>voidmain(){intx,sum=0;while(sum<=300){printf("Inputanyx:");scanf("%d",&x
);sum=sum+x;}printf("sum=%d\n",sum);}第4章结构化程序设计例4-16编写程序求1!+2!+3!+…+20!的值#include"stdio.h"main(){floatsum=0.0,j=1.0;inti=1;while(i<=20){j=j*i;s
um=sum+j;i++;}printf("%e",sum);}第4章结构化程序设计三、do~while语句do~while是“直到型”循环语句,用来实现“直到型”循环结构。do~while语句的一般使用形式为:do{语句}while(表达式);功能:①执行一次循
环体②计算表达式的值,判定其真假关系,如果表达式的值为“真”,则重复第①步的操作;如果表达式的值为“假”,则退出执行。表达式循环体真假循环体第4章结构化程序设计循环体循环条件使用do~while语句应注意的地方:do{语句}while(表达式)1、循环条
件一般为关系表达式或逻辑表达式。2、如果循环条件为常量表达式,就会造成死循环或循环1次。3、如果循环体有两或两条以上语句时,应当用{}将其括起来,形成一个复合语句。4、循环体中必须有能改变循环条件的语句存在,否则将出现死循环。5、在C语言程序中,可以将一个do~whi
le循环结构看成一个复合语句。第4章结构化程序设计例4-17求1+2+3+…+100的和#include"stdio.h"main(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum
);}从程序中可以看出do~while语句是先循环,后判定,即使表达式的值为“假”,循环体也至少被执行了一次。第4章结构化程序设计例4-18求1*2*3*…*10的积#include"stdio.h"main(){longi=1,jc=1;do{jc=jc*i;i++;}whi
le(i<=10);printf("%ld",jc);}第4章结构化程序设计例4-19编写程序求1!+2!+3!+…+20!的值#include"stdio.h"main(){floatsum=0.0,j=1.0;inti=1;do{j=j*i;sum=sum+j;i++;}whi
le(i<=20);printf("%e",sum);}第4章结构化程序设计四、for语句for语句是一种多功能循环语句,不仅可以用于循环次数已经确定的情况,也可以用于循环次数不确定而只给出循环结束条件的情况。for语句的一般使用
形式为:for(表达式1;表达式2;表达式3){语句}循环体功能:①先求解表达式1。②再求解表达式2,判定其真假关系,若表达式2的值为“假”,则不执行循环体,直接执行第③步操作,若表达式2的值为“真”则执行循环体,再求解表达式3
,重复执行第②步操作。③执行循环体后面的其它语句。表达式2表达式1循环体表达式3真假第4章结构化程序设计例4-20求1+2+3+…+100的和#include"stdio.h"main(){inti,
sum;for(i=0,sum=0;i<=100;i++)sum=sum+i;printf("%d",sum);}第4章结构化程序设计循环体循环条件使用for语句应注意的地方:for(表达式1;表达式2;表达式3){语句}①一般而言,f
or语句中的表达式2应为关系表达式或逻辑表达式,表达式1与表达式3可以为其它表达式。如果表达式2为其它表达式,则可能出现死循环或不循环。②表达式1不参与循环,一般用于给参与循环的变量赋初值,表达式3要参与循环。③如果循环体是由多条语句构成时,应用{}将循环体括起来
,组合成一个复合语句。参与循环,看成循环体的一部分第4章结构化程序设计④循环体或表达式3应该有改变表达式2的值的可能性,否则将会出现死循环。即:如果表达式2的值是一个永远不可能发生改变的固定值,将会出现死循环。例如:for(i=0,sum=0;i<=
100;i=2)sum=sum+i;是一个死循环。⑤for语句中,括号内的表达式可以省略,但其后面的分号不能省略。如果要省略表达式1,则应在for语句前面先给参与循环的变量赋初值。例如:i=0;sum=0;for(;i<=100;i++)sum=sum+i;和for(i=0,sum=0;i<=10
0;i++)sum=sum+i;是等价的。表达式3也可以省略,如果要省略表达式3,则应该在循环体内设臵相应的语句来替代表达式3,以保证循环的正常执行。如:for(i=0,sum=0;i<=100;i++)sum=sum+i;和for(i=0,
sum=0;i<=100;){sum=sum+i;i++;}是完全等价的。可以同时省略表达式1和表达式3。如果直接省略表达式2将会出现死循环。第4章结构化程序设计使用for语句与while语句的比较{语句}表达式1;表达式3;表达式3表达式1for(;表达式2;)for(;表达式2;)whil
e(表达式2){语句}第4章结构化程序设计使用for语句与while语句的比较for(表达式1;表达式2;表达式3){语句}{语句}表达式1;表达式3;while(表达式2)第4章结构化程序设计例4-21求π的近似值,直到最后一项的绝对值小于10-6为止。#include"std
io.h"#include"math.h"main(){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;while(fabs(t)>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%f",pi);}71513
114/第4章结构化程序设计例4-22有一分数列,求出前20项之会和。#include"Stdio.h"main(){floatsum=0,m,n;inti=1;for(m=2.0,n=1.0;i<=20;i++){sum=sum+m/n;m=m+n;n=m-n;}printf("sum=
%f\n",sum);},......1321,813,58,35,23,12第4章结构化程序设计五、循环结构的嵌套C语言程序允许各种循环之间相互嵌套,嵌套时,必须是一个循环完整地包含在另一个循环之内。①while(){…while(){…}…}②while(){……while
()}{…}第4章结构化程序设计1.循环相互嵌套时,主要有以下两类方式:多个循环嵌套多重循环嵌套在一个循环体内嵌套多个循环语句。在一个循环体内嵌套多重循环语句,即:循环中套循环While(){……while(){……}……while(){……}……}While(){……wh
ile(){……while(){……}……}……}第4章结构化程序设计2.常用的循环嵌套形式:①while语句嵌套while语句②while语句嵌套do~while语句③while语句嵌套for语句④do~while语句嵌套while语
句⑤do~while语句嵌套do~while语句⑥do~while语句嵌套for语句⑦for语句嵌套while语句⑧for语句嵌套do~while语句⑨for语句嵌套for语句⑩混合嵌套第4章结构化程序设计3.执行嵌套的循环时,只有当子循环执行完毕后,才能返回
到上一级循环。#include"stdio.h"main(){inti=0,j;while(i<5){j=0;while(j<5){printf("%d,%d\n",i,j);j++;}i++;}}#include"stdio.h"main(){inti
,j;for(i=0;i<5;i++){for(j=0;j<5;j++){printf("%d,%d\n",i,j);}}}第4章结构化程序设计例4-23编写一个应用程序求出200~300之间满足以下条件的所有数。条件:各数字之和为12,各数字之积为42。#include"stdio.h"
main(){intx,y,z;printf("thenumberis:");for(x=2,y=1;y<=9;y++)for(z=1;z<=9;z++)if(x+y+z==12&&x*y*z==42)printf("%6d",x*100+y*10+z);}穷举法分析:假定这个数的百位、十位、个
位分别为x、y、z,则必须有:①x+y+z=12②x*y*z=42第4章结构化程序设计例4-24打印出所有的“水仙花数”。“水仙花数”是指一个三位数,其各位数字的立方和等于该数字本身。如xyz=x3+y3+z3#include"stdio.h"main(){
intx,y,z;printf("thenumberis:");for(x=1;x<=9;x++)for(y=0;y<=9;y++)for(z=0;z<=9;z++)if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)printf("%5
d",x*100+y*10+z);}第4章结构化程序设计例4-25已知xyz+yzz=532,其中x,y,z都是数,求这三个字母分别代表什么数字?#include"Stdio.h"main(){intx,y,z;for(x=1;x<=5;x++)for(y=1;y<=5;y++)for(z=
1;z<=9;z++)if(x*100+y*10+z+y*100+z*10+z==532)printf("x=%d,y=%d,z=%d",x,y,z);}第4章结构化程序设计例4-26公元五世纪,我国古代数学家张丘建在《算经》中提出以下问题:鸡翁一值钱五,鸡母
一值钱三,鸡雏三值钱一。凡百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?编程求解。分析:假定公鸡x只,母鸡y只,小鸡z只,则有下面的对应关系:①x+y+z=100②5*x+3*y+z/3=100第4章结构化程序设计#include"stdio.h"main(){in
tx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&5*x+3*y+z/3.0==100)printf("cockis:%d,henis:%d,chickis:%d\n",x,y,
z);}第4章结构化程序设计六、break语句在循环结构中,可以用break语句来结束循环。break语句的一般使用形式为:break;功能:结束当前的循环。即当一个循环体中的break语句被执行时,循环体立即中
断执行,并转向循环体外的下一条语句执行。表达式1真表达式2假break假真注意:①break语句在循环体内不能单独使用,必须与if语句一起合用。②在goto语句和if语句构成的循环当中,不能使用break语句。第4章结构化程序设计例4-27求1+2+3+…+100的和#include"stdio
.h"main(){inti=1,sum=0;while(1){sum=sum+i;i++;if(i>100)break;}printf("%d",sum);}#include"stdio.h"main(){inti=1,sum=0;whi
le(i<=100){sum=sum+i;i++;}printf("%d",sum);}第4章结构化程序设计七、continue语句注意:①continue语句在循环体内不能单独使用,必须与if语句一起合用。②在goto语句和if语句构成的循环当中,不能使用continue语句。
功能:跳过尚未执行的语句,提前结束本次循环,进行下一次循环条件的判定,决定是否执行下一次循环。在循环结构中,可以用continue语句来加快循环。continue语句的一般使用形式为:continue;表达式1真表达式2假continue假真第4章结构化程序设计例4-28编写程序求1
!+3!+5!+…+19!的值#include"Stdio.h"main(){floatsum,j;inti;for(i=1,j=1,sum=0;i<20;i++){j=j*i;if(i%2==0)continue;sum=sum+j;}printf("%e",sum);}
第4章结构化程序设计下面四个程序的功能完全一样,填空完成程序编写①main(){inti,sum;for(i=1,sum=0;i<10;i++)sum+=i;printf("%d",sum);}②main(){int____________for(;i<10;i++)sum
+=i;printf("%d",sum);}③main(){inti=1,sum=0;for(;i<10;){________________________________}printf("%d",sum);}④main(){int
i=1,sum=0;for(;;){sum=sum+i++;________________}printf("%d",sum);}第4章结构化程序设计⑴goto语句⑵while语句⑶do~while语句⑷for语句⑸循
环结构的嵌套⑹break语句⑺continue语句