《程序基本结构.pptx》由会员分享,可在线阅读,更多相关《程序基本结构.pptx(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/261问题问题1 1的算法:的算法:S1:输入3个整数,分别赋值给a,b,cS2:如果ab,则ab bS3:如果ac,ac,则a ac cS4:S4:如果bc,bc,则b bc cS5:S5:输出a,b,ca,b,c的值分支结构分支结构输入输入a,b,ca,b,c的值的值N N ababY Yab b输出输出a,b,ca,b,c的值的值ac cbc c acacY YN N bcbcY YN N第1页/共92页2023/3/2622.1关系运算和逻辑运算2.1.1 关系运算符和关系表达式一、关系运算符一、关系运算符一、关系运算符一、关系运算符种:种:种:种:、=、=、=、!=!=
2、说明:说明:说明:说明:1 1 1 1、优先级优先级优先级优先级:前前前前4 4 4 4种相同,后种相同,后种相同,后种相同,后2 2 2 2种也相同,但前种也相同,但前种也相同,但前种也相同,但前4 4 4 4种高于后种高于后种高于后种高于后两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都两种;所有关系运算符的优先级都低于算术运算符低于算术运算符低于算术运算符低于算术运算符而而而而高于赋高于赋高于赋高于赋值运算符值运算符值运算符值运算符。2 2 2 2、结合性结合性结合性结合性:自左至右自左至右自左至右自左至右ab-cab-ca(b-c)a(b-c)
3、a=b=ca=b=ca=(b=c)a=(b=c)a=b!=ca=b!=ca=(b!=c)a=(b!=c)第2页/共92页2023/3/263 二、关系表达式二、关系表达式二、关系表达式二、关系表达式用用用用关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子关系运算符将两个表达式连接起来的式子。其中其中其中其中被连接的表达式可以是被连接的表达式可以是被连接的表达式可以是被连接的表达式可以是算术表达式算术表达式算术表达式算术表达式、关系关系关系关系表达式表达式表达式表达式、逻辑表达式逻辑表达式逻辑表达式逻辑表达式、赋值表达式赋值表达式赋值表
4、达式赋值表达式或或或或字符表达式字符表达式字符表达式字符表达式。如:如:如:如:a+bc+da+bc+d、xy=c+dxy=c+d、aAaA关系表达式的值只能是关系表达式的值只能是关系表达式的值只能是关系表达式的值只能是1 1或或或或0 0,当表达式成立即为当表达式成立即为当表达式成立即为当表达式成立即为“真真真真”时,值为整数时,值为整数时,值为整数时,值为整数1 1;否则为;否则为;否则为;否则为“假假假假”,值为整数,值为整数,值为整数,值为整数0 0。因此可看作。因此可看作。因此可看作。因此可看作整型表达式整型表达式整型表达式整型表达式。假设假设a=3,b=2,c=1a=3,b=2,c
5、=1,求以下关系表达式的值:求以下关系表达式的值:ab(ab)=cab(ab)=cabcabcf=abb=c1 11 10 01 1第3页/共92页2023/3/2642.1.2 逻辑运算符和逻辑表达式一、逻辑运算符一、逻辑运算符一、逻辑运算符一、逻辑运算符种:种:种:种:&|!、优先级优先级优先级优先级:!(非非非非)&(与与与与)|(或或或或)!(非非非非)算术运算符算术运算符算术运算符算术运算符关系运算符关系运算符关系运算符关系运算符&|赋值运算符赋值运算符赋值运算符赋值运算符(高)(高)(低)(低)、结合性结合性结合性结合性:!是右结合性,是右结合性,是右结合性,是右结合性,&和和和和
6、|是左结合性是左结合性是左结合性是左结合性、逻辑运算真值表:、逻辑运算真值表:、逻辑运算真值表:、逻辑运算真值表:a a a ab b b b!a a a a!b b b ba&ba&ba&ba&ba|ba|ba|ba|b非非非非0 0 0 0非非非非0 0 0 00 0 0 00 0 0 01 1 1 11 1 1 1非非非非0 0 0 00 0 0 00 0 0 01 1 1 10 0 0 01 1 1 10 0 0 0非非非非0 0 0 01 1 1 10 0 0 00 0 0 01 1 1 10 0 0 00 0 0 01 1 1 11 1 1 10 0 0 00 0 0 0第4页/共
7、92页例:例:例:例:ab&x/yab&x/yab&x/yab&x/y(ab)&(x/y)ab)&(x/y)ab)&(x/y)a=1|!ba=1|!ba=1|!ba=1|!b(a=1)|(!b)a=1)|(!b)a=1)|(!b)a=1)|(!b)二、逻辑表达式二、逻辑表达式二、逻辑表达式二、逻辑表达式逻辑表达式的值应该是逻辑表达式的值应该是逻辑表达式的值应该是逻辑表达式的值应该是“逻辑真逻辑真逻辑真逻辑真”或或或或“逻辑假逻辑假逻辑假逻辑假”。语言以数值语言以数值语言以数值语言以数值代表代表代表代表“真真真真”,以数值以数值以数值以数值代表代表代表代表“假假假假”;但参加运算的运算量可以是;
8、但参加运算的运算量可以是;但参加运算的运算量可以是;但参加运算的运算量可以是任何数值任何数值任何数值任何数值,进行判断时,进行判断时,进行判断时,进行判断时,非零值非零值非零值非零值代表代表代表代表“真真真真”,零值零值零值零值代表代表代表代表“假假假假”。若若若若a=100a=100a=100a=100,b=5b=5b=5b=5,则则则则!a a a a=?=?=?=?a&ba&ba&ba&b=?=?=?=?a|ba|ba|ba|b=?=?=?=?!a&b!a&b!a&b!a&b=?=?=?=?4&0|24&0|24&0|24&0|2=?=?=?=?a+b|ca+b|ca&0a&038&2|
9、58&2|5=-1&x=-1&x=-1&x=-1&x=1不能写为:不能写为:不能写为:不能写为:-1=-1=-1=-1=x=1x=1x=1xb)&(n=cd)(m=ab)&(n=cd)m=?n=?m=?n=?0 01 1注意:注意:第6页/共92页2023/3/267C语言运算符的“优先级口决”1 小括中括指向点,(),-,.)非反后来自加减;(!+-)负类指针有地址,(-,类型转换,*,&)长度唯一右在前.(sizeof,单目运算,从右至左)先乘除,再求余,(*,/,%)加减后,左右移,(+,-,)关系运算左为先.(,)等于还是不等于,(=,!=)按位运算与异或;(&,|)逻辑与,逻辑或,(
10、&,|)条件运算右至左.(?:)赋值运算虽然多,(=,+=,-=,*=,/=,%=,=,全体单目第二;/所有的单目运算符比如+-+(正)-(负)指针运算*&乘除余三,加减四;/这个“余”是指取余运算即%移位五,关系六;/移位运算符:,关系:=b,ab,则则a a b bS3:S3:输出a,ba,bC C语言单分支结构:语言单分支结构:if(if(表达式表达式)语句语句;第9页/共92页2023/3/2610if(if(if(if(表达式表达式表达式表达式)语句语句语句语句一般形式:表达式表达式语句语句真真(非非0)0)假假(0)(0)流程图:注意:此位置不注意:此位置不注意:此位置不注意:此位
11、置不使用分号使用分号使用分号使用分号“;”!第10页/共92页#includevoidmain()inta,b,temp;printf(Inputa,b:);scanf(%d%d,&a,&b);if(ab)/*判断a、b的关系*/temp=a;a=b;b=temp;/*a大于b,则交换a,b的值*/printf(“Resultis%d,%dn,a,b);/*按从小到大顺序输出*/例2.1的C语言程序如下:复合语句:复合语句:在同一个在同一个条件下作为一个整体条件下作为一个整体执行的多条语句执行的多条语句第11页/共92页例例2.22.2输入三个数输入三个数x1,x2,x3,x1,x2,x3,按
12、从小到大的顺序输出这三个数。按从小到大的顺序输出这三个数。#includevoidmain()intx1,x2,x3,temp;scanf(“%d%d%d”,&x1,&x2,&x3);if(x1x2)temp=x1;x1=x2;x2=temp;if(x1x3)temp=x1;x1=x3;x3=temp;if(x2x3)temp=x2;x2=x3;x3=temp;printf(“%d,%d,%d”,x1,x2,x3);输入输入a,b,ca,b,cab?ab?a ab bac?ac?bc?bc?a ac cb bc c输出输出a,b,ca,b,c是是是是是是否否否否否否输入:输入:3 5 13 5
13、 1输出:输出:1 1,3 3,5 5第12页/共92页2023/3/26132.2.2 双分支结构例2.32.3:输入两个整数,输出其中较大的一个。算法:算法:S1:S1:输入两个整数输入两个整数a,ba,bS2:S2:如果如果ab,ab,则输出则输出a a,否则输出b bC C语言单分支结构:语言单分支结构:if(if(表达式表达式)语句语句1;1;elseelse 语句语句2;2;第13页/共92页2023/3/2614一般形式:if(if(if(if(表达式表达式表达式表达式)语句语句语句语句1 1 1 1elseelseelseelse 语句语句语句语句2 2 2 2流程图:表达式表
14、达式语句语句2 2真真(非非0)0)假假(0)(0)语句语句1 1第14页/共92页2023/3/2615例例2.32.3输入两个整数,输出其中较大的一个。输入两个整数,输出其中较大的一个。N-SN-S流程图流程图输入输入x1,x2x1,x2x1x2x1x2Y YN N输出输出x1x1输出输出x2x2#includevoidmain()intx1,x2;scanf(“%d%d”,&x1,&x2);if(x1x2)printf(“%dn”,x1);elseprintf(“%dn”,x2);第15页/共92页2023/3/26172.2.3 多分支结构一、一、ifif语句嵌套语句嵌套一般形式:流程
15、图:if(if(if(if(表达式表达式表达式表达式1)1)1)1)语句语句语句语句1 1 1 1else if(else if(else if(else if(表达式表达式表达式表达式2)2)2)2)语句语句语句语句2 2 2 2 else if(else if(else if(else if(表达式表达式表达式表达式3)3)3)3)语句语句语句语句3 3 3 3 else if(else if(else if(else if(表达式表达式表达式表达式n)n)n)n)语句语句语句语句n n n n else else else else 语句语句语句语句n+1n+1n+1n+1表达式表达式1
16、 1语句语句2 2真真(非非0)0)假假(0)(0)语句语句1 1表达式表达式2 2真真(非非0)0)语句语句1 1语句语句2 2假假(0)(0)第17页/共92页关于关于关于关于if if语句的说明语句的说明语句的说明语句的说明:1 1 1 1、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在、表达式一般为关系表达式或逻辑表达式。但在C C C C语言语言语言语言中它也中它也中它也中它也可以是任意的数值表达式可以是任意的数值表达式可以是任意的数值表达式可以是任意的数值表达式。if(3)if(3)n=1;n=1;if(
17、a)if(a)printf(%d,a);printf(%d,a);if(n=3-3)if(n=3-3)x=1;x=1;elseelsex=-1;x=-1;2 2 2 2、表达式后面不能有任何标点符号表达式后面不能有任何标点符号表达式后面不能有任何标点符号表达式后面不能有任何标点符号!3 3 3 3、elseelseelseelse只能与只能与只能与只能与ifififif配对使用配对使用配对使用配对使用。仅。仅。仅。仅elseelseelseelse本身不能单独作为一个语本身不能单独作为一个语本身不能单独作为一个语本身不能单独作为一个语句使用。句使用。句使用。句使用。if (x5)if (x5)
18、;y=x;y=x;elseelse y=2*x-1;y=2*x-1;if (x5)if (x5);y=x;y=x;elseelse y=2*x-1;y=2*x-1;将出现语法错误将出现语法错误将出现语法错误将出现语法错误第18页/共92页2023/3/26194 4、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,、每个语句序列可以是一个语句也可以是若干个语句,但要但要但要但要用花括号括起来用花括号括起来用花括号括起来用花括号括起来构成复合语句构成复合语句构成复合语句构成复合语句。if(ab)t=a;
19、a=b;b=t;if(a+bc&b+ca&c+ab)s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%.2fn,area);elseprintf(Itisnotatrilateral!n);复合语句的复合语句的复合语句的复合语句的花括号后不能再写分号花括号后不能再写分号花括号后不能再写分号花括号后不能再写分号。复合语句。复合语句。复合语句。复合语句在语法上是一个整体,相当于一个语句。在语法上是一个整体,相当于一个语句。在语法上是一个整体,相当于一个语句。在语法上是一个整体,相当于一个语句。第19页/共92页2023/3/262
20、05 5 5 5、ifififif语句的嵌套语句的嵌套语句的嵌套语句的嵌套在在在在ifififif语句的原语句的原语句的原语句的原“语句语句语句语句”中又包含一个或多个中又包含一个或多个中又包含一个或多个中又包含一个或多个ifififif语句语句语句语句1.1.if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达式表达式2)2)语句语句语句语句2.2.if(if(表达式表达式表达式表达式1)1)语句语句语句语句1 1elseelse if(if(表达式表达式表达式表达式2)2)语句语句语句语句2 23.3.if(if(表达式件表达式件表达式件表达式件1)1)语句语句语句语句
21、1 1elseelse if(if(表达式表达式表达式表达式2)2)语句语句语句语句2 2elseelse语句语句语句语句3 34.4.if if(表达式表达式表达式表达式1)1)if if(表达式表达式表达式表达式2)2)语句语句语句语句1 1elseelse 语句语句语句语句2 2二义性?二义性?二义性?二义性?语言规定:语言规定:语言规定:语言规定:elseelse总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if if配对。配对。配对。配对。if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达
22、式表达式2)2)语句语句语句语句1 1elseelse语句语句语句语句2 2 if(if(表达式表达式表达式表达式1)1)if(if(表达式表达式表达式表达式2)2)语句语句语句语句11 elseelse 语句语句语句语句2 2第20页/共92页2023/3/2621例例2.42.4输入输入3 3个数,判断组成什么类型三角形个数,判断组成什么类型三角形if(a+b)c&(b+c)a&(a+c)b)if(a+b)c&(b+c)a&(a+c)b)if(if(a=b&b=ca=b&b=c)printf(“dengbian!n”);)printf(“dengbian!n”);elseif(a=b|b=
23、c|a=c)printf(“dengyao!n”);elseif(a=b|b=c|a=c)printf(“dengyao!n”);elseprintf(“budengbian!n”);elseprintf(“budengbian!n”);elseprintf(“Erro!n”);elseprintf(“Erro!n”);第21页/共92页2023/3/2622例例例例2.2.2.2.5 5 5 5 编程求解函数:编程求解函数:编程求解函数:编程求解函数:-1-1 0 0 1 1(x0)x0)(x0)y=y=程序1:if(x0)y=-1;elseif(x=0)y=0;elsey=1;y=-1y=
24、0y=1x0 x=0)if(x0)y=1;elsey=0;elsey=-1;y=-1y=0y=1x=0 x=0 x0 x0真假真假eg502.c第22页/共92页程序3:y=0;if(x!=0)if(x0)y=1;elsey=-1;y=y=0 0 0 0 x!=0 x!=0 x0 x0y=1y=-1真真假假-1-1 0 0 1 1(x0)x0)(x0)y=y=第23页/共92页2023/3/2624例:求一元二次方程ax2+bx+c=0的根,a,b,c由键盘输入。分析:对于一元二次方程有以下几种可能:a=0,不是二次方程;b2-4ac=0,有两个相等的实根;b2-4ac0,有两个不等的实根;b
25、2-4acb?(a=100):(b=100)ab?printf(“”%dn”,a):printf(“%dn”,b)(4)表达式1、表达式2和表达式3的类型都可以不同。表达式值的类型是表达式2、3中类型较高的类型。例如:xy?1:1.5表达式值是double类型(1)优先级高于赋值,低于关系运算符和算数运算符例:例:x=ab?a:b+1;x=(ab)?a:(b+1);ab?a:cd?c:dab?a:(cd?c:d)if(ab)x=a;elsex=b+1;第27页/共92页2023/3/2628例2.7:输入一个字符,如果是大写字母,转换为小写,如果不是不转换。最后输出。#includevoidm
26、ain()charch;scanf(“%c”,&ch);/*ch=getchar();*/ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c”,ch);/*putchar(ch);*/第28页/共92页2023/3/2629三、三、switchswitch(多分支)语句多分支)语句switchswitch结构与结构与结构与结构与elseifelseif结构是多分支选择的两种形式。结构是多分支选择的两种形式。结构是多分支选择的两种形式。结构是多分支选择的两种形式。elseifelseif:多条件并列测试,从中选一多条件并列测试,从中选一多条件并列测试,从中选一多条件并列测试
27、,从中选一switchswitch:单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行单条件测试,从多种结果中选取一种执行第29页/共92页2023/3/26301 1、格式:、格式:、格式:、格式:switch(表达式表达式)case常量表达式常量表达式1:语句组语句组1;break;case常量表达式常量表达式2:语句组语句组2;break;case常量表达式常量表达式n:语句组语句组n;break;default:语句语句组组n+12 2、功能:、功能:、功能:、功能:先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达
28、式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同先计算表达式的值,测试该值是否与某常量表达式的值相同、若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行若有相同者,流程转向其后面的语句执行、若无,再看有没有若无,再看有没有若无,再看有没有若无,再看有没有defaultdefault部分部分部分部分:若有若有若有若有defaultdefault,则执行其后面则执行其后面则执行其后面则执行其后面的语句;若无的语句;若无的语句;若无的语句;若无defaultdefault,则则则则switchsw
29、itch语句什么也不做,流程转向其后语句什么也不做,流程转向其后语句什么也不做,流程转向其后语句什么也不做,流程转向其后继语句。继语句。继语句。继语句。第30页/共92页说明:说明:说明:说明:1 1、switchswitch后面括号内的表达式可以是后面括号内的表达式可以是后面括号内的表达式可以是后面括号内的表达式可以是整型整型整型整型,也可以是,也可以是,也可以是,也可以是字符型字符型字符型字符型2 2、各个、各个、各个、各个casecase后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;后常量表达式的值必须互不相同;3 3、各个、各个、各个、各个c
30、asecase和和和和defaultdefault的出现次序不影响执行结果的出现次序不影响执行结果的出现次序不影响执行结果的出现次序不影响执行结果;4 4、casecase后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;后的语句为复合语句时可省略花括号;例:例:#include#includevoidmain()voidmain()intx,y;intx,y;scanf(“%d”,&x);/scanf(“%d”,&x);/输入输入2 2?switch(x)switch(x)case1:y=10;printf(%dn,y);case1:y=1
31、0;printf(%dn,y);case2:y=20;printf(%dn,y);case2:y=20;printf(%dn,y);case3:y=30;printf(%dn,y);case3:y=30;printf(%dn,y);default:y=0;printf(%dn,y);default:y=0;printf(%dn,y);5 5、casecase后常量后常量后常量后常量表达式只起语表达式只起语表达式只起语表达式只起语句标号的作用,句标号的作用,句标号的作用,句标号的作用,每个每个每个每个casecase之后通之后通之后通之后通常都有一个常都有一个常都有一个常都有一个breakbre
32、ak,使流程使流程使流程使流程跳出跳出跳出跳出switchswitch语句语句语句语句,否则流程转到否则流程转到否则流程转到否则流程转到下一个下一个下一个下一个case(default)case(default)中中中中继续执行;继续执行;继续执行;继续执行;第31页/共92页2023/3/26326 6、多个、多个、多个、多个casecase可以共用一组执行语句;可以共用一组执行语句;可以共用一组执行语句;可以共用一组执行语句;case6:case6:case7:printf(Resetn);break;case7:printf(Resetn);break;但不能写成:但不能写成:但不能写成
33、:但不能写成:casecase 6,76,7:printf(Resetn);break;:printf(Resetn);break;7 7、switchswitch语句可以嵌套;但有多层语句可以嵌套;但有多层语句可以嵌套;但有多层语句可以嵌套;但有多层switchswitch语句时,语句时,语句时,语句时,breakbreak只能退出本层的只能退出本层的只能退出本层的只能退出本层的switchswitch语句体;语句体;语句体;语句体;第32页/共92页2023/3/2633举例:举例:在学生成绩管理中,成绩经常要在百分制与等级制在学生成绩管理中,成绩经常要在百分制与等级制之间进行转换。之间进
34、行转换。9090分以上为分以上为A A等,等,80-8980-89为为B B等,等,70-7970-79为为C C等,等,60-6960-69分为分为D D等,其余为等,其余为E E等。编制程序,根据输入的百分制,等。编制程序,根据输入的百分制,输出对应的等级。输出对应的等级。void main()int score;printf(Input score of student:);scanf(%d,&score);if(score=90)printf(A);else if(score=80)printf(B);else if(score=70)printf(C);else if(score=6
35、0)printf(D);else printf(E);第33页/共92页2023/3/2634void main()int score,temp;printf(Input score of student:);scanf(%d,&score);temp=score/10;switch(temp)case 10:case 9:printf(A);break;case 8:printf(B);case 7:printf(C);break;case 6:printf(D);break;default:printf(E);break;第34页/共92页2023/3/2635简单选择界面的编程。从键盘输
36、入整数,输出不同的字符串:输入1,输出Good morning;输入2,输出Good afternoon;输入3,输出Good evening;输入4,输出Good night;输入其它数字,输出Bye-bye。第35页/共92页2023/3/2636问题2:编写程序计算:1+2+3+100。算法算法2.3 循环结构2.3.1 循环结构的引出第36页/共92页2023/3/2637问题问题2 2的算法:的算法:算法1:直接写出算式S1:result=1+2+3+4+5+100容易实现吗?容易实现吗?算法算法2 2:考考虑虑到到1+2+3+1001+2+3+100可可以以改改写写为为:(1+2)
37、+3)+100)(1+2)+3)+100)S1:p1=1+2S1:p1=1+2 S2:p2=p1+3 S2:p2=p1+3 S3:p3=p2+4 S3:p3=p2+4 S99:p99=p98+100 S99:p99=p98+100,结果在结果在p99p99里。里。定义定义9999个变量,个变量,容易实现吗?容易实现吗?注意观察:每注意观察:每一步都类似一步都类似第37页/共92页2023/3/2638算法算法3 3:S0:p=0,i=1S0:p=0,i=1 S1:p=p+i,i=i+1 S1:p=p+i,i=i+1 S2:p=p+i,i=i+1 S2:p=p+i,i=i+1 S3:p=p+i,
38、i=i+1 S3:p=p+i,i=i+1 S99:p=p+i,i=i+1 S99:p=p+i,i=i+1 S100:p=p+i,i=i+1S100:p=p+i,i=i+1完全一样的完全一样的9999步步算法算法4 4:S0:p=0,i=1S0:p=0,i=1(循环初值)循环初值)S1:p=p+i,i=i+1S1:p=p+i,i=i+1(循环体)循环体)S2:S2:i=100i=100,则则返返回回重重新新执执行行步步骤骤S1S1及及S2S2;否否则则,算算法法结结束束(循环控制)。(循环控制)。循环结构循环结构第38页/共92页2023/3/2639循环控制结构一般由四部分组成:、进入条件、退
39、出条件、循环体:循环体需要完成的功能(需要重复执行的语句)、循环变量的修正 根据进入条件和退出条件,循环控制结构可以分为三种形式:、while结构:退出条件是进入条件的反条件。即满足 条件时进入,重复执行循环体直到进入的条件不再满足为止。、do-while结构:无条件进入,执行一次循环体后再判断是否满足再进入循环的条件。、for结构:与while结构类似,但结构更紧凑。适用于循环之前循环次数就已经确定的情况。第39页/共92页2023/3/2640使用形式:while(表达式)语句;真(非0)表达式成立吗?语句假(0)特点:先判断表达式,后执行语句2.3.22.3.2 while while
40、语句语句第40页/共92页2023/3/2641例:求1+2+3+100 i=1,sum=0i=100sum=sum+ii=i+1假真i=1,sum=0当i=100sum=sum+ii=i+1第41页/共92页2023/3/2642void main()int i,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(“sum=%dn”,sum);注意:while起作用的范围注意:要有改变循环结束条件的语句第42页/共92页2023/3/2643void main()int i,n,sum;i=1;sum=0;while(i=n)sum=sum+i;i+;
41、printf(“sum=%dn”,sum);计算 1+2+3+n(n为任意正整数)scanf(%d,&n);思考问题:循环结束后循环变量的值是多少?第43页/共92页2023/3/2644void main()int i,n,sum;i=1;sum=0;while(i=n)sum=sum+i;i=i+2;printf(“sum=%dn”,sum);scanf(%d,&n);计算 1+3+5+7+n(n为奇数)第44页/共92页2023/3/2645例:输入一个字符,如果是大写字母,转换为小写,如果不例:输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输入是则不转换。输入“0 0”结
42、束程序。结束程序。#includevoidmain()charch;while(ch=getchar()!=0)ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c”,ch);第45页/共92页2023/3/26462.3.3 do-while 2.3.3 do-while 语句语句使用形式:do 循环体语句 while(表达式);特点:先执行循环体语句,后判断表达式循环体语句表达式0(假)非0(真)注意:、循环部分为多个语句时,必须用大括号构成复合语句;、循环体中应有使循环趋于结束的语句第46页/共92页2023/3/2647例:求1+2+3+100 sum=0i=1su
43、m=sum+ii=i+1i=100假真int i,sum;i=1;sum=0;do sum=sum+i;i+;while(i=100);printf(“%dn”,sum);void main()第47页/共92页2023/3/2648while 和 do-while 循环的比较(?不同之处)main()int sum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+i;i+;printf(“sum=%dn”,sum);main()int sum=0,i;scanf(“%d”,&i);do sum=sum+i;i+;while(i=10);printf(“sum=%d
44、n”,sum);第48页/共92页2023/3/26492.3.4for语句语句一般形式:forfor(表达式1;表达式2;表达式3)语句一般使用格式:for(循环变量赋初值;循环条件表达式;循环变量修正值)循环体;第49页/共92页2023/3/2650执行过程:(1)求解表达式1(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行(3)。若为假(值为0),则结束循环,转到(5)。(3)求解表达式3(4)转回执行(2)(5)循环结束,执行for语句下面的一个语句forfor(表达式1;表达式2;表达式3)语句第50页/共92页2023/3/2653for语句
45、的三个表达式都可以缺省,但两个分号不能缺省;如果在for语句之前已经给循环变量赋初值,则for语句的循环变量赋初值部分可以省略,但其后得分号不省略;也可以将循环变量修正值的工作纳入到循环体中去做;说明:i=1;for(;i=10;i+)m=m*i;如:for(i=1;i=10;)m=m*i;i+;如:也可以省略for语句的第一和第三部分;i=1;for(;i=10;)m=m*i;i+;如:for(;)但是注意不能两处同时修正值!第53页/共92页2023/3/2654通常不缺省表达式2;有时缺省表达式2,此时不判断循环条件,循环将无终止的执行,即认为表达式2始终为真;在循环体内用if和brea
46、k控制循环结束。for(i=1;i+)if(条件)break;sum=sum+i;如果有多个循环变量赋初值,或多个循环变量值要修正,应在各变量之间用逗号隔开。for(i=1,j=10;i=j;i+,j-)k=i+j;如:循环条件表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,每次系统判断该表达式的结果不为0,就执行一遍循环体。for(m=0;(c=getchar()!=!;)m=m+c;如:考虑问题:运行程序时如何停止循环?第54页/共92页2023/3/2655for、while、dowhile的互相转化i=1;sum=0;do sum=sum+i;i+;while(i
47、=100);for(i=1;i=100;i+)sum=sum+i;i=1;sum=0;while(i=100)sum=sum+i;i+;第55页/共92页2023/3/2656输出所有的水仙花数。(水仙花数就是一个三位数,这个数正好等于该数的每一位的立方和。例如:153=1*1*1+5*5*5+3*3*3)void main()for()a=i/100;c=i%10;第56页/共92页2023/3/2657补充:循环的嵌套补充:循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。while()while()for(;)for(;)do do
48、 while();while();while()for(;)for(;)do while();while()do while();第57页/共92页2023/3/2658例:输出如图所示的矩形:例:输出如图所示的矩形:*void main()printf(*n);printf(*n);printf(*n);printf(*n);void main()int i,j;i=1;while(i=4)while(j=5)printf(“*”);j+;j=1;printf(“n”);i+;第58页/共92页2023/3/2659#include void main()int i,j;i=1;while(
49、i=4)for(j=1;j=5;j+)putchar(*);putchar(n);i+;#include void main()int i,j;for(i=1;i=4;i+)for(j=1;j=5;j+)putchar(*);putchar(n);例:输出如图所示的矩形:例:输出如图所示的矩形:*内外层循内外层循环的循环环的循环控制变量控制变量不能重名不能重名第59页/共92页2023/3/2660例:输出如图所示的三角形:例:输出如图所示的三角形:*特点:第i行有i个星号#include void main()int i,j;for(i=1;i=4;i+)for(j=1;j+)putchar
50、(*);putchar(n);j=i第60页/共92页2023/3/2661例:输出如图所示的等腰三角形:例:输出如图所示的等腰三角形:*特点:一共有4行,第i行有2i-1个星号;第i行的第1个星号前有4-i个空格#include main()int i,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+)putchar(32);for(j=1;j=2*i-1;j+)putchar(*);putchar(n);第61页/共92页2023/3/2662例:输出如图所示的菱形:例:输出如图所示的菱形:*分析:将图形分为上下两部分分别输出!第62页/共92页2023/3/2663*f