参考程序:
switch(s>0&&s<=10) {case 0:x=0;break;
case 1:switch(s>=3&&s<=6) {case 1:x=2;break;
case 0:switch(s>1||s>8) {case 1:x=3;break; case 0:x=1;break; } } }
4.127编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,-,*,/(用switch语句实现)。 参考程序:
#include
{float data1,data2,result; char op;
printf(\
scanf(\ switch(op)
{case '+':result=data1+data2;break; case '-':result=data1-data2;break; case '*':result=data1*data2;break;
case '/':if(data2==0){printf(\ result=data1/data2;break; }
printf(\}
4.128 编一程序,对于给定的一个百分制成绩,输出相应的五分值成绩。设90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'(用switch语句实现)。 参考程序: main()
{int score=-1,temp; char grade;
while(score>=0&&score<=100) { printf(\ scanf(\ }
temp=score/10; switch(temp)
{case 0:case 1:case 2:case 3:case 4:case 5:grade='E';break; case 6:grade='D';break; case 7:grade='C';break; case 8:grade='B';break; case 9:case 10:grade='A'; }
printf(\
}
第五章 循环控制
5.1 选择题
5.1 设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是 。
A)while循环执行10次 B)循环是无限循环
C)循环体语句一次也不执行 D)循环体语句执行一次 参考答案:C
5.2设有以下程序段
int x=0,s=0;
while(!x!=0) s+=++x; printf(\则 。
A)运行程序段后输出0 B)运行程序段后输出1 C)循环的控制表达式不正确 D)程序段执行无限次 参考答案:B
5.3语句while(!E);中的!E等价于 。
A)E= =0 B)E!=1 C)E!=0 D)E= =1 参考答案:A
5.4下面程序段的运行结果是 。
a=1;b=2;c=2;
while(a
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 参考答案:A
5.5 下面程序段的运行结果是 。
x=y=0;
while(x<15) y++,x+=++y;
printf(\
A)20,7 B)6,12 C)20,8 D)8,20 参考答案:D
5.6下面程序段的运行结果是 。
int n=0;
while(n++<=2); printf(\
A)2 B)3 C)4 D)语法错误 参考答案:C 5.7 设有程序段
t=0;
while(printf(\{t++;
if(t<3) break;
}
下面描述正确的是 。
A)其中循环控制表达式与0等价 B)其中循环控制表达式与'0'等价 C)其中循环控制表达式是不合法的 D)以上说法都不对 参考答案:B
参考分析:printf的返回值为数值1,恒真,故与B等价。
5.8 下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。
#include
scanf(\while( ) {if (a>b)
{t=a;a=b;b=t;}
printf(\scanf(\} }
A)!a=b B)a!=b C)a==b D)a=b 参考答案:B
5.9下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m,n中的较大者
#include \main()
{int m=0,n=0; char c; while ((【1】)!='\\n')
{ if(c>='A'&&c<='Z') m++; if (c>='a'&&c<='z') n++;
}
printf(\【2】);} 【1】A)c=getchar() B)getchar() C)c=gets() D)scanf(\ 【2】A)m:n B)m:m C)n:n D)n:m 参考答案:【1】A【2】D
5.10下面程序的功能是将小写字母变成对应大写字母后的第二个字母,其中y变成A,z变成B。请选择填空。
#include \main() { char c;
while ((c=getchar())!='\\n') {if (c>='a'&&c<='z') {【1】; if (c>'Z') 【2】; }
printf(\}
}
【1】A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30 【2】A)c='B' B)c='A' C)c-=26 D)c=c+26 参考答案:【1】D【2】 C
5.11下面程序的功能是在输入一批正整数中求出最大者,输入0结束循环,请选择填空 。
#include \main()
{int a,max=0; scanf(\while ( ) {if (max printf(\ A)a= =0 B)a C)a= =1 D)!a 参考答案:B 5.12 下面程序的运行结果是 。 #include {int num=0; while(num<=2) {num++; printf(\} } A)1 B)1 C)1 D)1 2 2 2 3 3 4 参考答案:C 5.13若运行以下程序时,从键盘输入2473 #include \{int c; while ((c=getchar())!='\\n') switch (c-'2') {case 0: case 1: putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); default:putchar(c+2);break; } printf(\ A)668977 B)668966 C)66778777 D)6688766 参考答案:A 5.14 C语言中while和do while循环的主要区别是 。 A)do-while的循环至少无条件执行一次。