计算机C语言-第五章(附上机问题汇总).ppt

上传人:re****.1 文档编号:568516718 上传时间:2024-07-25 格式:PPT 页数:62 大小:272.50KB
返回 下载 相关 举报
计算机C语言-第五章(附上机问题汇总).ppt_第1页
第1页 / 共62页
计算机C语言-第五章(附上机问题汇总).ppt_第2页
第2页 / 共62页
计算机C语言-第五章(附上机问题汇总).ppt_第3页
第3页 / 共62页
计算机C语言-第五章(附上机问题汇总).ppt_第4页
第4页 / 共62页
计算机C语言-第五章(附上机问题汇总).ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《计算机C语言-第五章(附上机问题汇总).ppt》由会员分享,可在线阅读,更多相关《计算机C语言-第五章(附上机问题汇总).ppt(62页珍藏版)》请在金锄头文库上搜索。

1、答疑时间每周三下午2:30-5:30信息中心810自愿第第5章章 选择结构程序设计选择结构程序设计选择结构是三种基本结构之一,特点是:选择结构是三种基本结构之一,特点是:根据给定条件根据给定条件 :成立时执行一组操作,不成立时执行另一组操作。:成立时执行一组操作,不成立时执行另一组操作。C中选择结构利用中选择结构利用if语句实现。语句实现。5.1 关系运算符和关系表达式关系运算符和关系表达式 关系运算是比较运算,结果为逻辑值关系运算是比较运算,结果为逻辑值“真真”或或“假假”。(前已讨论算术、。(前已讨论算术、赋值、逗号。现讨论关系、逻辑表达式、条件,前两者的值域为真或假,即赋值、逗号。现讨论

2、关系、逻辑表达式、条件,前两者的值域为真或假,即1或或0)。)。5.1.1 关系运算符及其优先级关系运算符及其优先级 关系运算符有关系运算符有6种:种: 、 = :优先级为:优先级为6级级 = = 、!= :优先级为:优先级为7级级 结合性为从左到右结合性为从左到右关系运算符和其它运算符优先级的比较:关系运算符和其它运算符优先级的比较: 高高 逻辑运算符:逻辑运算符:! (2) 算术运算符:算术运算符:* 、/、%(3) +、- (4) 关系运算符:关系运算符: 、 =(6) = 、!=(7) 逻辑运算符:逻辑运算符:& (11) | (12) 低低 赋值运算符:赋值运算符:=、 +=、 -=

3、、 *=、 /=、 %=(14)由于存在优先级,因此下面表达式是等价的:由于存在优先级,因此下面表达式是等价的: a(a+b) aa+b(ab) !=c ab != ca=(bc) a= =bc) a=bc关系表达式关系表达式赋值表达式,赋值表达式,思考,和一般思考,和一般习惯有何不同习惯有何不同5.1.2关系表达式关系表达式关系表达式:用关系运算符将两个表达式(算术、关系、逻关系表达式:用关系运算符将两个表达式(算术、关系、逻辑、赋值、字符)连接起来的式子。辑、赋值、字符)连接起来的式子。 如:如:a b 、 a+b b+ c 、 (a=3) (b=5) a b) (c b 真真 a b =

4、 = c 真真 b + c b d的为的为1 f = a b c f 值为值为0思考:能否用一般意义的思考:能否用一般意义的2x b)&(xy)可写成可写成ab & xy (a=b) |(x=y) 可写成可写成a=b | x=y (!a) | (ab)可写成)可写成 !a | ab! a & b | xy & c5.2.2 逻辑表达式逻辑表达式 在逻辑表达式中参加运算的数据可以是常量、变量、表达式。在逻辑表达式中参加运算的数据可以是常量、变量、表达式。见见P89下及表下及表5.2例:例:T5-0-1.cmain( )int a= -5,i,j,k,l,m; float b=0.01; i= !

5、a;j=a & b; k= a | | b; l=(5 3 & 2 | | 84- !0); m= a 9 ; printf (“i=%d,j=%d,k=%d, l=%d, m=%dn”, i, j, k,l, m);运行结果:运行结果:i=0,j=1,k=1,l=1,m=0参加运算的数据参加运算的数据非非0值值 真真 0 假假逻辑运算的结果逻辑运算的结果真真 值为值为1假假 值为值为0在逻辑表达式求解过程中,所有逻辑运算符并不一定都被执在逻辑表达式求解过程中,所有逻辑运算符并不一定都被执行。只有在必须执行下一个逻辑运算符才能求出表达式的解行。只有在必须执行下一个逻辑运算符才能求出表达式的解时

6、,才执行该运算符。时,才执行该运算符。1.逻辑与运算符:逻辑与运算符: &如有逻辑表达式:如有逻辑表达式:a & b & c执行过程是:执行过程是:当当a为为0时,时,b和和c不用再判断了,不用再判断了,逻辑与运算符将不逻辑与运算符将不再执行,结果为再执行,结果为0,否则还要继续后边的运算。否则还要继续后边的运算。abc 0(假)假)非非0(真)真)0(假假)非非0(真)真)1(真)(真)0(假假)0(假假)2.逻辑或运算符:逻辑或运算符:| |如有逻辑表达式:如有逻辑表达式:a | | b | | c执行过程是:执行过程是:当当a为非为非0时,时,b和和c不用再判断了,逻辑或运算符将不不用再

7、判断了,逻辑或运算符将不再执行,其结果为再执行,其结果为1,否则继续执行后面的运算。,否则继续执行后面的运算。abc0非非0(真)真)非非0(真真)非非0(真真)0(假)(假)1(真真)0例:例:T5-0-2.cmain( )int a, b=0, c=0, d=0;scanf(“%d”,&a);d=a & (b=5) & (c=3);printf (“a=%d, b=%d, c=%d, d=%dn”, a, b, c, d); 1 a=1,b=5,c=3,d=1 0 a=0,b=0,c=0,d=0 输入:输入:输出:输出:例例T5-0-3.cmain( )int a,b=0,c=0,d=0;

8、 scanf(“ %d”,&a); d=a | | (b=5) | | (c=3) ; printf (“a=%d, b=%d, c=%d, d=%d, n”,a, b, c, d); 1 a=1,b=0,c=0,d=1 0 a=0,b=5,c=0,d=5 输入:输入:输出:输出:在在C中,巧妙地使用逻辑表达式,可以表示一个复杂的问题中,巧妙地使用逻辑表达式,可以表示一个复杂的问题如:关于闰年问题:符合下列条件之一,均为闰年。如:关于闰年问题:符合下列条件之一,均为闰年。(1)能被)能被4整除并且不能被整除并且不能被100整除整除(2)能被)能被4整除并且能被整除并且能被400整除整除其逻辑表

9、达式为:其逻辑表达式为:(year % 4 = =0 & year % 100 != 0) | | (year % 400 =0 & year % 4 = = 0)由于能被由于能被400 整除的年份一定能被整除的年份一定能被4 整除,所以可省去了后一整除,所以可省去了后一部分,即:部分,即:(year % 4 = =0 & year % 100 != 0) | | (year % 400 =0 )若判断非闰年,只在闰年表达式前加若判断非闰年,只在闰年表达式前加 !即:即: !(year % 4 = = 0 & year % 100 != 0) | | ( year % 400 = = 0) 5

10、.3 if 语句语句选择结构中使用的一种语句。选择结构中使用的一种语句。根据给定的条件判别是否满足,以决定执行哪种操作根据给定的条件判别是否满足,以决定执行哪种操作。5.3.1 if 语句的三种形式语句的三种形式1.第一种形式的条件语句第一种形式的条件语句if (表达式)表达式) 语句语句 表达式一般为逻辑或关系,表达式一般为逻辑或关系,先对其求值,先对其求值,根据结果决定下一步该如何执行,根据结果决定下一步该如何执行,但也可以是常量、变量但也可以是常量、变量、 各种表达式。各种表达式。其类型可以是整、实、字其类型可以是整、实、字符型符型。语句可以是一句或复合语句语句可以是一句或复合语句 .。

11、表达式表达式语句语句假假(0)真真(非非0)例例T5-0-4.cmain( )int x=0; float y=-5.6;if(x) printf (“x=%dn”,x);if(y) printf (“y=%fn”, y);if(0) printf(“ 0=%dn”, 0);if(xy) printf (“x-y=%fn”, x-y);if(y -100) x+;y+; printf(“x=%d, y=%fn”, x, y); 运行结果:运行结果: y= -5.6000000=48x- y=5.600000x=1, y=-4.6000002. 第二种形式的条件语句第二种形式的条件语句if(表达

12、式)表达式) 语句语句1 else 语句语句2例例T5-0-5.cmain( ) int x,y; printf (“please input x, yn”);scanf (“%d %d”,&x, &y);if(xy) printf (“x=%dn”,x);else printf (“y=%dn”,y);运行结果:运行结果:please input x,y 2 _ 5 输出:输出:y=5 34 _ 28 x=34 表达式表达式语句语句1语句语句2真真假假3. 第三种形式的条件语句第三种形式的条件语句 if(表达式表达式1) 语句语句1 else if(表达式表达式2) 语句语句2 else i

13、f(表达式表达式3) 语句语句3 else if(表达式表达式m) 语句语句m else 语句语句 n右图为:右图为:m=4n=5表达式表达式1假假真真表达式表达式2表达式表达式3表达式表达式4语句语句5语句语句4语句语句3语句语句2语句语句1真真真真真真假假假假假假例例: 商店售货按购物的款数分别给予不同的优惠折扣。商店售货按购物的款数分别给予不同的优惠折扣。 设变量:设变量:n:购物金额,购物金额, c:优惠折扣百分比,优惠折扣百分比, a:优惠后的实际款数优惠后的实际款数T5-0-6.cmain( )float n, c, a; scanf (“%f”, &n);if(n500) c=0

14、.15;else if(n300) c=0.10;else if(n100) c=0.075;else if(n50) c=0.05;else c=0;a=n* (1-c);printf (“a=%fn”, a);输入:输入: 输出:输出:800 680.000000480 432.000000200 185.00000080 76.00000030 30.000000说明:说明:1.执行执行if语句时,先判断表达式的值,为真时语句时,先判断表达式的值,为真时(非非0),执行其后,执行其后语句,为假语句,为假(0)时不执行其后的语句,表达式可以是常量、变时不执行其后的语句,表达式可以是常量、变

15、量、各种表达式。量、各种表达式。2.if的各内嵌语句用的各内嵌语句用“ ; ”号结束,但仍然是一个语句而非号结束,但仍然是一个语句而非2个。个。3.if和和else后面的内嵌语句若有多句,用后面的内嵌语句若有多句,用 括起构成复合语句。括起构成复合语句。例例T5-1.c 输入两个实数,按代数值由小到大输出。输入两个实数,按代数值由小到大输出。main( )float a, b, t; scanf(“%f, %f”, &a, &b);if(ab) t=a; a=b; b=t; (/*这里不用这里不用;*/)printf (“%5.2f, %5.2fn”,a,b); 输入:输入: 输出:输出:3.

16、6,-3.2 -3.20, 3.602.5,8.9 2.50, 8.90例例T5-2.c输入三个数,按从小到大的顺序输出(请同学们自己输入三个数,按从小到大的顺序输出(请同学们自己思考)思考)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); t a b c 7 5 37 5 7 35 3 7 57 3 5 7输入:输入: 输出

17、:输出:7,5,3 3.00,5.00,7.001,8,6 1.00,6.00,8.005.3.2 if 语句的嵌套语句的嵌套嵌套:在嵌套:在if语句中,又包含语句中,又包含1到多个到多个if 语句语句一般形式:一般形式: if( ) if( ) 语句语句1 else 语句语句2 else if( ) 语句语句3 else 语句语句4 条件成立时的内嵌语句条件成立时的内嵌语句条件不成立时的内嵌语句条件不成立时的内嵌语句总体上是哪种形式?总体上是哪种形式? 使用内嵌的使用内嵌的if语句时,应区分表面形式与实际对应关系语句时,应区分表面形式与实际对应关系如:如: if( ) if( ) 语句语句1

18、 else if( ) 语句语句2 else 语句语句3编程者希望把中间的编程者希望把中间的else与第一行的与第一行的if匹配,虽然书写上是对匹配,虽然书写上是对齐的,但编译系统并非如此执行齐的,但编译系统并非如此执行(总体上是形式几?几层嵌套总体上是形式几?几层嵌套?)。在在C语言中语言中,if与与else 的配对原则是:的配对原则是:从最内层开始,从最内层开始,else总是与它上面最近的,未曾配对的总是与它上面最近的,未曾配对的if配对配对。因此,上述问题在编译时的真正效果是:因此,上述问题在编译时的真正效果是:if( ) 等价于下述表示:等价于下述表示: 当条件成立时执行下面虚框中的当

19、条件成立时执行下面虚框中的内容内容 if( ) if ( ) 语句语句1 else if( ) 语句语句2 else 语句语句3是中间是中间else的子句的子句总体上是哪种形式?嵌套的是形式几?总体上是哪种形式?嵌套的是形式几?为了使程序清晰,不至出错,采取的方法是:为了使程序清晰,不至出错,采取的方法是:(1) 使内嵌的使内嵌的if也包含也包含else,如上面的问题可进行如下描述:如上面的问题可进行如下描述: if( ) if( ) else else if( ) else .(2) 若若if和和else数目不等,为实现设计者的企图,可用数目不等,为实现设计者的企图,可用 实现,如上述问题可

20、进行如下描述:实现,如上述问题可进行如下描述: if( ) if( ) 语句语句1 else if( ) 语句语句2 else 语句语句3如此一来,如此一来,else不是和复合语句匹配而不是和复合语句匹配而是与其前面的是与其前面的if匹配,总体上是哪种形式?去匹配,总体上是哪种形式?去掉掉后属于哪种形式?后属于哪种形式?有一符号函数有一符号函数 例例T5-3.cmain( )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); -1 (x0)用不同方法编程,判

21、正确与否(参考书上流程图)用不同方法编程,判正确与否(参考书上流程图)输入:输入: -1234 0 756 输出:输出:x= -1234, y= -1 x=0, y=0 x=756, y=1例例T5-3-1.cmain( )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); 输入:输入:12 -24 0 输出:输出:x=12, y=1 x= -24, y= -1 x= 0, y =0例例T5-3-2.cmain( )int x, y; scanf(%d”,&x);

22、y= -1;/* 0*/if(x !=0) if(x 0 ) y=1;else y=0; / *此此else 和谁匹配和谁匹配 ?-1*/printf(“x=%d, y=%dn”,x, y);怎么改?怎么改?输入:输入: 输出:输出:-5 x= -5, y=0 0 x=0, y= -1 8 x=8, y=1例例T5-3-3.c(请同学们自己思考)(请同学们自己思考)main( )int x, y; scanf(%d”,&x);y= 0; /*-1*/if(x =0) if(x 0 ) y=1;else y=-1; /*0*/ printf(“x=%d, y=%dn”,x, y);输入:输入:

23、输出:输出:-5 x= -5, y=00 x=0, y=-18 x=8, y=1 5.3.3 条件运算符条件运算符有时,在判断了有时,在判断了if后的表达式以后,都执行一个赋值后的表达式以后,都执行一个赋值表达式且给同一个变量赋值,如表达式且给同一个变量赋值,如max条件表达式的一般形式:条件表达式的一般形式:其中:其中: ? : 是条件运算符号是条件运算符号 ,是唯一的,是唯一的3目运算目运算符符max=(ab)?a:b;(表达式表达式1)?(表达式表达式2):(表达式表达式3)条件表达式的执行过程是:条件表达式的执行过程是: 真:求解表达式真:求解表达式2并作为整个表达式的值并作为整个表达

24、式的值 (3不执行不执行)计算表达式计算表达式1 假:求解表达式假:求解表达式3并作为整个表达式的值并作为整个表达式的值 (2不执行不执行)x=(ab)?a:b 当当 a=9,b=5时,时,x=9说明如下几点: max= a b ? a : b(思考:这是一个什么表(思考:这是一个什么表达式?)达式?)1.条件运算符?:的优先级为条件运算符?:的优先级为13级级 max=(a b) ? a : b max= a b ? a : b (=为为14级)级) max=a b ? a : (b+1) max=ab ? a: b+1 (+为为4级)级)总结:条件运算符的优先级总结:条件运算符的优先级 高

25、于赋值,低于其他高于赋值,低于其他2.条件运算符的结合方向:从右向左条件运算符的结合方向:从右向左如有表达式:如有表达式: a b ? a : c d ? c : da,b,c,d的取值如下:的取值如下: 表达式值表达式值如下如下 : a b c d 1 2 3 4 45 8 6 2 63 2 20 30 3 if ( y0 ) x=-y;elsex=y;(y0)?x=-y:x=y;等价等价等等价价x = (y b)printf(“%d”,a););else printf(“%d”,b)可写成)可写成 Printf(“%d”,a b?a:b););如:如:if(ab) c=a; else c=

26、b;c=ab ? a :b又如:又如:if(ab) c=a; else x=b;ab ? a :bc= x=条件运算要求有三个运算分量,并且不论条件是条件运算要求有三个运算分量,并且不论条件是否成立,都必须是为同一个变量赋值否成立,都必须是为同一个变量赋值再一个例子main( ) int a,b; scanf(“%d%d”,&a,&b); ab ? printf(“max=%dn”,a) : printf(“max=%dn”,b); 输入:输入:3 5 输出:输出:max=5友情提示:表达式友情提示:表达式2,3还可以是一个函数,表还可以是一个函数,表达式达式1一般为逻辑或关系,但也可以是其他

27、的,一般为逻辑或关系,但也可以是其他的,如算术,如将如算术,如将ab换成换成3总结一下if ( cans=1 )if ( cans=1 ) printf(printf(”YouYou need 1 can of paint. need 1 can of paint.”););elseelse printf(printf(”YouYou need 2 cans of paint. need 2 cans of paint. ”);); 条件运算符的形式比较条件运算符的形式比较简单,有较强的灵活性,简单,有较强的灵活性,可以替代部分可以替代部分if语句。语句。 转换:转换:(cans=1)? (c

28、ans=1)? printf(printf(”YouYou need 1 can of paint. need 1 can of paint.”) : ) : printf(printf(”YouYou need 2 cans of paint. need 2 cans of paint.”);); 转换:转换:printf(cansprintf(cans=1? =1? ”You need 1 can of paint.You need 1 can of paint.”: : ”You need 2 cans of paint.You need 2 cans of paint.”);); ma

29、in( ) int x=-1, y=5, z=6; printf (“%cn” , x ? a : b ); printf (“%f n”, y=A & ch =60n);break; default:printf(“grade60”);/*这这里可以不必加里可以不必加break*/各各casecase后如果有多个语句,可以不必加后如果有多个语句,可以不必加 ,当然,加上也可以当然,加上也可以casecase和和defaultdefault与其后面的常量表达式间至少有与其后面的常量表达式间至少有一个空格。一个空格。Switch能实现的结构用能实现的结构用if一定能实现,但反之未必一定能实现,但

30、反之未必switch语句可以嵌套,语句可以嵌套,break语句只跳出它所在的语句只跳出它所在的switch语句。语句。企企业业发发放放的的奖奖金金根根据据利利润润提提成成。从从键键盘盘输输入入当当月月利利润,求应发放奖金总数?润,求应发放奖金总数? 利润xx=1010x2020x4040x6060x1001000 :有两个不等的实根有两个不等的实根 b2 - 4ac 0 :有两个共轭复根有两个共轭复根 X1, 2=T5-6.c#inlude “math.h”main( )float a, b, c, disc, x1, x2, re, im; scanf(“%f, %f, %f”,&a,&b,

31、&c); printf (“The equation ”); if (fabs(a) =1e-6) printf (“is not quadratic”); goto loop; else disc=b*b-4*a*c; if(fabs(disc) 1e-6) x1=(-b+sqrt(disk)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4f and %8.4f n”,x1,x2); else re=-b/(2*a); im=sqrt(- disk)/(2*a); printf(“has complex

32、 roots: n”); printf(“%8.4f + %8.4fi n”, re, im); printf(“%8.4f - %8.4fi n”, re, im); loop:;输入输入:0, 2, 1 1, 2, 1 2, 6, 1 1, 2, 2 输出输出:The equation is not quadraticThe equation has two equal roots: - 1.0000The equation has distinct real roots: - 0.1771 and - 2 .8229The equation has complex roots:- 1.

33、0000 + 1 . 0000 i- 1 . 0000 - 1 . 0000 i例例T5-7.c 运输费的计算运输费的计算 设设: s: 距离距离 w: 货物重量货物重量 d: 折扣折扣 p: 基本运费基本运费 f: 总运费总运费 f=p*w*s*(1-d) s250km 没有折扣没有折扣 250=s500 2%折扣折扣 500 =s1000 5%折扣折扣 1000 =s2000 8%折扣折扣 2000 =s =3000 15%折扣折扣 T5-7.cmain( ) int c, s; float p, w, d, f; scanf(“%f,%f,%d”,&p, &w, &s);if(s =30

34、00) c=12;else c=s/250;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=15;break;f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”, f);C: 公里数公里数/250, 以确定表达式的值以确定表达式的值s: 距离距离p: 基本运费基本运费

35、w: 货物重量货物重量d: 折扣折扣总运费总运费f : p*w*s*(1-d)输入:输入:100, 20, 300 输出:输出:freight=_ _ _588000.0000 s250km 没有折扣没有折扣 250=s500 2%折扣折扣 500 =s1000 5%折扣折扣 1000 =s2000 8%折扣折扣 2000 =s3000 10%折折扣扣3000 c&a+cb&b+ca) if(a=b&b=c) printf(“这是个等边三角形这是个等边三角形n); else if(a=b|a=c|b=c) printf(“这是个等腰三角形这是个等腰三角形n); else printf(“这是个

36、一般三角形这是个一般三角形n); else printf(can notn); (回顾一下,这是第几类的(回顾一下,这是第几类的if语句?)语句?)课堂练习 程序填空程序填空: 以下程序判断输入的整数能否被以下程序判断输入的整数能否被3或或7整除整除.main()int x,f=0;scanf( “%d”,&x ); ( ) ( ) if(f=1) printf(“YESn”);else printf(“NOn”);家庭作业课后练习5.3-5.10上机以后的问题汇总1、复合语句后不需要再加;号了2、有同学提出幻灯P38,为何不做表达式3,还是会自动向高类型转换?main()int a,b=1;

37、a=1;1? a+:+b;printf(%d,%d,a,b);2 1/*可见确实是没做表达式3*/因为:类型转换是在编译的时候做的而非在运行时,只有运行再决定只做表达式几,而编译的时候是不知道最后到底做表达式几,而编译时有个很重要的工作就是要准备好空房间,所以只能尽量准备大房间,因此一定要低类型向高类型转换继续3、%e double型的依旧是指数占4列而非5列?4、|键 输入 在上面5、习题4.7 注意Aa之间不能空格,否则会将空格当成字符读入6、变量定义一定要在最前面都定义完,不能想用的时候就在程序当前位置定义7、printf(“%s”,”china/n”),字符串常量里也能加入转义字符8、问个问题问个问题(i+)+(i+) +(i+) ;3 3 3i+ ,i+ ,i+;3 4 5最后再来一个例子计算1+2+3+4+5 int sum=a=1,i=2; if i=2 sum=sum+i;i+;; if i=3 sum=sum+i;i+;;if i=4 sum=sum+i;i+;;if i=5 sum=sum+i;i+;;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号