计算机C语言—第五章(附上机问题汇总).ppt_第1页
计算机C语言—第五章(附上机问题汇总).ppt_第2页
计算机C语言—第五章(附上机问题汇总).ppt_第3页
计算机C语言—第五章(附上机问题汇总).ppt_第4页
计算机C语言—第五章(附上机问题汇总).ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

答疑时间 每周三下午2:30-5:30 信息中心810 自愿 第5章 选择结构程序设计 选择结构是三种基本结构之一,特点是: 根据给定条件 :成立时执行一组操作,不成立时执行另一组操作。 C中选择结构利用if语句实现。 5.1 关系运算符和关系表达式 关系运算是比较运算,结果为逻辑值“真”或“假”。(前已讨论算术、赋值 、逗号。现讨论关系、逻辑表达式、条件,前两者的值域为真或假,即1或0 )。 5.1.1 关系运算符及其优先级 关系运算符有6种: 、 = :优先级为6级 = = 、!= :优先级为7级 结合性为从左到右 关系运算符和其它运算符优先级的比较: 高 逻辑运算符:! (2) 算术运算符:* 、/、%(3) +、- (4) 关系运算符:、 =(6) = 、!=(7) 逻辑运算符: scanf(“%d”, d=a 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.c main( ) int a,b=0,c=0,d=0; scanf(“ %d”, 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整除 其逻辑表达式为: (year % 4 = =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.600000 0=48 x- y=5.600000 x=1, y=-4.600000 2. 第二种形式的条件语句 if(表达式) 语句1 else 语句2 例T5-0-5.c main( ) int x,y; printf (“please input x, yn”); scanf (“%d %d”, 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 if(表达式3) 语句3 else if(表达式m) 语句m else 语句 n 右图为: m=4 n=5 表达式1 假 真 表达式2 表达式3 表达式4 语句5语句4语句3语句2语句1 真 真 真 假 假 假 例: 商店售货按购物的款数分别给予不同的优惠折扣。 设变量:n:购物金额, c:优惠折扣百分比, a:优惠后的实际款数 T5-0-6.c main( ) float n, c, a; scanf (“%f”, if(n500) c=0.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.000000 480 432.000000 200 185.000000 80 76.000000 30 30.000000 说明: 1.执行if语句时,先判断表达式的值,为真时(非0),执行其后 语句,为假(0)时不执行其后的语句,表达式可以是常量、变量 、各种表达式。 2.if的各内嵌语句用“ ; ”号结束,但仍然是一个语句而非2个。 3.if和else后面的内嵌语句若有多句,用 括起构成复合语句 。 例T5-1.c 输入两个实数,按代数值由小到大输出。 main( ) float a, b, t; scanf(“%f, %f”, if(ab) t=a; a=b; b=t; (/*这里不用;*/) printf (“%5.2f, %5.2fn”,a,b); 输入: 输出: 3.6,-3.2 -3.20, 3.60 2.5,8.9 2.50, 8.90 例T5-2.c输入三个数,按从小到大的顺序输出(请同学们自己 思考) main( ) float a, b, c, t; scanf(“%f, %f, %f”, 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 3 7 5 7 3 5 3 7 5 67 3 5 7 输入: 输出: 7,5,3 3.00,5.00,7.00 1,8,6 1.00,6.00,8.00 5.3.2 if 语句的嵌套 嵌套:在if语句中,又包含1到多个if 语句 一般形式: if( ) if( ) 语句1 else 语句2 else if( ) 语句3 else 语句4 条件成立时的内嵌语句 条件不成立时的内嵌语句 总体上是哪种形式? 使用内嵌的if语句时,应区分表面形式与实际对应关系 如: if( ) if( ) 语句1 else if( ) 语句2 else 语句3 编程者希望把中间的else与第一行的if匹配,虽然书写上是对 齐的,但编译系统并非如此执行(总体上是形式几?几层嵌套 ?)。 在C语言中,if与else 的配对原则是: 从最内层开始,else总是与它上面最近的,未曾配对的if 配对。因此,上述问题在编译时的真正效果是: if( ) 等价于下述表示: 当条件成立时执行下面虚框中的 内容 if( ) if ( ) 语句1 else if( ) 语句2 else 语句3 是中间else的子句 总体上是哪种形式?嵌套的是形式几? 为了使程序清晰,不至出错,采取的方法是: (1) 使内嵌的if也包含else,如上面的问题可进行如下描述 : if( ) if( ) else else if( ) else . (2) 若if和else数目不等,为实现设计者的企图,可用 实现,如上述问题可进行如下描述: if( ) if( ) 语句1 else if( ) 语句2 else 语句3 如此一来,else不是和复合语句匹配而 是与其前面的if匹配,总体上是哪种形式?去 掉后属于哪种形式? 有一符号函数 例T5-3.c main( ) int x, y; scanf(“%d”, if(x0) 用不同方法编程,判正确与否(参考书上流程图) 输入: -1234 0 756 输出:x= -1234, y= -1 x=0, y=0 x=756, y=1 例T5-3-1.c main( ) int x, y; scanf(“%d”, 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.c main( ) int x, y; scanf(%d”, 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”, y= 0; /*-1*/ if(x =0) if(x 0 ) y=1; else y=-1; /*0*/ printf(“x=%d, y=%dn”,x, y); 输入: 输出: -5 x= -5, y=0 0 x=0, y=-1 8 x=8, y=1 5.3.3 条件运算符 有时,在判断了if后的表达式以后,都执行一个赋值 表达式且给同一个变量赋值,如max 条件表达式的一般形式: 其中: ? : 是条件运算符号 ,是唯一的3目运算 符 max=(ab)?a:b; (表达式1)?(表达式2):(表达式3) 条件表达式的执行过程是: 真:求解表达式2并作为整个表达式的值 (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级) 总结:条件运算符的优先级 高于赋值,低于其他 2.条件运算符的结合方向:从右向左 如有表达式: a b ? a : c d ? c : d a,b,c,d的取值如下: 表达式值 如下 : a b c d 1 2 3 4 4 5 8 6 2 6 3 2 20 30 3 if ( y b)printf(“%d”,a);else printf(“%d”,b )可写成 Printf(“%d”,a b?a:b); 如:if(ab) c=a; else c=b; c=ab ? a :b 又如:if(ab) c=a; else x=b; ab ? a :b c= x= 条件运算要求有三个运算分量,并且不论条件是 否成立,都必须是为同一个变量赋值 再一个例子 main( ) int a,b; scanf(“%d%d”, ab ? printf(“max=%dn”,a) : printf(“max=%dn”,b); 输入:3 5 输出:max=5 友情提示:表达式2,3还可以是一个函数,表 达式1一般为逻辑或关系,但也可以是其他的, 如算术,如将ab换成3 总结一下 if ( cans=1 ) printf(”You need 1 can of paint.”); else printf(”You need 2 cans of paint. ”); 条件运算符的形式比较 简单,有较强的灵活性, 可以替代部分if语句。 转换:(cans=1)? printf(”You need 1 can of paint.”) : printf(”You need 2 cans of paint.”); 转换:printf(cans=1? ”You need 1 can of paint.”: ”You need 2 cans of paint.”); main( ) int x=-1, y=5, z=6; printf (“%cn” , x ? a : b ); printf (“%f n”, y=A break; default:printf(“grade0 :有两个不等的实根 b2 - 4ac1e-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 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 quadratic The equation has two equal roots: - 1.0000 The equation has distinct real roots: - 0.1771 and - 2 .8229 The equation has complex roots: - 1. 0000 + 1 . 0000 i - 1 . 0000 - 1 . 0000 i 例T5-7.c 运输费的计算 设: s: 距离 w: 货物重量 d: 折扣 p: 基本运费 f: 总运费 f=p*w*s*(1-d) s =3000 15%折扣 T5-7.c main( ) int c, s; float p, w, d, f; scanf(“%f,%f,%d”, if(s =3000) 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: 基本运费 w: 货物重量 d: 折扣 总运费f : p*w*s*(1-d) 输入: 100, 20, 300 输出: freight=_ _ _588000.0000 sc else if(a=b|a=c|b=c) printf(“这是个等腰三角形n“); else printf(“这是个一般三角形n“); else printf(“can notn“); (回顾一下,这是第几类的if语句?) 课堂练习 程序填空: 以下程序判断输入的整数能否被3或7整除.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论