目录 4.1选择结构程序设计的概述 4.2关系运算符和表达式 4.3逻辑运算符和表达式 4.4用if语句实现选择结构程序设计 4.5用switch语句实现选择结构程序 4.6选择结构程序设计举例 1
4.1 选择结构程序设计概述 1.从键盘输入一个数,如果它是正数,把它打印出来;否则不打印。 2
4.1 选择结构程序设计概述 2.判断一个正整数的奇偶性。 3
4.1 选择结构程序设计概述 3.比较三个数的大小,输出大者。 4
4.1 选择结构程序设计概述 4.要计算机输出y的值(不使用符号函数sgn) 5
4.2 关系运算符和表达式 1.关系运算符 1)关系运算符 2)关系运算符的值 4.2 关系运算符和表达式 1.关系运算符 1)关系运算符 <小于;<=小于或等于;>大于;>=大于或等于;==等于;!=不等于。 2)关系运算符的值 关系运算的值有真和假两种,如果满足运算符的定义,则结果为真,否则结果为假。虽然C编译在给出关系运算值时,以1代表真,0代表假。但反过来在判断一个量是为真还是为假时,以0代表假,而以非0的数值作为真。例如: 5>0的值为真,即为1。 (a=3)>(b=5)由于3>5不成立,故其值为假,即为0。 6
4.2 关系运算符和表达式 1.关系运算符 3)关系运算符的求值规则 4)关系运算符的优先级 5)关系运算符的结合性 4.2 关系运算符和表达式 1.关系运算符 3)关系运算符的求值规则 (1)在对两个数值表达式进行关系运算时,是比较两个数值的大小。如:3>5的结果为假。 (2)对于字符型数据的比较,直接比较单个字符的ASCII码的大小。如’a’>’b’的结果为假。不可以直接比较两个字符串。 4)关系运算符的优先级 关系运算符的优先级低于算术运算符,高于赋值运算符。其中,“<、<=、>、>=”的优先级相同,高于“==”和“!=”,“==”和“!=”的优先级相同。 5)关系运算符的结合性 关系运算符都是双目运算符,其结合性均为左结合。 7
4.2 关系运算符和表达式 2.关系表达式 1)关系表达式 2)关系表达式的格式 3)关系表达式使用说明 4.2 关系运算符和表达式 2.关系表达式 1)关系表达式 用关系运算符将表达式连接起来构成的有意义的式子。 2)关系表达式的格式 表达式 关系运算符 表达式 例如:a+b>c-d 3)关系表达式使用说明 (1)赋值运算符“=”和等于运算符“==”的不同。“==”两侧的运算量可以互换;而“=”两侧的运算量不可以互换。 (2)由于表达式也可以又是关系表达式。因此也允许出现嵌套的情况。例如:a>(b>c) 8
4.2 关系运算符和表达式 2.关系表达式 【例4_1】关系表达式求值。 #include<stdio.h> 4.2 关系运算符和表达式 2.关系表达式 【例4_1】关系表达式求值。 #include<stdio.h> void main() { char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",’a’+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5); } 9
4.3 逻辑运算符和表达式 1.逻辑运算符 1)逻辑运算符 2)逻辑运算的值 逻辑运算的值也为真和假两种,分别用1和0来表示。 10
4.3 逻辑运算符和表达式 1.逻辑运算符 3)逻辑运算求值规则 (1)与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。例如: 4.3 逻辑运算符和表达式 1.逻辑运算符 3)逻辑运算求值规则 (1)与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。例如: 5>0&&4>2结果也为真。 (2)或运算||:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如: 5>0||5>8结果也就为真。 (3)非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如: !(5>0)的结果为假。 11
4.3 逻辑运算符和表达式 1.逻辑运算符 4)逻辑运算符优先级 5)逻辑运算符的结合性 4.3 逻辑运算符和表达式 1.逻辑运算符 4)逻辑运算符优先级 逻辑运算符和其它运算符优先级的关系由高到低可表示如下: (1)!—>&&—>|| (2)关系运算符!—>算术运算符—>关系运算符&&和||—>赋值运算符 按照运算符的优先顺序可以得出: a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b) 5)逻辑运算符的结合性 逻辑运算符左结合 12
4.3 逻辑运算符和表达式 2.逻辑表达式 1)逻辑表达式 2)逻辑表达式格式 3)逻辑表达式的值 4.3 逻辑运算符和表达式 2.逻辑表达式 1)逻辑表达式 用逻辑运算符将表达式连接起来构成的有意义的式子。 2)逻辑表达式格式 表达式 逻辑运算符 表达式 其中的表达式可以又是逻辑表达式,从而组成嵌套。例如: (a||b)&&c 3)逻辑表达式的值 逻辑表达式的值是式中各种逻辑运算的最后值,以1和0分别代表真和假。 13
4.3 逻辑运算符和表达式 2.逻辑表达式 【例4_2】逻辑表达式求值。 #include<stdio.h> 4.3 逻辑运算符和表达式 2.逻辑表达式 【例4_2】逻辑表达式求值。 #include<stdio.h> void main() { char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||i&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k); } 14
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 1)第一种形式为基本形式:if (1)第一种if语句格式 if(表达式) 语句; 或写成:if(表达式) 语句; (2)第一种if语句功能 如果表达式的值为真,则执行其后的语句,否则不执行该语句。其执行过程可表示为图4_7。 15
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 1)第一种形式为基本形式:if 【例4_3】从键盘输入一个数,如果它是正数,把它打印出来;否则不打印。 #include<stdio.h> void main() { int a; printf("输入a:"); scanf("%d",&a); if(a>0) printf("a=%d",a); } 16
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 1)第一种形式为基本形式:if 【例4_4】比较三个数的大小,输出大者。 #include"stdio.h" void main() { int x,y,z,max; printf("input x,y,z: "); scanf("%d,%d,%d",&x,&y,&z); max=x; if(y>max) max=y; if(z>max) max=z; printf("max=%d\n",max); } 17
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 2)第二种形式为基本形式:if-else (1)第二种if语句格式 语句1; else 语句2; 或写成: if(表达式) 语句1; else 语句2; if(表达式) 语句1;else 语句2; (2)第二种if语句功能 如果表达式的值为真,则执行语句1,否则执行语句2。 18
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 2)第二种形式为基本形式:if-else 【例4_5】判断一个正整数的奇偶性。 #include<stdio.h> void main() { int a; printf("输入a:"); scanf("%d",&a); if(a%2==0) printf("%d是偶数\n",a); else printf("%d是奇数\n",a); } 19
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 3)第三种形式为基本形式:if-else-if (1)第三种if语句格式 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; … else if(表达式n) 语句n; else 语句n+1; 20
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 3)第三种形式为基本形式:if-else-if (1)第三种if语句格式 … else if(表达式n) 语句n; else 语句n+1; 21
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 3)第三种形式为基本形式:if-else-if (2)第三种if语句功能 依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行该if语句的后续程序。 【例4_6】要计算机输出y的值(不使用符号函数sgn) 22
4.4 用if语句实现选择结构程序设计 1.If语句三种形式 3)第三种形式为基本形式:if-else-if #include"stdio.h" void main() { int x,y; printf("input x: "); scanf("%d",&x); if(x>0) y=1; else if(x<0) y=-1; else y=0; printf("x=%d,y=%d\n",x,y); } 23
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 1)if语句嵌套的定义 if语句中的执行语句又是if语句。 或者为: else 24
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 3)if语句嵌套的配对原则 为了避免二义性,else总是与它前面离它最近的未被配对的if配对;也可以将内层if语句用{}括起来,使得层次清晰,避免二义性。例如: if(表达式1) { if(表达式2) 语句1; else 语句2; } 25
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 3)if语句嵌套的配对原则 【例4_7】if语句嵌套举例。 #include<stdio.h> void main() { int a,b; printf("please input a,b: "); scanf("%d,%d",&a,&b); if(a!=b) if(a>b) printf("a>b\n"); else printf("a<b\n"); else printf("a=b\n"); } 26
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 4)if语句嵌套的使用原则 【例4_8】用if-else-if语句代替if语句嵌套。 #include<stdio.h> void main() { int a,b; printf("please input a,b: "); scanf("%d,%d",&a,&b); if(a==b) printf("a=b\n"); else if(a>b) printf("a>b\n"); else printf("a<b\n"); } 27
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 4)if语句嵌套的使用原则 【例4_8】用if-else-if语句代替if语句嵌套。 #include<stdio.h> void main() { int a,b; printf("please input a,b: "); scanf("%d,%d",&a,&b); if(a==b) printf("a=b\n"); else if(a>b) printf("a>b\n"); else printf("a<b\n"); } 28
4.4 用if语句实现选择结构程序设计 2.If语句的嵌套 4)if语句嵌套的使用原则 【例4_9】用条件表达式,输出两个数中的大数。 #include<stdio.h> void main() { int a,b,max; printf("input two numbers:"); scanf("%d,%d",&a,&b); printf("max=%d\n",a>b?a:b); } 29
4.4 用if语句实现选择结构程序设计 3.条件运算符和条件表达式 1)条件运算符 条件运算符为“?:”,它是一个三目运算符。 2)条件表达式 表达式1?表达式2:表达式3 3)条件表达式求值规则 如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为条件表达式值。 4)条件表达式应用场合 条件表达式通常用于赋值语句之中 max=(a>b)?a:b; 执行该语句的语义是:如a>b为真,则把a赋给max,否则把b赋给max。 30
4.4 用if语句实现选择结构程序设计 3.条件运算符和条件表达式 5)使用条件表达式注意事项 (1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。如: max=(a>b)?a:b 可以去掉括号而写为: max=a>b?a:b (2)条件运算符?和:是一对运算符,不能单独使用。 (3)条件运算符的结合方向是自右至左。例如: a>b?a:c>d?c:d 应理解为 a>b?a:(c>d?c:d) 31
4.5 用switch语句实现选择结构程序设计 1.switch语句格式 2.switch语句功能 switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; … case 常量表达式n:语句n; default :语句n+1; } 2.switch语句功能 计算表达式的值,并逐个与其后的常量表达式值相比较, 当表达式的值与某个常量表达式的值相等时,即执行其后 的语句,然后不再进行判断,继续执行后面所有case后的 语句。如表达式的值与所有case后的常量表达式均不相同 时,则执行default后的语句。 32
4.5 用switch语句实现选择结构程序设计 【例4_10】输入一个数字,输出一个单词。 #include<stdio.h> void main() { int a; printf("input integer number: "); scanf("%d",&a); switch (a) { case 1:printf("monday\n"); case 2:printf("tuesday\n"); case 3:printf("wednesday\n"); case 4:printf("thursday\n"); case 5:printf("friday\n"); case 6:printf("saturday\n"); case 7:printf("sunday\n"); default:printf("error\n"); } 33
4.5 用switch语句实现选择结构程序设计 3.使用break语句跳出switch语句 【例4_11】对例4_10的改正程序。 #include<stdio.h> void main() { int a; printf("input integer number:"); scanf("%d",&a); switch (a) {case 1:printf("monday\n");break; case 2:printf("tuesday\n"); break; case 3:printf("wednesday\n");break; case 4:printf("thursday\n");break; case 5:printf("friday\n");break; case 6:printf("saturday\n");break; case 7:printf("sunday\n");break; default:printf("error\n"); } } 34
4.5 用switch语句实现选择结构程序设计 3.使用break语句跳出switch语句 【例4_12】商店售货,按购买货物的金额多少分别给予不同优惠折扣如下:购货不足250元的,没有折扣;购货满250元(含250元,下同)不足500的,减价5%;购货满500元,不足1000元的,减价7.5%;购货满1000元,不足2000元的,减价10%;购货满2000元的,减价15%。设购货款为m,折扣为d,可表示如下: 35
4.5 用switch语句实现选择结构程序设计 3.使用break语句跳出switch语句 #include<stdio.h> void main() { float m,d,s; printf("输入货款: "); scanf("%f",&m); switch((int)(m/250)) { case 0:d=0; break; case 1:d=5; break; case 2: case 3:d=7.5; break; case 4: case 5: case 6: case 7:d=10; break; default:d=15; } s=s*m*(100-d)/100; printf(“m=%f,s=%f”,m,s); } 36
4.5 用switch语句实现选择结构程序设计 4.使用switch语句的注意事项 1)在case后的各常量表达式的值不能相同,否则会出现错误; 2)在case后,允许有多个语句,可以不用{}括起来; 3)default子句可以省略。 37
4.6 选择结构程序设计举例 【例4_13】求一元二次方程ax2+bx+c=0的根。 #include<math.h> 4.6 选择结构程序设计举例 【例4_13】求一元二次方程ax2+bx+c=0的根。 #include<math.h> #include<stdio.h> void main() { int a,b,c; double d,s1,s2,x1,x2; printf(“请输入a,b,c:”); scanf(“%d,%d,%d”,&a,&b,&c); if(a==0)printf("输入有误,a不应该为0"); d=b*b-4*a*c; s1=-b/(2*a); s2=sqrt(abs(d))/(2*a); if(d>=0) //两个实根 { x1=s1+s2; x2=s1-s2; printf(“两个实根:x1=%f,x2=%f”,x1,x2); } else //两个虚根 { printf(“一个虚根:x1=%f+%fi\n”,s1,s2); printf(“另一个虚根:x2=%f-%fi\n”,s1,s2); } } 38
4.6 选择结构程序设计举例 【例4_14】输入一个年份,要求判定它是否闰年。判别条件:能被4整除但不能被100整除的是闰年(如1992);能被4整除又能被400整除的是闰年(如2000);其它为非闰年(如2003)。 #include<stdio.h> void main() { int y; printf( “请输入年份:”); scanf(“%d”,&y); if(y%4==0&&(y%100!=0||y%400==0)) printf( "%d is a leap year!\n",y); else printf( "%d is not a leap year!\n",y); } 39
4.6 选择结构程序设计举例 【例4_15】有一个城市,规划要建设1个中心城和4个卫星城。中心城的边长20km,卫星城的边长5km,均为正方形。中心城的地价为每公顷10万元,卫星城的地价为每公顷5万元,其它地区的地价为每公顷1万元。编程序,当输入某一地点的坐标(x,y)后,计算机即输出每公顷地价。 卫星城的范围:20≤|x|≤25 and 20≤|y|≤25 中心城的范围:|x|≤10 and |y|≤10 40
4.6 选择结构程序设计举例 #include<math.h> #include<stdio.h> 4.6 选择结构程序设计举例 #include<math.h> #include<stdio.h> void main() { float x,y; int price; printf("请输入行坐标:"); scanf("%f",&x); printf ("请输入列坐标:"); scanf("%f",&y); if(fabs(x)<=10&&fabs(y)<=10) price=10; else if(fabs(x)>=20&&fabs(x)<=25&&fabs(y)>=20&&fabs(y)<=25) price=5; else price=1; printf("price=%d\n",price); } 41
4.6 选择结构程序设计举例 【例4_16】输入三整数,输出最大数和最小数。 #include<stdio.h> 4.6 选择结构程序设计举例 【例4_16】输入三整数,输出最大数和最小数。 #include<stdio.h> void main() { int a,b,c,max,min; printf("input three numbers: "); scanf("%d,%d,%d",&a,&b,&c); if(a>b) {max=a;min=b;} else {max=b;min=a;} if(max<c) max=c; else if(min>c) min=c; printf("max=%d\nmin=%d\n",max,min); } 42
4.6 选择结构程序设计举例 【例4_17】简单算术运算程序。用户输入运算数和四则运算符,输出计算结果。 4.6 选择结构程序设计举例 【例4_17】简单算术运算程序。用户输入运算数和四则运算符,输出计算结果。 #include<stdio.h> void main() { float a,b; char c; printf("input expression: a(+,-,*,/)b \n"); scanf("%f%c%f",&a,&c,&b); switch(c) { case '+': printf("%f\n",a+b);break; case '-': printf("%f\n",a-b);break; case '*': printf("%f\n",a*b);break; case '/': printf("%f\n",a/b);break; default: printf("input error\n"); } } 43