1、测绘测绘C C语言程序设计语言程序设计章章2 一、关系运算符和关系表达式一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式三、三、 if语句语句四、四、 switch语句语句五、程序举例五、程序举例3 一、关系运算符和关系表达式一、关系运算符和关系表达式在现实生活中在现实生活中如果你在家,我去拜访你如果你在家,我去拜访你如果考试不及格,要补考如果考试不及格,要补考如果遇到红灯,要停车等待如果遇到红灯,要停车等待周末我们去郊游周末我们去郊游70岁以上的老年人,入公园免票岁以上的老年人,入公园免票p处理这些问题,关键在于进处理这些问题,关键在于进行条件判断行条件判断p由
2、于程序处理问题的需要,由于程序处理问题的需要,在大多数程序中都会包含选择在大多数程序中都会包含选择结构,需要在进行下一个操作结构,需要在进行下一个操作之前先进行条件判断之前先进行条件判断4 一、关系运算符和关系表达式一、关系运算符和关系表达式例 求ax2+bx+c=0方程的根。 输入输入a,b,c计算计算discdisc0计算计算x1,x2输出无实根输出无实根输出输出x1,x2真真假假5 一、关系运算符和关系表达式一、关系运算符和关系表达式1、关系运算符及其优先级、关系运算符及其优先级优先级相同优先级相同 (高高):(小于小于)=(小于或等于小于或等于)(大于大于)=(大于或等于大于或等于)优
3、先级相同优先级相同 (低低):= = (等于等于)!=(不等于不等于)说明:说明: 关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符 关系运算符的优先级高于赋值运算符关系运算符的优先级高于赋值运算符 ca+b 等效于等效于 c(a+b)ab=c 等效于等效于 (ab)=ca=bc 等效于等效于 a=(bc 等效于等效于 a=(bc)6 一、关系运算符和关系表达式一、关系运算符和关系表达式2、关系表达式、关系表达式用关系运算符将两个表达式用关系运算符将两个表达式(可以是算术表达式或可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符关系表达式,逻辑表达式,赋值表达式,字符表
4、达式表达式)连接起来的式子连接起来的式子关系表达式的值是一个逻辑值,即关系表达式的值是一个逻辑值,即“真真”或或“假假”在在C的逻辑运算中,以的逻辑运算中,以“”代表代表“真真”,以,以“”代表代表“假假”C语言中没有语言中没有专用的逻辑值专用的逻辑值 ab,a+bb+c,(a=3)(b=5),ab)(bb的值为的值为“真真”,表达式,表达式的值为的值为1p对字符比较对字符比较:比较其比较其ASCIIp不可比较字符串不可比较字符串7二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级、逻辑运算符及其优先级3种逻辑运算符:种逻辑运算符:& (逻辑与逻辑与) 相当于其他语言
5、中的相当于其他语言中的AND| (逻辑或逻辑或) 相当于其他语言中的相当于其他语言中的OR! (逻辑非逻辑非) 相当于其他语言中的相当于其他语言中的NOTa&b 若若a,b为真,则为真,则a&b为真。为真。a|b 若若a,b之一为真,则之一为真,则a|b为真。为真。!a 若若a为真,则为真,则!a为假。为假。双目双目(元元)运算符运算符一目一目(元元)运算符运算符8二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级、逻辑运算符及其优先级3种逻辑运算符:种逻辑运算符:9二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级、逻辑运算符及其优先级逻辑
6、运算符优先级:逻辑运算符优先级:!(非非) &(与与) | (或或)逻辑运算符中的逻辑运算符中的“&”和和“|”低于低于关系运算符,关系运算符,“!”高于算术运算符高于算术运算符(ab) & (xy) 可写成可写成ab & xy (a=b)|(x=y) 可写成可写成a=b|x=y (!a)|(ab) 可写成可写成 !a|ab10二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式2、逻辑表达式、逻辑表达式逻辑表达式逻辑表达式: 用逻辑运算符将关系表达式或逻辑量连用逻辑运算符将关系表达式或逻辑量连接起来的式子接起来的式子逻辑表达式的值应该是一个逻辑量逻辑表达式的值应该是一个逻辑量“真真”(1)或
7、或“假假”(0)设设a=4,b=5:!a的值为的值为 a&b的的值为值为a|b的值为的值为 !a|b的的值为值为4&0|2的值为的值为p在判断一个量是否为在判断一个量是否为“真真”时,以时,以0代表代表“假假”,以非,以非0代表代表“真真”。0111111二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式2、逻辑表达式、逻辑表达式在一个表达式中不同位置上出现数值,应区分哪些是在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运作为数值运算或关系运算的对象,哪些作为逻辑运算的对象。算的对象。53&84-!01&0逻辑值为逻辑值为083逻辑值为逻辑值为1表达
8、式值为表达式值为012二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式2、逻辑表达式、逻辑表达式13二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式2、逻辑表达式、逻辑表达式在逻辑表达式的求解中,并不是所有的逻辑运算符都在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行要被执行 a&b&c 只有只有a为真时,才需要判断为真时,才需要判断b的值,只有的值,只有a和和b都为真时,才需要判断都为真时,才需要判断c的值。的值。 a|b|c 只要只要a为真,就不必判断为真,就不必判断b和和c的值,只有的值,只有a为假,为假,才判断才判断b。a和和b都为假才判断都为假才判断c设设: a=1,b
9、=2,c=3,d=4,m=1,n=1(m=ab)&(n=cd)说明:说明: 由于由于ab的值为的值为0,因此,因此m=0,而,而n=cd不被执行,因此不被执行,因此n的值不是的值不是0而仍保而仍保持原值持原值1。14二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式2、逻辑表达式、逻辑表达式例 用逻辑表达式来表示闰年的条件。 分析:闰年条件分析:闰年条件能被能被4整除,但不能被整除,但不能被100整除。整除。能被能被4整除,又能被整除,又能被400整除。整除。(year%4=0&year%100!=0)|year%400=0 !(year4=0 & year100!=0)|year400=0
10、) 如果表达式值为如果表达式值为1,则闰年;,则闰年;否则为非闰年否则为非闰年 如果表达式值为如果表达式值为1,则非闰年;,则非闰年;否则为闰年否则为闰年 (year4!=0)|(year100=0 & year400!=0) 如果表达式值为如果表达式值为1,则非闰年;,则非闰年;否则为闰年否则为闰年 15三、三、 if语句语句1、 if语句的三种形式语句的三种形式if(表达式表达式)语句语句if(表达式表达式) 语句语句1 else 语句语句2if(表达式表达式1) 语句语句1 else if(表达式表达式2) 语句语句2 else if(表达式表达式3)语句语句3 else if(表达式表
11、达式m)语句语句m else语句语句np关系表达式关系表达式p逻辑表达式逻辑表达式p数值表达式数值表达式if(a=b & x=y) printf(“a=b, x=y”)if(3) printf(K);if(a)printf(d, a)p整个整个if语句可写在多行上语句可写在多行上,也可写也可写在一行上在一行上 ,但都是一个整体,属于但都是一个整体,属于同一个语句同一个语句16三、三、 if语句语句1、 if语句的三种形式语句的三种形式if(表达式表达式)语句语句if(表达式表达式) 语句语句1 else 语句语句2if(xy) printf(“d”, x);if (xy) printf(d,
12、x);else printf(d, y);17三、三、 if语句语句1、 if语句的三种形式语句的三种形式if(表达式表达式1) 语句语句1 else if(表达式表达式2) 语句语句2 else if(表达式表达式3)语句语句3 else if(表达式表达式m)语句语句m else语句语句np“语句语句1”“语句语句m”是是if中的内嵌中的内嵌语句语句, 内嵌语句也可以是一个内嵌语句也可以是一个if语句语句18三、三、 if语句语句1、 if语句的三种形式语句的三种形式if(number500)cost=0.15;else if(number300)cost=0.10;else if(num
13、ber100)cost=0.075;else if(number50)cost=0.05;else cost=0;if (number 500) cost = 0.15;else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost = 0;19三、三、 if语句语句1、 if语句的三种形式语句的三种形式在在if和和else后面可以只含一个内嵌的操作语句,也可以后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号有多个操作
14、语句,此时用花括号“”将几个语将几个语句括起来成为一个复合语句句括起来成为一个复合语句if(abc & bca & cab) s=0.5*(a+b+c); area=sqrt(S*(S-a)*(S-b)*(S-c); printf(area=6.2f,area);else printf(It is not a trilateral);20三、三、 if语句语句例5.1 输入两个实数,按代数值由小到大的次序输出这两个数。 AB互换前AB互换后分析:分析:只需要做一次比较,然后进行一次只需要做一次比较,然后进行一次交换即可交换即可用用if语句实现条件判断语句实现条件判断关键是怎样实现两个变量值的互
15、换关键是怎样实现两个变量值的互换21三、三、 if语句语句例5.1 输入两个实数,按代数值由小到大的次序输出这两个数。 分析:分析:只需要做一次比较,然后进行一次只需要做一次比较,然后进行一次交换即可交换即可用用if语句实现条件判断语句实现条件判断关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换ABC22三、三、 if语句语句例5.1 输入两个实数,按代数值由小到大的次序输出这两个数。 分析:分析:只需要做一次比较,然后进行一次只需要做一次比较,然后进行一次交换即可交换即可用用if语句实现条件判断语句实现条件判断关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换ABC23
16、三、三、 if语句语句例5.1 输入两个实数,按代数值由小到大的次序输出这两个数。 分析:分析:只需要做一次比较,然后进行一次只需要做一次比较,然后进行一次交换即可交换即可用用if语句实现条件判断语句实现条件判断关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换ABC24三、三、 if语句语句例5.1 输入两个实数,按代数值由小到大的次序输出这两个数。#includevoid main() float a, b, t; scanf(“%f,%f,&a,&b); if(ab) t=a; a=b; b=t; printf(“%5.2f, %5.2f“, a, b); 说明:说明:if(a
17、b): 判断两数大小,选择结构,判断两数大小,选择结构,用用if语句实现的语句实现的t=a; a=b; b=t;:将将a和和b的值互换的值互换25三、三、 if语句语句例5.2输入3个数a,b,c,要求按由小到大的顺序输出。#include int main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); return 0; 分析:分析:if ab,a和和b对
18、换对换 (a是是a、b中的小者)中的小者)if ac,a和和c对换对换 (a是三者中最小者)是三者中最小者)if bc,b和和c对换对换 (b是三者中次小者)是三者中次小者)顺序输出顺序输出a,b,c26三、三、 if语句语句2、 if语句的嵌套语句的嵌套在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套if() if()语句语句1 else 语句语句2else if()语句语句3 else 语句语句4 p 注意注意if与与else的配对关系的配对关系p else总是与它上面的最近的未配总是与它上面的最近的未配对对if配对配对if() if()语句
19、语句1else if()语句语句2else 语句语句3内内嵌嵌if内内嵌嵌if内内嵌嵌if分析:分析:第一个第一个else是与第二个是与第二个if配对配对最好使内嵌最好使内嵌if语句也包含语句也包含else部分,这样部分,这样if的数目和的数目和else的数目相同的数目相同,从内层到从内层到外层一一对应外层一一对应,不致出错。不致出错。如果如果if与与else的数目不一样的数目不一样, 加花括弧来加花括弧来确定配对关系确定配对关系27三、三、 if语句语句2、例5.3有一函数:编一程序, 输入一个x值,输出y值。#include void main() int x,y; scanf(%d,&x
20、); if(x0) y=-1; if(x=0) y=0;if(x0) y=1; printf(x=%d,y=%dn, x, y); 分析:分析: 输入输入x若若 x 0 y = 1;输出输出y1 (0)0 (0)1 (0)xxx 28三、三、 if语句语句2、例5.3有一函数:编一程序, 输入一个x值,输出y值。#include void main() int x,y; scanf(d,&x); if(x0) y=-1; else if(x=0) y=0;else y=1; printf(x=d,y=dn,x,y); 分析:分析:输入输入x若若 x 0 y = 1;输出输出y1 (0)0 (0
21、)1 (0)xxx 29三、三、 if语句语句2、例5.3有一函数:编一程序, 输入一个x值,输出y值。#include void main() int x,y; scanf(d,&x); if(x=0) if(x0) y=1; else y=0 else y=-1; printf(x=d,y=dn,x,y); 1 (0)0 (0)1 (0)xxx 30三、三、 if语句语句2、例5.3有一函数:编一程序, 输入一个x值,输出y值。#include void main() int x,y; scanf(d,&x); y=-1; if(x!=0) if(x0)y=1; else y=0; pri
22、ntf(x=d,y=dn,x,y); 1 (0)0 (0)1 (0)xxx if(x0)y=1;31三、三、 if语句语句3、 条件运算符条件运算符若若if语句中,在表达式为语句中,在表达式为“真真”和和“假假”时,且都只时,且都只执行一个赋值语句给同一个变量赋值时,可以用简执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理单的条件运算符来处理三目三目(元元)运算符,运算符, C语言中唯一的一个三目运算符语言中唯一的一个三目运算符if (ab) max=a;else max=b;max=(ab)? a: b;表达式表达式1? 表达式表达式2: 表达式表达式3p 数值表达式数值表达
23、式p 赋值表达式赋值表达式p 函数表达式函数表达式32三、三、 if语句语句3、 条件运算符条件运算符优先级和结合性优先级和结合性:条件运算符优先于赋值运算符条件运算符优先于赋值运算符条件运算符的优先级别比关系运算符和算术运算符都条件运算符的优先级别比关系运算符和算术运算符都低低条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”max=(ab)? a: bmax=ab? a: bab?a:b+1ab?a:(b+1)(ab?a:b)+133三、三、 if语句语句3、 条件运算符条件运算符条件表达式中,表达式条件表达式中,表达式1的类型可以与表达式的类型可以与表达式2和表达和表达式式
24、3的类型不同的类型不同例5.4 用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换。#include void main() char ch; scanf(%c,&ch); ch=(ch=A & ch=Z )?(ch+32):ch; printf(%cn,ch); 34四、四、 switch语句语句学生成绩分类学生成绩分类85分以上为分以上为 A等等7084分为分为 B等等6069分为分为 C等等人口统计分类人口统计分类 : 按年龄分为老、中、青、少、儿童按年龄分为老、中、青、少、儿童35四、四、 switch语句语句Switch语句语句:多分支选择语句多分支选择语句switch语
25、句的作用是根据表达式的值,使流程跳转到不语句的作用是根据表达式的值,使流程跳转到不同的语句同的语句执行完一个执行完一个case后面的语句后,流程控制转移到下一后面的语句后,流程控制转移到下一个个case继续执行继续执行switch(表达式表达式) case常量表达式常量表达式1: 语句语句1 case常量表达式常量表达式2: 语句语句2 case常量表达式常量表达式n: 语句语句n default : 语句语句n+1 p 整型整型p 字符型字符型p 枚举型枚举型不能相同不能相同36四、四、 switch语句语句Switch语句语句:多分支选择语句多分支选择语句break语句语句:在执行一个在执
26、行一个case分支后,使流程跳出分支后,使流程跳出switch结构,终止结构,终止switch语句的执行语句的执行多个多个case可以共用一组执行语句可以共用一组执行语句casea:caseb:casec:printf(60n);break;37四、四、 switch语句语句switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(Enter data error!
27、n);值为值为A38四、四、 switch语句语句switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(Enter data error!n);值为值为C39四、四、 switch语句语句switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(
28、6069n);break; case D: printf(60n);break; default: printf(Enter data error!n);值为值为F40四、四、 switch语句语句switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(Enter data error!n);值为值为A851007084606960Enter data error
29、!41五、程序举例五、程序举例例5.5 判断某一年是否闰年。#include void main()int year,leap; printf(enter year:); scanf(%d,&year); if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n);标志变量标志变量与与if (leap!=0)含
30、义相同含义相同采取锯齿形式采取锯齿形式if(year%4!=0) leap=0;else if (year%100!=0) leap=1;else if(year%400!=0) leap=0;else leap=1;if(year%4=0 & year%100!=0) | (year%400=0) leap=1;else leap=0;42五、程序举例五、程序举例例5.6 求ax2+bx+c=0 方程的解。#include #include void main() float a, b, c, disc, x1, x2, realpart, imagpart; scanf(“%f,%f,%f
31、, &a, &b, &c); printf(The equation ); if(fabs(a)0 ,有两个不等实根,有两个不等实根; b2-4ac0 ,有两个共轭复根,有两个共轭复根; 应当以应当以p+qi和和p-qi的形式输出的形式输出复根复根:其中其中, p=-b/2a,q=( )/2a2|4|bac实型不能用实型不能用if (a=0)43五、程序举例五、程序举例 else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(has distinct rea
32、l roots:%8.4f and %8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has complex roots:n); printf(%8.4f+%8.4fin, realpart, imagpart); printf(%8.4f-%8.4fin, realpart, imagpart); 先算先算disc,以减少重复计算,以减少重复计算不能用不能用if (disc=0)44五、程序举例五、程序举例例5.7 运输公司对用户计算运输费用。分析:分析: 标准如下标准如下: s 250 没有
33、折扣没有折扣250s 500 2%折扣折扣500s 1000 5%折扣折扣1000s 2000 8%折扣折扣2000s 3000 10%折扣折扣3000s 15%折扣折扣 解题思路解题思路:(1)设每吨每千米货物的基本运费为设每吨每千米货物的基本运费为p,货物重为,货物重为w,距离为,距离为s,折,折扣为扣为d(2)总运费总运费f的计算公式为的计算公式为f=pws(1-d)45五、程序举例五、程序举例例5.7 运输公司对用户计算运输费用。分析:分析: 折扣的变化规律(参见教材图折扣的变化规律(参见教材图5.15) : 折扣的折扣的“变化点变化点”都是都是250的倍数的倍数 在横轴上加一种坐标在
34、横轴上加一种坐标c,c的值为的值为s/250, c代表代表250的倍数的倍数当当c1时,表示时,表示s250,无折扣,无折扣当当1c2时,表示时,表示250s500,折扣,折扣d=2 %当当2c4时,时,d=5 % 当当4c8时,时,d=8 %当当8c12时,时,d=10 % 当当c12时,时,d=15%46五、程序举例五、程序举例#include void main() int c, s; float p,w,d,f; printf(Please enter price, weight, distance:); scanf(%f,%f,%d,&p,&w,&s); if(s=3000) c=1
35、2; else c=s/250; 说明:说明: int c, s: 将将c和和s定义为定义为整型,保证整型,保证c的值为的值为整数整数 if(s=3000) c=12: 保证保证c不随不随s的增大而增大的增大而增大47五、程序举例五、程序举例switch(c) case 0: d=0; break; case 1: d=2; break; case 2: case 3: d=5; break; case 4: case 5: case 6: case 7: d=8; break; case 8: case 9: case 10: case 11: d=10; break; case 12: d
36、=15; break; f = p * w * s * (1 - d / 100.0); printf(freight=%15.2fn,f); 当当c1时,时, d=0 %当当1c2时,时,d=2 %当当2c4时,时,d=5 % 当当4c8时,时,d=8 %当当8c12时,时,d=10% 当当c12时,时,d=15%48补充补充: 这不是这不是Bug, 而是语言特性而是语言特性 Bugs are by far the largest and most successful class of entity, with nearly a million known species. In this
37、 respect they outnumber all the other known creatures about four to one. Professor Snopes Encyclopedia of Animal life Bug是迄今为止地球上最庞大最成功的实体类型,有近百万种已知的是迄今为止地球上最庞大最成功的实体类型,有近百万种已知的品种。在这个方面,它比其他任何已知的生物种类的总和还要多,而且至品种。在这个方面,它比其他任何已知的生物种类的总和还要多,而且至少多出少多出4倍。倍。摘自摘自Snope教授的教授的Encyclopedia of Animal life49补充补充
38、: 这不是这不是Bug, 而是语言特性而是语言特性50习题 5.6#include main() main() float score; char grade; printf(请输入学生成绩:); scanf(%f,&score); while(score100|score0) printf(n输入有误,请重新输入:); scanf(%f,&score); switch(int)(score/10) case 10: case 9: grade=A;break; case 8: grade=B;break; case 7: grade=C;break; case 6: grade=D;brea
39、k; case 5: case 4: case 3: case 2: case 1: case 0: grade=E; printf(成绩是成绩是%5.1f,相应的等级是,相应的等级是%c。n,score,grade); 习题 5.7#include main() long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/ printf(请输入一个整数(099999):); scanf(%ld,&num); if (num9999) place=5; else if(num
40、999) place=4; else if(num99) place=3; else if(num9) place=2; else place=1; printf(place =%dn, place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) case 5: printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv); printf(n反序数字为;);
41、 printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf(%d,%d,%d,%d,thousand,hundred,ten,indiv); printf(n反序数字为:反序数字为:); printf(%d%d%d%dn,indiv,ten,hundred,thousand); break; case 3: printf(%d,%d,%d,hundred,ten,indiv); printf(n反序数字为:反序数字为:); printf(%d%d%dn,indiv,ten,hundred
42、); break; case 2: printf(%d,%d,ten,indiv); printf(n反序数字为:反序数字为:); printf(%d%dn,indiv,ten); break; case 1: printf(%d,indiv); printf(n反序数字为:反序数字为:); printf(%dn,indiv); break; 测绘测绘C C语言程序设计语言程序设计第六章第六章55 一、概述一、概述二、用二、用while语句实现循环语句实现循环三、用三、用dowhile语句实现循环语句实现循环四、用四、用for 语句实现循环语句实现循环五、循环的嵌套五、循环的嵌套六、几种循环的
43、比较六、几种循环的比较七、七、break语句和语句和continue语句语句八、程序举例八、程序举例56 一、概述一、概述在现实生活中或是在程序所处理的问题中常常遇到需要重在现实生活中或是在程序所处理的问题中常常遇到需要重复处理的问题复处理的问题要向计算机输入测绘要向计算机输入测绘C程序设计课程程序设计课程61个学生的成绩个学生的成绩分别统计测绘分别统计测绘1301、1302、地信、地信1301班的平均成绩班的平均成绩教师检查教师检查84个学生的成绩是否及格个学生的成绩是否及格大多数的应用程序都会包含循环结构大多数的应用程序都会包含循环结构循环结构和顺序结构、选择结构是结构化程序设计的三种循环
44、结构和顺序结构、选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元基本结构,它们是各种复杂程序的基本构造单元57 一、概述一、概述用用goto语句和语句和if语句构成循环语句构成循环用用while语句语句用用dowhile语句语句用用for语句语句58二、用二、用while语句实现循环语句实现循环while语句的一般形式如下语句的一般形式如下while循环的特点是:先判断条件表达式,后执行循环的特点是:先判断条件表达式,后执行循环体语句循环体语句while (表达式表达式) 语句语句“真真”时执行循环体语句时执行循环体语句“假假”时不执行时不执行59二、用二、用while
45、语句实现循环语句实现循环例6.2 求 。 分析:分析:这是累加问题,需要先后将这是累加问题,需要先后将100个数相加个数相加要重复要重复99次加法运算,可用循环次加法运算,可用循环实现实现后一个数是前一个数加后一个数是前一个数加1而得而得加完上一个数加完上一个数i后,使后,使i加加1可得到可得到下一个数下一个数1001nn60二、用二、用while语句实现循环语句实现循环例6.2#include void main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); 说明:说明:循环体如果包含一个以上的语循环体如
46、果包含一个以上的语句,应该用花括弧括起来,句,应该用花括弧括起来,以复合语句形式出现。如果以复合语句形式出现。如果不加花括弧,则不加花括弧,则while语句的语句的范围只到范围只到while后面第一个分后面第一个分号处。号处。在循环体中应有使循环趋向于在循环体中应有使循环趋向于结束的语句。结束的语句。不能少不能少复合语句复合语句不能丢,否则循不能丢,否则循环永不结束环永不结束61三、用三、用dowhile语句实现循环语句实现循环do-while语句的一般形式为:语句的一般形式为:dowhile语句的特点语句的特点:先无条件地执行循环体,然先无条件地执行循环体,然后判断循环条件是否成立后判断循环
47、条件是否成立do 语语句句while (表达式表达式);表达式表达式YN循环体语句循环体语句62三、用三、用dowhile语句实现循环语句实现循环例6.3用dowhile语句求 。 1001nni 100YNsum=sum+ii=i+1sum=0i=1 i=1; sum=0; do sum=sum+i; i+; while(i=100); 63三、用三、用dowhile语句实现循环语句实现循环例6.3用dowhile语句求 。#include void main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(sum=%dn,su
48、m); 1001nn说明:说明:对同一个问题可以用对同一个问题可以用while语句语句处理,也可以用处理,也可以用dowhile语语句处理。句处理。 dowhile语句结语句结构可以转换成构可以转换成while结构。结构。64例6.4 while和dowhile循环的比较。 #include void main()int i, sum=0;printf(“i=?”);scanf(“%d”,&i);while(i=10) sum=sum+i; i+;printf(“sum=%dn,sum);#include void main()int i, sum=0;printf(“i=?”);scanf(
49、“%d”,&i);do sum=sum+i; i+;while(i=10);printf(“sum=%dn,sum);i=?1sum=55 i=? 11sum=0 i=?1sum=55 i=? 11sum=11 当当while后面的表达式的第一次的值后面的表达式的第一次的值为为“真真”时,两种循环得到的结果相时,两种循环得到的结果相同;否则不相同同;否则不相同65四、用四、用for 语句实现循环语句实现循环for语句不仅可以用于循环次数已经确定的情况,语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束还可以用于循环次数不确定而只给出循环结束条件的情况条件的情况fo
50、r语句完全可以代替语句完全可以代替while语句语句for语句的一般形式为:语句的一般形式为: for(表达式表达式1;表达式表达式2;表达表达式式3) 语句语句设置初始条件,只执行一设置初始条件,只执行一次。可以为零个、一个或次。可以为零个、一个或多个变量设置初值执行多个变量设置初值执行循环条件表达式,用来判定是否继续循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环表达式,决定是否继续执行循环作为循环的调整器,例如作为循环的调整器,例如使循环变量增值,它是在使循环变量增值,它是在执行完循环体后才进行的执行完循环体后才