C语言程序设计4第5章选择结构.ppt_第1页
C语言程序设计4第5章选择结构.ppt_第2页
C语言程序设计4第5章选择结构.ppt_第3页
C语言程序设计4第5章选择结构.ppt_第4页
C语言程序设计4第5章选择结构.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第5章 选择结构程序设计 Program Design of The Selection Type Structure 5.1 关系运算符和关系表达式 Relation Operators and Expressions 6 种关系运算符: (小于less than) (小于或等于) (大于larger than) (大于或等于) (等于equal to) ! (不等于not equal to) 结合性:自左向右 一、关系运算符及其优先次序 优先级相同(高) 优先级相同(低) 5.1 关系运算符和关系表达式 一、关系运算符及其优先次序 与其它运算符优先级的比较: 算术运算符 关系运算符 赋值运算符 (高) (低) 例如: c=da+b 等效于:c=(d(a+b) 1. 什么是关系表达式? 二、关系表达式 如:(ab)(by ,s+fd 2. 关系表达式的值 运算结果逻辑值 1或非零“真” ,0“假” 如: 设 a=3, b=2, c=1 求下面关系表达式 的值 : cb (a-b) = = 1 b+ca+b 2. if (表达式) 语句1 else 语句2 如: if (xy) z=x ; else z=y ; 执行过程:当表达式的值为“真” (非零)时,执行 语句1,否则,执行语句2。 如:if (grade=85) level=A; else if (grade=70) level=B; else if (grade=60) level=C; else level=D; 3. if (表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 : else if(表达式n) 语句n else 语句n+1 if 语句说明: if和else if后面的表达式一般为逻辑表达式或关 系表达式,也可以是任意数值类型表达式。 该语句是合法的:if(3.0) printf(“ok!”); if 语句中的“语句”为一个简单语句或复合语句。如 :下面哪个程序段有错? if (x=0) printf(“X= %dn”,x); printf(“X is positive.n”); else printf(“X= %dn”,x); printf(“X is negative.”); if (x=0) printf(“X= %dn”,x); printf(“X is positive.n”); else printf(“X= %dn”,x); printf(“X is negative.”); 二、if 语句的嵌套 在 if 语句中又包含一个或多个if 语句,称为 if 语句的嵌套。 一般形式: if (条件1) if (条件2)语句1 else 语句2 else if (条件3)语句3 else 语句4 内嵌if 内嵌if 如: if(x0) if(y0) printf(“x0,y0“); else printf(“x0,y0) printf(“x0“); else printf(“x=18) if (n=18) if (n=18) if (n main() int x; scanf(“%d”, if (x0) printf(“X is positive.”); x=x+1; else printf (“X is negative.”); 缩进 缩进 缩进 三、用if 语句实现选择结构举例 -1 ;x0 main( ) int x,y; scanf(“%d“, if(x0) y=1; printf(“x=%d y=%d“,x,y); 例:任意输入三个不相等的数,将其按 由小到大的顺序输出。 main() float a,b,c,t; scanf(“%f%f%f”, if(ab) t=a;a=b;b=t;/结果ac) t=a;a=c;c=t;/结果ac) t=b;b=c;c=t;/结果b=18) printf(“adult”); If(profession=“armyman”) printf(“PLA”); 四、条件运算符和条件表达式 条件表达式的一般形式: 表达式1 ? 表达式2表达式3 如:if (ab) max=a; else max=b; 若 a=3, b=8, 则 max=? 如: (ab) ? a : b 等效于:max= (ab) ? a : b ; 表达式2(表达式1为真) 条件表达式 = 表达式3(表达式1为假) C中唯一的三目运算符。目的简化 if 语句。 条件运算符的优先级: 算术运算符=关系运算符=逻辑运算符(除!) 逗号运算符c scanf(“%c“, ch=(ch=a max=(tc) ? t : c ; printf(“max=%dn“,max); 例:输入3个数,把其中最大的数输出 max=(ab) ? a : b ; max=(maxc) ? max : c ; max=a; max=(maxb) ? max : b ; max=(maxc) ? max : c ; 5.4 switch 语句 一般形式: switch(表达式) case 常量表达式1:语句序列1 break; case 常量表达式2:语句序列2 break; : case 常量表达式n:语句序列n break; default :语句序列n+1 / default缺省 执行过程: 例: char grade; switch(grade) case A : printf(“85100 ”); case B : printf(“7084 ”); case C: printf(“6069 ”); case D :printf(“关系运算符=逻辑运算符(除!) 赋值运算符=200) printf(“ Admittedn”); else if(T=180,M1=60,M2=60 不使用采用复合运算表达式,重写上述程序段。 修改一 If (T=200) printf(“ Admittedn”); else if(T=180) if(M1=60) if(M2=60) printf(“ Admittedn”); else printf(“ Not admittedn”); else printf(“ Not admittedn”); else printf(“ Not admittedn”); 原程序段 If (T=180 else printf(“ Not admittedn”); 例5.7 已知基本运费、货重,以及路程(s)和折扣的关 系标准如下: s=3000) c=12; else c= s / 250; /* 按250分类 */ switch( c )c case 0: d=0 ; break ; /* s=3000) d=15; else if (s=2000 scanf(“%f,%f,%f”, printf(“The equation ”); if(fabs(a)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); 打印实根(略); else realpart=-b/(2*a); imagpart=sqrt(- disc)/(2*a); printf(“has complex roots:n”) ; 打印虚根(略); if(fabs(a)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); 打印实根(略); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“has complex roots:n”) ; 打印虚根(略); 习题5.7 给一个不多于5位的正整数,要求:求出它是几 位数;按逆序打印出各位数字,例如原数为12345, 应输出54321 。 #include main() long int num; int n1,n2,n3,n4,n5,bits; scanf(“%ld”, if (num9999) bits=5; else if (num999) bits=4; else if(num99) bits=3; else if(num9) bits=2; else bits=1; printf(“bits=%dn”,bits); n5=num/10000; n4= (num-n5*10000)/1000; n3=(num- n5*10000- n4*1000)/100; n2=(num- n5*10000- n4*1000- n3*100)/10; n1=num-n5*10000-n4*1000-n3*100- n2*10; switch(bits) case 5:printf(“Reverse bits is: %d,%d,%d,%d,%dn”, n1,n2,n3,n4, n5); break; case 4:printf(“Reverse bits is: %d,%d,%d,%dn”, n1,n2,n3,n4); break; case 3: printf(“Reverse bits is: %d,%d,%dn”, n1,n2,n3); break; case 2: printf(“Reverse bits is:%d,%dn”, n1,n2); break; case 1: printf(“Reverse bits is: %dn”, n1); 运行情况 : 12345Input bits=5 Reverse bit is: 5,4,3,2,1 Output #include main() long int num; int n1,n2,n3,n4,n5,n5,bits=5,flag=0; scanf(“%ld”, n0=num/10000; n1=(num-=n0*10000)/1000; n2=(num-=n1*1000)/100; n3=(num-=n2*100)/10; n4=(num-=n3*10); for(i=0;i=, 5-4 一家时装屋贴出了如下的季节性打折通知。写一个程 序,计算并打印出打折前后顾客购买该商品花费的比 较,分别给出几种小于500元的商品价格进行测试。 购衣金额(元)折扣 成衣(Mill cloth)手工艺品(Handloom items) 0100 101200 201300 300 0 5% 7.5% 10% 5% 7.5% 10% 15% 可以使用以下语句标识顾客所购的是成衣还是手工艺品: int key; printf(“The cloth type which custmer is to purchase is:n”); printf(“1Mill cloth;n”); printf(“2Handloom items.n”); scanf(“%d”, 以下各题自己对答案,有问题咨询老师 5-5 判断对错 a)如果格式说明符的长度比实际数值的长度大,该数值将被右对齐打印。 b)格式说明%5s 只会给出要打印字符串的头五个字符。 c)表达式!(xy意义相同。 d)在进行表达式混合运算时,隐形转换是自动进行的。 e)用于从键盘接受一个字符的标准C函数是getchar。 f)scanf 函数不能用于从键盘读入单个字符。 g)printf 语句中的打印表列(变量表列)可以包含函数调用。 h)对于嵌套的if语句,最后的else与距离最近的且没有与其它else匹配的if 配对。 i)switch 语句总是可以用一系列ifelse语句取代。 j)一个if可以与多个else匹配。 k)swich语句中,任何case 分支只能有一条可执行语句。 5-6 填空 a)格式说明_用于整形数的读和写。 b)printf (“%2d %c %4.2f“,1234,x,1.234);的输出是_ _。 c)假设 int count=1275; float price=235.74; printf (“%2dn%f”, count, price); 的输出是_ _。 d)printf (“%8.4s”,”Cambridge”); 的输出是_ 。 e)必须当两个操作数均为“真”时,关系运算符_的运算结果为“真”。 f)当程序在switch语句中遇到_时,会立刻从该结构中退出。 g)为使数据左对齐打印,必须在格式说明中使用符号_。 h)!(x!=y) 可以用_代替。 i)使用(? :)的条件表达式在用于_语句时,会使得编程简单。 5-7 找出下列程序段中的错误,如果有的话。 (a) If(x+y=z (b) If(code1); a=b+c else a=0 (c) If (p0) x=x+1; y=y-1; printf(“ %d %d”,x,y); 5-9 不使用逻辑运算符,重写下列程序段。 (a) if(grade=50) second=second+1; (b) if(number100 | number5)(d) !(x10 a)switch(y); b)case 10; c)switch(x+y) d)switch(x) case 2: y=x+y; break ; 5-5 判断对错 a)True b)False c)True d)True e)True f)False g)True h)True i)True j)False k)False a)%d,或%i b)1234 x 1.23 c)1275 235.74

温馨提示

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

评论

0/150

提交评论