280 likes | 427 Views
选择结构程序设计. 关系运算符和关系表达式 逻辑运算符和逻辑表达式 If 语句 Switch 语句 程序举例. 关系运算符和表达式 关系运算符 种类 : < <= == >= > != 结合方向:自左向右 优先级别:. 语言程序设计 选择结构程序设计. C. < <= > >= == !=. 优先级 6 (高). 优先级 7 (低). 例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==b<c //a==(b<c)
E N D
选择结构程序设计 关系运算符和关系表达式 逻辑运算符和逻辑表达式 If语句 Switch语句 程序举例
关系运算符和表达式 关系运算符 种类:< <= == >= > != 结合方向:自左向右 优先级别: 语言程序设计 选择结构程序设计 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 < >
语言程序设计 选择结构程序设计 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 < >
语言程序设计 选择结构程序设计 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”);
C 语言程序设计 选择结构程序设计 逻辑运算符和表达式 逻辑运算符 种类: ! && || 逻辑运算真值表 a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 • C语言中,运算量:0表示“假”, • 非0表示“真”, • 运算结果: 0表示“假”, • 1表示“真”, < >
语言程序设计 选择结构程序设计 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) < >
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 < >
语言程序设计 选择结构程序设计 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 < >
C 语言程序设计 选择结构程序设计 真 假 P P 真 假 A B A B k k=kn k=k1 k=ki k=k2 A1 A2 ... Ai ... An • 二分支选择结构 • 多分支选择结构
选择型程序设计 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;
形式三: 格式: 语言程序设计 选择结构程序设计 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;
语言程序设计 选择结构程序设计 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!
语言程序设计 选择结构程序设计 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
语言程序设计 选择结构程序设计 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
语言程序设计 选择结构程序设计 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
语言程序设计 选择结构程序设计 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配对。
语言程序设计 选择结构程序设计 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 正确配对方法:加{ }
语言程序设计 选择结构程序设计 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
语言程序设计 选择结构程序设计 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
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 < >
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;] } • 执行过程:
语言程序设计 第二章数据描述 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!
语言程序设计 第二章数据描述 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
语言程序设计 第二章数据描述 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; } }
语言程序设计 第二章数据描述 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
语言程序设计 第二章数据描述 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
语言程序设计 第二章数据描述 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; }
语言程序设计 第二章数据描述 C 练习题 分别用(1)简单if语句 (2)嵌套的if语句 (3)if_else语句 (4)switch语句 6、有一函数 7、编写程序,输入3个实数,判断他们是否能够构成三角形,若能够呈三角形,则输出三角形的类型(等边、等腰或一般三角形)。