第四章选择(分支)结构程序设计 C语言中实现选择结构的控制语句有两种:条件分支语句if和开关分支语句switch。
一.if语句的三种形式:1、if(表达式)语句;即:条件为真,执行语句12、if(表达式) /* if 和 else是关键字,要小写 */语句1;else语句2;即:条件为真,执行语句1,否则执行语句23、 if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;…else if(表达式n)语句n;注意以下几点:①if 后面的条件可以是如下类型:● 关系表达式,如x>y● 逻辑表达式,如x>y&&y>z● 算术表达式,如x+y● 赋值表达式,如x=y● 变量,如x● 常量,如-5②如果语句1或语句2是一条语句,则{}一对花括号可以省略③if….else 是一条语句,else 不能单独出现,要注意else 与 if的搭配问题(既:else与其上面最近的且没使用的if搭配)二.开关分支语句switch1、形式switch(表达式){ case 常量表达式1: 语句1;break;case 常量表达式2: 语句2;break;case 常量表达式3: 语句3;break;……case 常量表达式n: 语句n;break;default : 语句n+1;}2、执行过程当表达式的值等于“常量表达式1”时,执行语句1;当表达式的值等于“常量表达式2” 时,执行语句2;……当表达式的值等于“常量表达式n”时,执行语句n;当表达式的值与“常量表达式1、常量表达式2……常量表达式n”谁都不等时,就执行default后的语句.注意以下几点:1、表达式应该有括号,注意大括号一定要有并且注意配对。
2、表达式可以是整型常量或变量、字符常量或变量、关系表达式、逻辑表达式、整型的算术表达式,总之是整数,但是通常用整型或字符型。
C语言计算表达式的值,然后找常量表达式的值匹配。
3、 break 是C语言的一种语句,其作用是跳出switch语句。
如果没有break,将会从某个语句组起顺次执行完所有的语句组。
有时我们希望这样,有时我们不希望这样。
因此可以通过break调整程序的走向。
4、switch和case是关键字,要小写5、case要和后面的常量表达式用空格分开,且这个常量表达式必须是整型常量或字符常量,不是变量。
6、default可以放在任何位置,不一定在最后,也可以没有练习题一、选择题1.假定所有变量均已正确定义,下列程序段运行后y的值是()。
int a=0, y=10;if (a=0) y--; else if(a>0)y++;else y+=y;A. 20B. 11C. 9D. 02.假定所有变量均已正确定义,下列程序段运行后x的值是()。
a=b=c=0; x=35;if (!a) x--; else if(b); if(c) x=3; else x=4;A. 34B. 4C. 35D. 33.下面的程序片段所表示的数学函数关系是()。
y=-1;if(x!=0) if(x>0) y=1; else y=0;4. 假定i和j为int型变量,则执行以下语句后j的值为()。
int i=1;switch(i++){case 1: for(j=0;j<9;j++) if (i==1) break;case 2: for(j=1;j<10;j++) if (i==2) break;case 3: printf(“i=%d\n”,i);}A. 0B. 1C. 9D. 105. 在C语言的语句中,用来决定分支流程的表达式是()。
A. 可用任意表达式B. 只能用逻辑表达式或关系表达式C. 只能用逻辑表达式D. 只能用关系表达式4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。
A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if5.逻辑运算符两侧运算对象的数据类型()。
A.只能是0或1B.只能是0或非0正数C.只能是整型或字符型数据D.可以是任何类型的数据6.以下关于运算符优先顺序的描述中正确的是()。
A.关系运算符<算术运算符<赋值运算符<逻辑与运算符B.逻辑与运算符<关系运算符<算术运算符<赋值运算符C.赋值运算符<逻辑与运算符<关系运算符<算术运算符D.算术运算符<关系运算符<赋值运算符<逻辑与运算符7.下列运算符中优先级最高的是()。
A.< B.&& C.+ D.!=8.选择出合法的if语句(设int x,a,b,c;)()。
A.if(a=b) c++;B.if(a=<b) c++;C.if(a<>b) c++;D.if(a=>b) c++;9.能正确表示“当x的取值在[-58,-40]和[40,58]范围内为真,否则为假”的表达式是()。
A.(x>= -58) && (x<= -40) && (x>=40) && (x<=58)B.(x>= -58) || (x<= -40) || (x>=40) || (x<=58)C.(x>= -58) && (x<= -40) || (x>=40) && (x<=58)D.(x>= -58) | |(x<= -40) && (x>=40) || (x<=58)10.若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是()。
A.x%2==1 B.!(x%2==0)C.!(x%2) D.x%211.已知x=45, y=’a’, z=0; 则表达式(x>=z && y<’z’ || !y)的值是()。
A.0 B.语法错C.1 D.“假”12.逻辑运算符两侧运算对象的数据类型()。
A.只能是0或1B.只能是0或非0正数C.只能是整型或字符型数据D.可以是任何类型的数据二、填空题1.若从键盘输入58,则输出结果是________。
#include ”stdio.h”main(){int a;scanf(”%d”, &a);if (a>50) printf(”%d”, a);if (a>40) printf(”%d”,a);if (a>30) printf(”%d”,a);}2.设int x=9,y=8;表达式x==y+1的结果是________。
3.定义int x,y;执行y=(x=1,++x,x+2);后, y的值是________。
4.定义int x=10,y,z; 执行y=z=x; x=y==z;后, x的结果是________。
5.设int a=1,b=2,c,d,e; 执行c=(-a++)+(++b);d=(b--)+(++a)-a;e=(a/(++b))-(a/(--a));请问a,b,c,d,e的结果是:________。
6.设int a=2,b=3,c,d,e,f; 执行c=(a++>= --b);d=(a==++b);e=(a--!=b);f=(++a>b--);请问a,b,c,d,e,f的结果是:________。
7.以下程序的运行结果是________。
#include ”stdio.h”main(){int a,b,c,s,w,t;s=w=t=0;a= -1; b=3; c=3;if (c>0) s=a+b;if (a<=0){ if (b>0)if (c<=0) w=a-b;}else if (c>0) w=a-b;else t=c;printf(”%d %d %d”, s,w,t);}8.以下程序的运行结果是________。
#include ”stdio.h”main(){int a, b= 250, c;if ((c=b)<0) a=4;else if (b=0) a=5;else a=6;printf(”\t%d\t%d\n”,a,c);if (c=(b==0))a=5;printf(”\t%d\t%d\n”,a,c);if (a=c=b) a=4;printf(”\t%d\t%d\n”,a,c);}9.以下程序是对用户输入的字母进行大小写转换。
请在【】内填入正确内容。
#include ”stdio.h”main(){char ch;printf(”please input a letter:”);scanf(”%c”,&ch);ch=ch+32;else if (ch>=’a’ && ch<=’z’);printf(” the converted letter is: %c\n”,ch);}10.以下程序是对从键盘输入的任何三个整数,求出其中的最小值。
请在【】内填入正确内容。
#include ”stdio.h”main(){int a,b,c,min;printf(”please input three numbers:”);scanf(”%d%d%d”,&a,&b,&c);min=b;elsemin=a;if (min>c) printf(”min=%d\n”,min);}11.以下程序段的运行结果是________。
#include ”stdio.h”main(){char ch1=’a’,ch2=’A’;switch (ch1){ case ’a’:switch (ch2){case ’A’: printf(”good!\n”); break;case ’B’: printf(”bad!\n”); break;}case ’b’: printf(”joke\n”);}}12.以下程序运行后的输出结果是_____________。
#include ”stdio.h”main(){int x=10, y=20, t=0;if (x==y) t=x; x=y; y=t;printf(”%d,%d\n”,x,y);}13.执行以下语句后,x、y和z 的值分别为_____________。
int x,y,z;x=y=z=0;++x || ++y && ++z;三、编程题1.将任意三个整数a、b、c按从大到小的顺序输出2.将百分制成绩划分为五段输出,用switch语句实现。