选择程序设计_第1页
选择程序设计_第2页
选择程序设计_第3页
选择程序设计_第4页
选择程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、选择程序设计关系运算符和关系表达式逻辑运算符和逻辑表达式 if语句 switch语句程序举例1. 结构化程序设计任何程序都可以用三种基本结构表示优点:结构清晰,易读,提高程序设计质量和效率2. 三种基本结构顺序结构AB流程图程序的三种基本结构PAB真假 选择结构kA1A2AiAnk=k2k=k1k=knk=ki.程序的三种基本结构 循环结构PA假真AP真假程序的三种基本结构C语句: 以“;”作分隔符,编译后产生机器指令C语句分类表达式语句:表达式加分号构成。空语句: ;如: int a, b, c; a=3; a=1, b=3, a-b; 语句种类if( ) else switchfor( )

2、 while( ) do while( )continuebreakgotoreturn分支循环辅助控制程序控制语句(9种):复合语句:用 括起来的一组语句一般形式: 数据说明部分; 执行语句部分; 说明: 后不加分号语法上的地位 与 单一语句 相同复合语句还可 嵌套语句种类#include void main() int a=0,b=0; a+; b+; 选择结构 根据指定的条件是否满足, 决定是否执行语句(块)形式如果(那么我有了钱 )形式成绩为75分:如果(成绩大于等于60) 那么 打印“及格”算法int cj=75;if( ) prinf(“及格”);cj=60逻辑结果(真、假)如何表

3、示条件?关系运算符逻辑运算符关系运算符、=、 =、!=优先级相同且高于 = !=、!=(优先级相同)关系运算的结果为逻辑值1表示真,0表示假。89 为 04+5=9 为1= 是等于; =是赋值注意区分“=”与“= =”例: int a = 0,b = 1; if (a = b) printf(“a is equal to b”); else printf(“a is not equal to b”);b的值赋给a,只要b不为0,表达式的值为真逻辑运算符!:逻辑求反(单目运算)&:逻辑与(双目运算)|:逻辑或(双目运算)优先级! 高于 & 高于 | 逻辑运算结果真值表ab!a!ba&ba|b真假

4、真假假假真真真假假假假假真真假假真真真假真真关系与逻辑表达式数学表达式5x10如何表示? x5数学表达式y=10如何表示? y=10 | y=5510 xyyx和y如何表示?06085100 xy60=x=85 不行,应为:60=x & x=85(0=y&y=60 )|( 85=y&y9) 1 86 190|89 190|81 & 23 001 & 23 0运算量 : 0 表示“假”, 非0 表示“真”运算结果: 0 表示“假” , 1 表示“真”逻辑运算示例char c=b;int i = 3, j = 3;double x = 0.0;表达式等价表达式值x | i & j - 3a = c

5、 & c=zc 1=a | c + 1 = zx | (i & (j - 3) 0(a = c ) & (c =z) 1(c1)=a)| (c+1)=z) 1短路-值得注意的地方!在一个复杂的逻辑表达式,有的表达式可能没有被运算到,称为短路下面语句中,括号内的赋值语句 有没有被实际执行到? a=9; b=8; c=3;d=0;x = ab;y = ab | (c=d);1900年是闰年吗?闰年的条件能被4整除, 但不能被100整除能被100整除,又能被400整除 (year%4=0&year%100!=0)| ( year%400=0) 值为真(1)是闰年,否则为非闰年。分支(选择)语句if

6、() else switch() 格式: if (expression) statementexprstatement非0=01. if语句(条件选择语句)if语句的三种形式:形式一:执行过程:注意:若statement有几个语句,则用“”括起来。x=0)-1(x0)#include void main()int x, y; scanf(“%d”,&x);y=1;if(xb) t=a; a=b; b=t; printf(%5.2f,%5.2f,a,b);运行结果:例:输入两个实数,按代数值由小到大的次序输出这两个数。不要漏掉! 执行过程不同! if(ab) t=a;a=b;b=t; 形式二:

7、格式: if (expression) statement1 else statement2exprstatement1statement2非0=0执行过程:注意:若statement有几个语句,则用“”括起来。2. if语句(条件选择语句)y= 1 (x=0)-1(x=0y=1y=-1是否执行过程:#include void main()int x, y; scanf(“%d”,&x);if(x=0) y=1;else y=-1; printf(“%d”,y);条件运算符三目运算: d1 ? d2 : d3如果d1的值为1,整个表达式的值就是表达式d2的值;如果d1的值为0,整个表达式的值就

8、是d3的值例:int a=3, b=4,c;c=(a b ? a : b); 表达式的值为4使用条件运算符y= 1 (x=0)-1(x=0y=1y=-1是否执行过程:#include void main()int x, y; scanf(“%d”,&x);printf(“y=%d”, x=0?1:-1);#include void main()float a,b;scanf(%f,%f,&a,&b);if(ab) printf(%5.2f,%5.2f,b,a);else printf(%5.2f,%5.2f,a,b);例:输入两个实数,按代数值由小到大的次序输出这两个数。形式三:格式:if (

9、 expr1 ) statement1else if (expr2 ) statement2else if (expr3 ) statement3. else statement n expr1statement1非0=0expr2expr3statement nstatement3statement2非0非0=0=00.6 (number=1000)0.7 (800=number1000)0.8 (600=number800)0.9 (400=number600)1.0 (number1000) discount =0.6; else if(number800) discount =0.7;

10、 else if(number600) discount =0.8; else if(number400) discount =0.9; else discount =1.0; cost=discount * number; 例:计算物流公司的运费,可以根据数量打折。n1000d=0.6是否n800n600statement nstatement3d=0.7是是否否 if后面的表达式形式变化多(1) if(3) printf(“OK”);(2) if(a) printf(“%d”, a);(3) if (a%3) printf(“$”); else printf(“&”); 表示相等关系用“=

11、” (4) if (a=0) printf(“$”);(5) if(a=0) printf(“$”); ifelse else子句后不能跟条件例: 若有int a=6; if( a ) printf(“OK”);等价于 if( a != 0 ) printf(“OK”);等价于 if( !a = 0 ) printf(“OK”); if( !a ) printf(“OK”);等价于 if( a = 0 ) printf(“OK”);例: 若有int a=6; ifelse 的嵌套 !在多重分支(多重条件判断)时,可用ifelse的嵌套。 if (x0) y= 1; else if(x=0) y

12、=0; else y=-1; if (x0) y=1;else if (x=0) y=0; else y=-1; 嵌套:if()if()if()else.else.else.if (expr1) if (expr2) statement1else statement2 内嵌if如果if和else的数目不一样,可以加花括弧来确定配对关系。 if ( ) if( ) statement1 else statement2if else 配对原则:缺省 时,else总是它上面离它最近的未配对的if配对例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a

13、!=b”); 修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);实现if else 正确配对方法:加 例: 输入两数并判断其大小关系#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x,&y); if(x!=y) if(xy) printf(XYn); else printf(XYn); else printf(X=Yn);运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y#inclu

14、devoid main() int i,j; i=j=3; if(i3) printf(%dn,i+=+j); else printf(%dn,i-=-j); printf(%d,%dn,i,j);例 分析下列程序的输出结果#includevoid main() int i,j; i=j=3; if(i3) printf(%dn,i+=+j); else printf(%dn,i-=-j); printf(%d,%dn,i,j);运行结果:11, 2运行结果:3, 3有一函数 x (x1) y= 2x-1 (1=x=10)写一程序,输入x,输出y。#includevoid main() flo

15、at x,y; scanf(%f,&x); if(x1) y=x; else if (x10 ) y=2*x-1; else y=3*x-11; printf(x=%7.2f,y=%7.2f,x,y);switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; switch表达式语句组1语句组2语句组n语句组.E 1E 2Endefaultcase switch语句(开关分支语句)实现多分支的选择结构说明: E1,E2,En是常量表达式,且值必

16、须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且不必加 多个case可共用一组执行语句switch可嵌套switch语句例:输入AE表示的成绩的等级, 打印出相应的百分制分数范围, A表示85-100 , B表示 70-84,C表示60-69,D表示60以下;switch(grade) case A: printf(“85-100 “);break; case B: printf(“70-84 “); break; case C: printf(“60-69 “); break; case D: printf(“60 “); break; default :

17、printf(“error“);#includevoid main()char grade; sacnf(“%c”,&grade); if (grade= =A) printf(“85-100 “);else if (grade= =B) printf(“70-84 “);else if (grade= =C) printf(“60-69“);else if (grade= =D) printf(“60“);else printf(“error“);例:给出一百分制成绩,要求输出成绩等级:A,B,C,D,E。其中90分以上为A,8089分为B, 7079分为C, 6069分为D,60分以下为E

18、。 #includevoid main()int score; sacnf(“%d”,&score); switch( score/10 ) / switch( (int)(score/10) ) case 10: case 9: printf(“An”);break; case 8: printf(“Bn“); break; case 7: printf(“Cn“); break; case 6: printf(“Dn“); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“En“); break; default:

19、printf(“errorn“); 例: void main() int x,y,a=0,b=0; scanf(“%d,%d”,&x,&y); /输入:1,0 switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); 运行结果:a=2,b=1Switch的嵌套:作业:编写程序,用getchar()函数读入两个字符给c1、c2,然后分别用putchar()函数和printf()函数输出这两个字符。编

20、写程序,输入一个4位10进制数(各位数字中没有0),并把它各位按相反的顺序组成一个新的数字,并输出。(如输入1234,输出4321)有一函数 x (x1) y= 2x-1 (1=x=10) 写一程序,输入x,输出y。4. 编写程序,读入一个百分制成绩(如85),输出为成绩等级A,B,C,D,E。 其中90分以上为A,8090分为B, 7079分为C, 6069分为D,60分以下为E 。5. 输入一个年份,判断是否为闰年.6. 输入三个整数x,y,z,请把这三个数由小到大输出。作业(续):7.以下程序片段能否通过编译?能通过的代码,执行后的结果是什么?(1)int a=1,b=1,c=1;if

21、(a0)if (a2) b+=1; else c+=1;printf(”%d,%d,%d”,a,b,c);(2)int a=1,b=1,c=1;if (a0) if (a2) b+=1; else c+=1;printf(”%d,%d,%d”,a,b,c);作业(续):7.以下程序片段能否通过编译?能通过的代码,执行后的结果是什么?(3)int a=1,b=1,c=1;if (a0)if (a2) b+=1; else c+=1;printf(”%d,%d,%d”,a,b,c);(4)int a=1,b=1,c=1;if (a0)if (a2) b+=1; else c+=1;else a+=1;prin

温馨提示

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

最新文档

评论

0/150

提交评论