1 / 28

选择结构程序设计

选择结构程序设计. 关系运算符和关系表达式 逻辑运算符和逻辑表达式 If 语句 Switch 语句 程序举例. 关系运算符和表达式 关系运算符 种类 : < <= == >= > != 结合方向:自左向右 优先级别:. 语言程序设计 选择结构程序设计. C. < <= > >= == !=. 优先级 6 (高). 优先级 7 (低). 例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==b<c //a==(b<c)

halima
Download Presentation

选择结构程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 选择结构程序设计 关系运算符和关系表达式 逻辑运算符和逻辑表达式 If语句 Switch语句 程序举例

  2. 关系运算符和表达式 关系运算符 种类:< <= == >= > != 结合方向:自左向右 优先级别: 语言程序设计 选择结构程序设计 C < <= > >= == != 优先级6(高) 优先级7(低) • 例 c>a+b //c>(a+b) • a>b!=c //(a>b)!=c • a==b<c //a==(b<c) • a=b>c //a=(b>c) • 关系表达式的值:是逻辑值“真”或“假”,用1和0表示 • 例 int a=3,b=2,c=1,d,f; • a>b • (a>b)==c • b+c<a • d=a>b • f=a>b>c //表达式值1 //表达式值1 //表达式值0 //d=1 //f=0 < >

  3. 语言程序设计 选择结构程序设计 C 例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为 0 例 5>2>7>8在C中是允许的, 值为 关系运算注意: 0 例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2 例 ‘a’>0 结果为 ‘A’>100 结果为 1 0 < >

  4. 语言程序设计 选择结构程序设计 C • 关系运算注意: 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6 0 例 注意区分“=”与“==” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);

  5. C 语言程序设计 选择结构程序设计 逻辑运算符和表达式 逻辑运算符 种类: ! && || 逻辑运算真值表 a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 • C语言中,运算量:0表示“假”, • 非0表示“真”, • 运算结果: 0表示“假”, • 1表示“真”, < >

  6. 语言程序设计 选择结构程序设计 C ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 例 a<=x && x<=b • a>b&&x>y • a==b||x==y • !a||a>b // (a<=x) && (x<=b) //(a>b)&&(x>y) //(a==b)||(x==y) //(!a)||(a>b) < >

  7. C 语言程序设计 选择结构程序设计 ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 例 a=4;b=5; • !a • a&&b • a||b • !a||b • 4&&0||2 • 5>3&&2||8<4-!0 • ‘c’&&‘d’ 值为0 值为1 值为1 值为1 值为1 //(5>3)&&2||(8<(4-(!0))) 值为1 值为1 < >

  8. 语言程序设计 选择结构程序设计 C ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) !算术运算符 关系运算符 &&和||赋值运算符 高 高 低 低 • 优先级: • 结合方向: • 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符 • 例 a&&b&&c //只在a为真时,才判别b的值; • 只在a、b都为真时,才判别 c的值 • 例 a||b||c //只在a为假时,才判别b的值; • 只在a、b都为假时,才判别 c的值 • 例 a=1;b=2;c=3;d=4;m=1;n=1; • (m=a>b)&&(n=c>d) //结果m=0,n=1 < >

  9. C 语言程序设计 选择结构程序设计 真 假 P P 真 假 A B A B k k=kn k=k1 k=ki k=k2 A1 A2 ... Ai ... An • 二分支选择结构 • 多分支选择结构

  10. 选择型程序设计 if语句(条件选择语句) if语句的三种形式 形式一: 格式:if (expression) statement 执行过程: 语言程序设计 选择结构程序设计 C =0 expr 非0 statement 非0 =0 expr statement1 statement2 例:if (x>y) printf(“%d”,x); • 形式二: • 格式:if (expression) • statement1 • else • statement2 • 执行过程: 例:if (x>y) max=x; else max=y;

  11. 形式三: 格式: 语言程序设计 选择结构程序设计 C =0 expr1 =0 非0 expr2 =0 非0 expr3 非0 statemnt1 statemnt2 statemnt3 statemntn if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 …... [ else statementn ] • 执行过程: 例:if (salary>1000) index=0.4; else if (salary>800) index=0.3; else if (salary>600) index=0.2; else if (salary>400) index=0.1; else index=0;

  12. 语言程序设计 选择结构程序设计 C • 说明: • if后面的表达式类型任意 • 语句可以是复合语句 • if(x)  if(x!=0) if(!x)  if(x==0) 如:if(a==b&&x==y) printf(“a=b,x=y”); if(3) printf(“OK”); if(‘a’) printf(“%d”,’a’); 例 考虑下面程序的输出结果: #include <stdio.h> main() { int x,y; scanf(“%d,%d”,&x,&y); if(x>y) x=y; y=x; else x++; y++; printf(“%d,%d\n”,x,y); } Compile Error!

  13. 语言程序设计 选择结构程序设计 C 例1 求一个数的绝对值 /*ch4_1.c*/ #include <stdio.h> main() { int x,y; printf("Enter an integer:"); scanf("%d",&x); y=x; if(y<0) y= -y; printf("\ninteger:%d--->absolute value:%d\n",x,y); } 运行:Enter an integer:-12 integer:-12--->absolute value :12

  14. 语言程序设计 选择结构程序设计 C 例2 输入两个实数,按代数值由小到大的次序输出这两个数。 #include <stdio.h> main() { float a,b,t; scanf(“%f,%f”,&a,&b ); if (a<b) {t=a;a=b;b=a;} printf(“%5.2f,%5.2f”,a,b); } 运行:3.6,-3.2 -3.20,3.60

  15. 语言程序设计 选择结构程序设计 C 例3 判断输入字符种类 #include <stdio.h> main() { char c; printf("Enter a character:"); c=getchar(); if(c<0x20) printf("The character is a control character\n"); else if(c>='0'&&c<='9') printf("The character is a digit\n"); else if(c>='A'&&c<='Z') printf("The character is a capital letter\n"); else if(c>='a'&&c<='z') printf("The character is a lower letter\n"); else printf("The character is other character\n"); } 运行:Enter a character:  The character is a control character 运行:Enter a character:8  The character is a digit 运行: Enter a character: D The character is a capital letter 运行: Enter a character: h The character is a lower letter 运行: Enter a character:F1  The character is other character

  16. 语言程序设计 选择结构程序设计 C if (expr1) if (expr2) 语句1 else 语句2 else if(expr3) 语句3 else 语句4 内嵌if 内嵌if if(……) if(……) if(……) else…... else…... else…... • if语句嵌套: • 一般形式: 缺省{ }时,else总是与它上面的最近的未配对的if配对。

  17. 语言程序设计 选择结构程序设计 C 例: if (a==b) if(b==c) printf(“a==b==c”); else printf(“a!=b”); 修改: if (a==b) { if(b==c) printf(“a==b==c”); } else printf(“a!=b”); 实现if ~ else 正确配对方法:加{ }

  18. 语言程序设计 选择结构程序设计 C 例 考虑下面程序输出结果: main() { int x=100,a=10,b=20; int v1=5,v2=0; if(a<b) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); } 结果:-1

  19. 语言程序设计 选择结构程序设计 C 方法一: 方法二: main( ) { int x, y; scanf( “%d”, &x ); if( x < 0 ) y = -1; else if( x == 0 ) y = 0; else y = 1; printf( “x = %d\ty = %d\n”, x. y ); } main( ) { int x, y; scanf( “%d”, &x ); if(x>=0) if(x>0) y=1; else y=0; else y=-1; printf( “x = %d\ty = %d\n”, x. y ); } 例4有一函数 编写一个程序,输入x输出y值。 运行:23 X=23,y=1

  20. C 语言程序设计 第二章数据描述 非0 =0 expr1 例 if (a>b) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,a>b?a:b); 取expr2值 取expr3值 条件运算符与表达式 • 一般形式: expr1 ? expr2 : expr3 • 执行过程 • 功能:相当于条件语句,但不能取代一般if语句 例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b); • 条件运算符可嵌套 • 如 x>0?1:(x<0?-1:0) • 优先级: 13 例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c • 结合方向:自右向左 • 如 a>b?a:c>d?c:d  a>b?a:(c>d?c:d) • expr1、expr2、expr3类型可不同,表达式值取较高的类型 例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 < >

  21. switch语句(开关分支语句) • 一般形式: 语言程序设计 第二章数据描述 C switch 表达式 case E 1 E 2 En default 语句组1 语句组2 语句组n 语句组 …... switch( 表达式) { case E1: 语句组 1; break; case E2: 语句组 2; break; ……. case En: 语句组 n; break; [default: 语句组 ; break;] } • 执行过程:

  22. 语言程序设计 第二章数据描述 C • 说明: • E1,E2,…En是常量表达式,且值必须互不相同 • 语句标号作用,必须用break跳出 • case后可包含多个可执行语句,且不必加{ } • switch可嵌套 • 多个case可共用一组执行语句 例 switch(score) { case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); } 如: …… case ‘A’: case ‘B’: case ‘C’: printf(“score>60\n”); break; …….. 运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!

  23. 语言程序设计 第二章数据描述 C 例 void main() { int x=1,y=0,a=0,b=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=1

  24. 语言程序设计 第二章数据描述 C 例 根据输入字母输出字符串 #include <stdio.h> main() { int c; printf("Enter m or n or h or other:"); c=getchar(); switch(c) { case 'm': printf("\nGood morning!\n");break; case 'n': printf("\nGood night!\n"); break; case 'h': printf("\nHello!\n"); break; default : printf("\n????????\n"); break; } }

  25. 语言程序设计 第二章数据描述 C 练习题 单项选择题1、if语句的控制条件——a.只能用关系表达式 b.只能用关系表达式或逻辑表达式 c.只能用逻辑表达式 d.可以用任何表达式2、以下程序的输出结果是——main(){float x=2,y; if (x<0) y=0; else if(x<5&&!x) y=1/(x+2); else if (x<10) y=1/x; else y=10;printf(“%f\n”,y);}a.0.000000 b.0.250000 c.0.500000 d.10.000000

  26. 语言程序设计 第二章数据描述 C 练习题 3、执行以下程序段后,a,b,c的值分别是——int a,b=100,c,x=10,y=9;a=(--x==y++)?--x:++y;if(x<9)b=x++;c=y;a.9,9,9 b.8,8,10 c.9,10,9 d.1,11,10 4、执行下列程序段后,x、y和z的值分别是——int x=10,y=20,z=30;if (x<y) z=x;x=y;y=z;a.10,20,30 b.20,30,30 c.20,30,10 d.20,30,20

  27. 语言程序设计 第二章数据描述 C 练习题 5、若a和b均是整型变量,以下正确的switch语句是——。a.switch(a/b) {case 1:case3.2:y=a+b;break; case 0;case 5:y=a-b; }b.switch(a*a+b*b); {case 3: case1:y=a+b;break; case0:y=b-a;break; }c.switch a{default:x=a+b; case 10:y=a-b;break; case 11:y=a*d;break; }d.switch(a+b){case 10:x=a+b;break; case 11:y=a-b;break; }

  28. 语言程序设计 第二章数据描述 C 练习题 分别用(1)简单if语句 (2)嵌套的if语句 (3)if_else语句 (4)switch语句 6、有一函数 7、编写程序,输入3个实数,判断他们是否能够构成三角形,若能够呈三角形,则输出三角形的类型(等边、等腰或一般三角形)。

More Related