第五章选择结构程序设计 学习目的与要求:1.学会正确使用关系运算符和逻辑运算符 2.重点掌握三种if语句 3.能够理解if语句的嵌套。 4.重点掌握 switch语句。 三种ⅱ语句 2.if语句的嵌套。 3. switch语句 第1讲 知识归纳 1.关系运算符 (1)、>优先级高 优先级低 举例:先乘除,后加减 注意:区分=和== (2)关系表达式的值:关系表达式成立,为真—用1表示 关系表达式不成立,为假—用0表示 2.逻辑运算符 (1)优先级别:、&&、‖从左往右,优先级依次降低。 (2)运算规则 真假 真真假 真真真 假真 假假假 假真假 (3)逻辑表达式的值 表达式结果为真——值为1 表达式结果为假——值为0 (4)a&&b&&c:只有a为真(非0)时,才需要判别b的值,只有a和b都为真的情况 下才需要判别c的值。对&&运算符,只有a≠0,才继续进行右面的运算。 (5)a‖b‖c:只有a为假(0)时,才需要判别b的值,只有a和b都为假的情况下才 需要判别c的值。对‖运算符,只有a=0,才继续进行其右面的运算
第五章 选择结构程序设计 学习目的与要求:1. 学会正确使用关系运算符和逻辑运算符。 2. 重点掌握三种 if 语句。 3. 能够理解 if 语句的嵌套。 4. 重点掌握 switch 语句。 重点: 1. 三种 if 语句。 2. if 语句的嵌套。 3. switch 语句。 第 1 讲 知识归纳 1. 关系运算符 (1) 、>= 优先级高 == 、!= 优先级低 举例:先乘除,后加减 注意:区分=和= = (2) 关系表达式的值:关系表达式成立,为真——用 1 表示; 关系表达式不成立,为假——用 0 表示。 2. 逻辑运算符 (1) 优先级别: ! 、 && 、 || 从左往右,优先级依次降低。 (2) 运算规则: ! 真 假 && 真 假 || 真 假 真 真 假 真 真 真 假 真 假 假 假 假 真 假 (3) 逻辑表达式的值: 表达式结果为真——值 为 1; 表达式结果为假——值 为 0。 (4) a&&b&&c:只有 a 为真(非 0) 时,才需要判别 b 的值,只有 a 和 b 都为真的情况 下才需要判别 c 的值。对&&运算符,只有 a≠0,才继续进行右面的运算。 (5) a || b || c:只有 a 为假(0) 时,才需要判别 b 的值,只有 a 和 b 都为假的情况下才 需要判别 c 的值。对 || 运算符,只有 a=0 , 才继续进行其右面的运算
第二部分¢语言程序设计同步训练 3.if语句的第一、第二种形式 (1)if(条件) 语句1 (2)if(条件) 如果语句1只有一个语句,可以不加{} 括起来:即如果if或else下需要执行多条 语句 语句,一定用{}括起来,否则,只执行一条 语句 else 三种if语句在这一点上是相同的 语句2 基础训练(A 填空题 1.关系表达式的运算结果是 值。C语言没有逻辑型数据,以 代表 代表“假” 2.逻辑运算符!是 运算符,其结合性是由 3.C语言提供的三种逻辑运算符是 。其中优先级最 高的为 ,优先级最低的为 4.逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是 任何类型的数据。系统最终以和 来判定它们属于“真”或“假” 5.设y为int型变量,请写出描述“y是偶数”的表达式 6.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式 7.条件“2b>c的值是 10.当a=5,b=4,c=2时,表达式a>bl=c的值是 11.已知A=75B=2,C=3.6,表达式A>B&&C>AAB的值是 12.若a=6b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是 3.有 Int x,y,z,且x=3y=-4,z=5,则表达式(x&&y)==(xz)的值为 14.有 Int x,y,z,且x=3y=-4,z=5,则以下表达式的值为 (x>y)+(y!=z)(x+y)&&(y-z) 15.有inta=3,b=4c=5,xy;,则以下表达式的值为 !(x=a)&&(y=b)&&0 16if(k)a=3;语句中的k可以改写为 使其功能不变。 二、选择题 1.逻辑运算符两侧运算对象的数据类型() A)只能是0或 只能是0或非0正数
第二部分 C 语言程序设计同步训练 ·137· ·137· 3. if 语句的第一、第二种形式 (1) if (条件) { 语句 1; } (2) if (条件) { 语句 1; } else { 语句 2; } 基础训练(A) 一、填空题 1. 关系表达式的运算结果是 值。C 语言没有逻辑型数据,以 代表 “真”,以 代表“假”。 2. 逻辑运算符!是 运算符,其结合性是由 。 3. C 语言提供的三种逻辑运算符是 、 、 。其中优先级最 高的为 ,优先级最低的为 。 4. 逻辑运算符两侧的运算对象不但可以是 0 和 1,或者是 0 和非 0 的整数,也可以是 任何类型的数据。系统最终以 和 来判定它们属于“真”或“假”。 5. 设 y 为 int 型变量,请写出描述“y 是偶数”的表达式 。 6. 设 x,y,z 均为 int 型变量,请写出描述“x 或 y 中有一个小于 z”的表达式 。 7. 条件“2b>c 的值是 。 10. 当 a=5,b=4,c=2 时,表达式 a>b!=c 的值是 。 11. 已知 A=7.5,B=2,C=3.6,表达式 A>B&&C>A||AB 的值是 。 12. 若 a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2 的值是 。 13. 有 int x,y,z;且 x=3,y= -4,z=5,则表达式(x&&y)==(x||z)的值为 。 14. 有 int x,y,z;且 x=3,y= -4,z=5,则以下表达式的值为 。 !(x>y)+(y!=z)||(x+y)&&(y-z) 15. 有 int a=3,b=4,c=5,x,y;,则以下表达式的值为 。 !(x=a)&&(y=b)&&0 16. if (!k) a=3;语句中的!k 可以改写为 ,使其功能不变。 二、选择题 1. 逻辑运算符两侧运算对象的数据类型( )。 A) 只能是 0 或 1 B) 只能是 0 或非 0 正数 如果语句 1 只有一个语句,可以不加{} 括起来;即 如果 if 或 else 下需要执行多条 语句,一定用{}括起来,否则,只执行一条 语句; 三种 if 语句在这一点上是相同的;
138 C语言程序设计上机指导与同步训练 C)只能是整型或字符型数据 D)可以是任何类型的数据 2.以下关于运算符优先顺序的描述中正确的是()。 A)关系运算符=57&&c90&&c=122 C)c>=48&c=65&&c=48&c65&&c=978&&c=1)&(x=200)&&(x=1)&&(x=200&&(x=1)(x=200)(X=y&&chb&&(n=c>d)后n的值为() A)l B)2 9.以下不正确的f语句形式是() A)if(x>y&&xl=y) B)if(x-y)x+=y n) scanf("%d', &x)else scanf(%d", &y ); D)if(xy) A)x=10.y=20,z=30 B)x=20,y=30,z=3
·138· C 语言程序设计上机指导与同步训练 ·138· C) 只能是整型或字符型数据 D) 可以是任何类型的数据 2. 以下关于运算符优先顺序的描述中正确的是( )。 A) 关系运算符=57&&c=90&&c=122 B) !(c=57&&c=90&&c=122) C) c>=48&&c=65&&c=97&&c=48&&c=65&&c=97&&c=1)&&(x=200)&&(x=1)||(x=200)||(x=1)&&(x=200)&&(x=1)||(x=200)||(x=y&&chb)&&(n=c>d)后 n 的值为( )。 A)1 B)2 C)3 D)4 9. 以下不正确的 if 语句形式是( )。 A) if(x>y&&x!=y); B) if(x==y) x+=y; C) if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D) if(xy) z=x; x=y; y=z; A) x=10,y=20,z=30 B) x=20,y=30,z=30
第二部分¢语言程序设计同步训练 C)X=20,y=30,z=10 D)x=20,y=30,z=20 11.以下if语句语法正确的是()。 A)if(x>0) else printf(" %f, -x) B)if(x>0) i XX+y; printf("%f x);j else printf(" %of”;-x C)ifx>0) t XX+y; printf("%f, x);i else printf(%f”;-x) )if(x>0) else printf(" %f, -x) 12.请阅读以下程序 inta=5,b=5,c=0; printf("ss$\n”); 以上程序()。 A)有语法错不能通过编译B)可以通过编译但不能通过连接 C)输出* D)输出Sss 三、写出下列程序的运行结果 1.若运行时输入:2,则以下程序的运行结果是 #include ,则以下程序的运行结果是 #include <stdio. h: void main(void) float CostPrice, SellingPrice;
第二部分 C 语言程序设计同步训练 ·139· ·139· C) x=20,y=30,z=10 D) x=20,y=30,z=20 11. 以下 if 语句语法正确的是( )。 A) if(x>0) printf(“%f”,x) else printf(“%f”,-x); B) if(x>0) { x=x+y; printf(“%f”,x); } else printf(“%f”,-x); C) if(x>0) { x=x+y; printf(“%f”,x); }; else printf(“%f”,-x); D) if(x>0) { x=x+y; printf(“%f”,x) } else printf(“%f”,-x); 12. 请阅读以下程序 main() { int a=5,b=5,c=0; if(a==b+c) printf(“***\n”); else printf(“$$$\n”); } 以上程序( )。 A) 有语法错不能通过编译 B) 可以通过编译但不能通过连接 C) 输出*** D) 输出$$$ 三、写出下列程序的运行结果 1. 若运行时输入:2,则以下程序的运行结果是 。 #include void main(void) { char Class; printf(“Enter 1 for 1st class post or 2 for 2nd post”); scanf(“%c”,&Class); if(Class==‘1’) printf(“1st class postage is 19p”); else printf(“2nd class postage is 14p”); } 2. 若运行时输入:4.4,则以下程序的运行结果是 。 #include void main(void) { float CostPrice,SellingPrice;
·14 C语言程序设计上机指导与同步训练 printf("Enter Cost Price $ " scanf(“f”,& Costprice); if (CostPrice>=5) printf("Selling Price(0.25)$6.2f", SellingPrice) e⊥se SellingPrice=CostPrice+CostPrice*0. 30: printf("Selling Price(0.30)$962f", SellingPrice) 3.以下程序的运行结果是 if(2*2==5<2*2==4) print("T”); else 能力提高(B) 选择题 1.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为 “假”,则以下不能满足要求的表达式是() 2.下列运算符中优先级最低的(),优先级最高的是()。 A)? 3.请阅读以下程序 inta=5,b=0,C=0; if(a=b+c) printf(”**n”) printf("$$sn”) 以下程序()。 ∧)有语法错不能通过编译B)可以通过编译但不能通过连接 C)输出** D)输出$ss 4.以下程序的运行结果是() printf("dln”,m);
·140· C 语言程序设计上机指导与同步训练 ·140· printf(“Enter Cost Price $:”); scanf(“%f”,&CostPrice); if(CostPrice>=5) { SellingPrice=CostPrice+CostPrice*0.25; printf(“Selling Price(0.25)$%6.2f”,SellingPrice); } else { SellingPrice=CostPrice+CostPrice*0.30; printf(“Selling Price(0.30)$%6.2f”,SellingPrice); } } 3. 以下程序的运行结果是 。 main() { if(2*2==55) printf(“%d\n”,m);
笫二部分语言程序设计同步训练 printf("dn”,m--); A4 B)5 C)6 D)7 二、根据程序的功能将以下程序补充完整 以下程序对输入的4个整数,按从小到大的顺序输出。请在内填入正确内容 main() int t, a, b,c, d printf("input a, b,c, d: " scanf(“d,旨d,d,旨d if(a>b) I if it=a; a=; C=t; 1 if (a>d)t=a; a=d; d=t if (b>d)t=b; b=d; d=t; 1 if (c>d)t=c; c=d; d=t; K printf("d,旨d,号d,d",a,b,C,d); 三、编程题 1.试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes:否则输 出 2.编制程序要求输入整数x、y和z,若x2+y2+2大于100则输出x2+y2+2千位以上 的数字,否则输出3数之和。 3.编写程序,输入三角型的3条边长,求其面积。注意:对于不合理的边长输入要输 出数据错误的提示信息。 第2讲 知识归纳 l.if语句的第三种形式 if(条件1){语句1} else if(条件2){语句2} else if(条件3){语句3 else{语句n 2.if语句的嵌套 (1)三种if语句可以互相嵌套,应当注意的是,else总是与它上面最近的if配对 (2)如果if与else的数目不一样,为实现程序设计者的企图,可以加{}括起来确定 配对关系
第二部分 C 语言程序设计同步训练 ·141· ·141· else printf(“%d\n”,m--); } A)4 B)5 C)6 D)7 二、根据程序的功能将以下程序补充完整 以下程序对输入的 4 个整数,按从小到大的顺序输出。请在 内填入正确内容。 main() { int t,a,b,c,d; printf(“input a,b,c,d:”) scanf(“%d,%d,%d,%d”, ); if(a>b) { } if ( ) {t=a;a=c;c=t;} if (a>d) {t=a;a=d;d=t;} if ( ) {t=b;b=c;c=t;} if (b>d) {t=b;b=d;d=t;} if (c>d) {t=c;c=d;d=t;} printf(“%d,%d,%d,%d”,a,b,c,d); } 三、编程题 1. 试编程判断输入的正整数是否既是 5 又是 7 的整倍数。若是,则输出 yes;否则输 出 no。 2. 编制程序要求输入整数 x、y 和 z,若 x 2 +y2 +z2大于 1000,则输出 x 2 +y2 +z2千位以上 的数字,否则输出 3 数之和。 3. 编写程序,输入三角型的 3 条边长,求其面积。注意:对于不合理的边长输入要输 出数据错误的提示信息。 第 2 讲 知识归纳 1. if 语句的第三种形式 if ( 条件 1 ) { 语句 1 } else if ( 条件 2 ) { 语句 2 } else if ( 条件 3 ) { 语句 3 } else { 语句 n} 2. if 语句的嵌套 (1) 三种 if 语句可以互相嵌套,应当注意的是,else 总是与它上面最近的 if 配对。 (2) 如果 if 与 else 的数目不一样,为实现程序设计者的企图,可以加{} 括起来确定 配对关系。
C语言程序设计上机指导与同步训练 3.条件运算符 (1)格式:表达式1表达式2:表达式3 2)条件运算符的结合方向为“自右至左 如:a>b?a:c>d?c:d∥先算出c>d?c:d,用它的结果,作为表达式3,参与前面的 算。 4. switch语句 格式: switch(表达式) case常量表达式1:{语句1} case常量表达式2:{语句2} case常量表达式n:{语句n} default:{语句n+l ∥ default可有可无; switch语句后,表达式的类型常用int或char型数据类型,case后的常量表达式类型 定与表达式类型匹配 (1)case后常量表达式的值必须互不相同; (2)case和 default出现次序不影响执行结果 (3)case语句后如没有 break,顺序向下执行。切记! 基础训练(A) 、填空题 1.在i语句中又包含一个或多个i语句称为 2.为了避免在嵌套的条件语句 if-else中产生二义性,C语言规定:else子句总是与if 配对。如果if与else数目不一样,为实现设计者的企图,可以加 来确定配对关 3.条件运算符是C语言中唯一的一个 目运算符,其结合性为 4.假设条件表达式的格式为:表达式1?表达式2:表达式3 若表达式2和表达式3的类型不同,此时条件表达式的值的类型为二者中较的 类型 在 switch语句中, switch后面括弧内的“表达式”,可以为 类 6.若a=1,b=2,则表达式a>b?ab+1的值是 7.若w=1、x=2、y=3、z=4,则条件表达式w< ?w:y<z?y: z的值是 8.若有以下f语句:if(a<b)min=a 可用条件运算符来处理的等价式子为 9.若x=1y=2,z=3,则表达式(xy?xy)=2+的值是 10.设有变量定义:inta=5c=4,则(-a=+c)?-ac++的值是 ,此时c的存储单 元的值为
·142· C 语言程序设计上机指导与同步训练 ·142· 3. 条件运算符 (1) 格式:表达式 1 ?表达式 2 :表达式 3 (2) 条件运算符的结合方向为“自右至左”; 如:a>b?a:c>d?c:d; //先算出 c>d?c:d ,用它的结果,作为表达式 3,参与前面的 运算。 4. switch 语句 格式:switch ( 表达式 ) { case 常量表达式 1 : { 语句 1 } case 常量表达式 2 : { 语句 2 } …. case 常量表达式 n : { 语句 n } default: { 语句 n+1 } //default 可有可无; } switch 语句后,表达式的类型常用 int 或 char 型数据类型,case 后的常量表达式类型一 定与表达式类型匹配; (1) case 后常量表达式的值必须互不相同; (2) case 和 default 出现次序不影响执行结果; (3) case 语句后如没有 break,顺序向下执行。切记! 基础训练(A) 一、填空题 1. 在 if 语句中又包含一个或多个 if 语句称为 。 2. 为了避免在嵌套的条件语句 if-else 中产生二义性,C 语言规定:else 子句总是与 if 配对。如果 if 与 else 数目不一样,为实现设计者的企图,可以加 来确定配对关 系。 3. 条件运算符是 C 语言中唯一的一个 目运算符,其结合性为 。 4. 假设条件表达式的格式为:表达式 1?表达式 2:表达式 3 若表达式 2 和表达式 3 的类型不同,此时条件表达式的值的类型为二者中较 的 类型。 5. 在 switch 语句中,switch 后面括弧内的“表达式”,可以为 类型。 6. 若 a=1,b=2,则表达式 a>b?a:b+1 的值是 。 7. 若 w=1、x=2、y=3、z=4,则条件表达式 w<x?w:y<z?y:z 的值是 。 8. 若有以下 if 语句:if (a<b) min=a; else min=b; 可用条件运算符来处理的等价式子为 。 9. 若 x=1,y=2,z=3,则表达式(x<y?x:y)==z++的值是 。 10. 设有变量定义:int a=5,c=4;则(--a==++c)?--a:c++的值是 ,此时 c 的存储单 元的值为
第二部分¢语言程序设计同步训练 143· 判断题 1.在swch语句中,每一个的case常量表达式的值可以相同。() 2.在 switch语句中,各个case和 default的出现次序影响执行结果。( 3.在 switch语句中,多个case可以共用一组执行语句。( 4.条件表达式能取代一般i的语句。( 5case后的常量表达式类型一定与表达式类型匹配。( 写出以下程序的运行结果 int s,w,t if(c<=0) printf( case 'A': printf("85-100\n") C default: printf("error! \n") 若 grade的值为C’,则输出结果是
第二部分 C 语言程序设计同步训练 ·143· ·143· 二、判断题 1. 在 switch 语句中,每一个的 case 常量表达式的值可以相同。( ) 2. 在 switch 语句中,各个 case 和 default 的出现次序影响执行结果。( ) 3. 在 switch 语句中,多个 case 可以共用一组执行语句。( ) 4. 条件表达式能取代一般 if 的语句。( ) 5. case 后的常量表达式类型一定与表达式类型匹配。( ) 三、写出以下程序的运行结果 1. main() { int a=2,b=3,c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; printf(“%d\n”,c); } 2. main() { int a,b,c; int s,w,t; s=w=t=0; a=-1; b=3; c=3; if(c>0) s=a+b; if(a0) if(c0) w=a-b; else t=c; printf(“%d %d %d”,s,w,t); } 3. switch(grade) { case ‘A’: printf(“85-100\n”); case ‘B’: printf(“70-84\n”); case ‘C’: printf(“60-69\n”); case ‘D’: printf(“<60\n”); default: printf(“error!\n”); } 若 grade 的值为‘C’,则输出结果是__________
·144 C语言程序设计上机指导与同步训练 能力提高(B) 、写出下列程序的运行结果 if(y!=0)x=5 el printf("\tsd\n", x) X=1 if(y>0) else x=5 #include int x else if(y==0) printf("\t器d\t影d\n”,x,z) if(z=(y=0)) intf("\tsa\tsd\ printf(\t是at旨dln”,x,z) #include main() intx=1,y=0,a=0,b=0 switch(x) case I switch(y) case 0: a++: break
·144· C 语言程序设计上机指导与同步训练 ·144· 能力提高(B) 一、写出下列程序的运行结果 1. #include void main(void) { int x,y=1,z; if(y!=0) x=5; printf(“\t%d\n”,x); if(y==0) x=4; else x=5; printf(“\t%d\n”,x); x=1; if(y0) x=4; else x=5; printf(“\t%d\n”,x); } 2. #include void main(void) { int x,y=-2,z; if((z=y) 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 二、根据程序的功能将以下程序补充完整 以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整 除的年是闰年,能被400整除的年也是闰年。请在 内填入正确内容 main() mm l printf("y scanf("d gd", &yy, &mm)i case l case 3 case 12 case 11: len=30: break case 2 if(yy4=0yy8100!=0||yy400==0) default: printf("input error )i break printf("the length of dd is d\n",yy, mm, len)i 、将以下程序段改用嵌套的f语句实现 int case 9: m=4: break
第二部分 C 语言程序设计同步训练 ·145· ·145· case 1: b++; break; } case 2: a++; b++; break; } printf(“a=%d,b=%d”,a,b); } 二、根据程序的功能将以下程序补充完整 以下程序计算某年某月有几天。其中判别闰年的条件是:能被 4 整除但不能被 100 整 除的年是闰年,能被 400 整除的年也是闰年。请在 内填入正确内容。 main() { int yy,mm,len; printf(“year,month=”); scanf(“%d %d”,&yy,&mm); switch(mm) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: ; break; case 4: case 6: case 9: case 11: len=30; break; case 2: if(yy%4==0&&yy%100!=0||yy%400==0) ; else ; break; default: printf(“input error”); break; } printf(“the length of %d %d is %d\n”,yy,mm,len); } 三、将以下程序段改用嵌套的 if 语句实现 int s,t,m; t=(int)(s/10); switch(t) { case 10: m=5; break; case 9: m=4; break; case 8: m=3; break; case 7: m=2; break; case 6: m=1; break; default: m=0; }