C 程序设计教程(15)—— 选择结构程序设计练习题
该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。
目录
- C 程序设计教程(15)—— 选择结构程序设计练习题
- 一、选择题
- 二、填空题
- 三、编程题
- 1、输入三个整数中的最大者
- 2、检验一个数的范围
- 3、取出一个整数的各位数字
- 4、计算员工提成
- 5、数据排序
一、选择题
1、为表示 x≥y≥z,在 C 语言中应使用表达式(A)。
A、(x>=y)&&(y>=z) B、(x>=y) AND (y>=z)
C、(x>=y>=z) D、(x>=y)&(y>=z)
2、能正确表示 a 和 b 同时为正或同时为负的逻辑表达式是(D)。
A、(a>0||b>0)&&(a<0||b<0) B、a>0 && b>0
C、a+b>0 D、a*b>0
3、设有如下程序:
#include<stdio.h>
int main() {
int a=2,b=-1,c=2;
if(a<b)
if(b<0) c=0;
else c+=1;
printf("%d\n",c);
return 0;
}
以上程序的输出结果为(B)。
A、1 B、2 C、3 D、0
4、设有如下程序:
#include<stdio.h>
int main() {
int x=1,a=0,b=0;
switch (x){
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
return 0;
}
以上程序的输出结果为(A)。
A、a=2、b=1 B、a=1、b=1 C、a=1、b=0 D、a=2、b=2
二、填空题
1、当 a=1、b=2、c=3 时,以下 if 语句执行后,a,b,c 中的值分别为(3)、(2)、(2)。
if (a>c)
b=a;a=c;c=b;
2、以下程序段的输出结果是(&#)。
#include<stdio.h>
int main() {
int x=0,y=2,z=3;
switch (x){
case 0:switch(y=2){
case 1:printf("*");break;
case 2:printf("&");break;
};
case 1:switch(z){
case 1:printf("$");
case 2:printf("*");break;
default:printf("#");
};
}
return 0;
}
3、当 a、b、c 的值分别为 3, 4, 5 时,以下各语句执行后 a、b、c 的值分别为多少?
(1)
if (a>c){
a=b;b=c;c=a;
}
else{
a=c;c=b;b=a; //a=5,c=4,b=5
}
执行后 a、b、c 的值分别为(5)、(5)、(4)。
(2)
if (a<c)
a=c;
else
a=b;c=b;b=a; //a=5,c=4,b=5
执行后 a、b、c 的值分别为(5)、(5)、(4)。
if (a!=c)
;
else
a=c;c=b;b=a; //a=3,c=4,b=3
执行后 a、b、c 的值分别为(3)、(3)、(4)。
4、写出以下程序的运行结果:
(1)
#include<stdio.h>
int main() {
int a=100,x=10,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=0)
if(!ok1) a=1;
else
if(ok2) a=10;
a=-1;
printf("a=%d\n",a);
return 0;
}
以上程序的运行结果为(a=-1)。
(2)
#include<stdio.h>
int main() {
int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf("a=%d\n",z);
return 0;
}
以上程序的运行结果为(z=2)。
(3)
#include<stdio.h>
int main() {
int a=-1,b=3,c=3,s=0,w=0,t=0;
if(c>0) s=a+b; //s=2
if(a<=0) w=a-b; //w=-4
else if(c>0) w=a-b;
else t=c;
printf("%d,%d,%d\n",s,w,t);
return 0;
}
以上程序的运行结果为(2,-4,0)。
(4)
#include<stdio.h>
int main()
{
int a=2,b=7,c=5;
switch(a>0)
{
case 1:switch(b<0){
case 1:printf("@");break;
case 2:printf("!");break;
}
case 0:switch(c==5){
case 0:printf("*");break;
case 1:printf("#");break;
default:printf("&");
}
default:printf("&");
}
printf("\n");
return 0;
}
以上程序的运行结果为(#&)。
(5)
#include<stdio.h>
int main()
{
int k=1;
switch(k)
{
case 1:k+=1;break;
case 2:k+=2;break;
case 3:k+=3;break;
default:k+=4;break;
}
printf("k=%d\n",k);
return 0;
}
以上程序的运行结果为(k=2)。
三、编程题
1、输入三个整数中的最大者
通过键盘输入 a,b,c 三个整型变量的值,输出其中的最大值。程序如下:
#include<stdio.h>
int main()
{
int a,b,c,max;
printf("请输入a,b,c的值(用逗号分隔):");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b) max=b;
if(max<c) max=c;
printf("max=%d\n",max);
return 0;
}
以上程序的运行结果如下:
2、检验一个数的范围
从键盘输入一个小于 1000 的正数,要求输出它的平方根。要求在输入数据后先对其进行检查,是否为小于 1000 的正数。若不是,则要求重新输入。
#include<stdio.h>
#include<math.h>
int main()
{
int i,k;
printf("请输入一个0~1000之间的整数:");
scanf("%d",&i);
if(i<=0||i>=1000) {
printf("数据输入有误,请重新输入");
printf("请输入一个0~1000之间的整数:");
scanf("%d",&i);
} //本部分的检验有问题:只能检验一次,如果第二次输入错误的数据,则不进行检查
k=sqrt(i);
printf("%d的平方根的整数部分为:%d\n",i,k);
return 0;
}
以上程序的运行结果如下:
3、取出一个整数的各位数字
输入一个不多于 5 位的正整数:(1)求出它是几位数。(2)分别输出每一位数字。(3)按逆序输出各位数字。
程序如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i,k,ge,shi,bai,qian,wan;
printf("请输入一个0~99999之间的整数:");
scanf("%d",&i);
if (i<0||i>99999) printf("输入范围有误。");
if (i>=0&&i<10) k=1;
if (i>=10&&i<100) k=2;
if (i>=100&&i<1000) k=3;
if (i>=1000&&i<10000) k=4;
if (i>=10000&&i<100000) k=5;
wan=i/10000;
qian=(i-wan*10000)/1000;
bai=(i-wan*10000-qian*1000)/100;
shi=(i-wan*10000-qian*1000-bai*100)/10;
ge=(i-wan*10000-qian*1000-bai*100-shi*10);
printf("整数%d的位数为:%d\n",i,k);
switch(k){
case 1:printf("整数%d的各位数字为:%d\n",i,ge);
printf("整数%d的反序数字为:%d\n",i,ge);break;
case 2:printf("整数%d的各位数字为:%d,%d\n",i,shi,ge);
printf("整数%d的反序数字为:%d,%d\n",i,ge,shi);break;
case 3:printf("整数%d的各位数字为:%d,%d,%d\n",i,bai,shi,ge);
printf("整数%d的反序数字为:%d,%d,%d\n",i,ge,shi,bai);break;
case 4:printf("整数%d的各位数字为:%d,%d,%d,%d\n",i,qian,bai,shi,ge);
printf("整数%d的反序数字为:%d,%d,%d,%d\n",i,ge,shi,bai,qian);break;
case 5:printf("整数%d的各位数字为:%d,%d,%d,%d,%d\n",i,wan,qian,bai,shi,ge);
printf("整数%d的反序数字为:%d,%d,%d,%d,%d\n",i,ge,shi,bai,qian,wan);break;
}
return 0;
}
以上程序的运行结果如下:
4、计算员工提成
企业根据利润发放提成,利润(profits)低于或等于100000元,按 10% 发放提成;利润高于 100000元,低于 200000元(100000<profits<=200000)时,低于 100000元的部分按 10% 提成,高于 100000元的部分按 7.5% 提成;200000<profits<=400000元时,低于 200000万元的部分仍按上述办法提成,高于 200000万元的部分按 5%提成;400000<profits<=600000元时,高于400000元的部分按3%提成;600000<profits<=1000000时,高于 600000元的部分按 1.5% 提成;当 profits>1000000时,超过 1000000元的部分按1%提成。用键盘输入当月利润 profits,求应发奖金总数。分别用if 语句和 switch 语句编程实现。
程序如下:
#include<stdio.h>
int main()
{
float profits,commission;
float b1,b2,b4,b6,b10;
b1=100000*0.1;
b2=b1+100000*0.075;
b4=b2+200000*0.05;
b6=b4+200000*0.03;
b10=b6+400000*0.015;
printf("请输入当月的利润总额:");
scanf("%f",&profits);
if(profits<=100000)
commission=profits*0.1;
if(profits<=200000&&profits>100000)
commission=b1+(profits-100000)*0.075;
if(profits<=400000&&profits>200000)
commission=b2+(profits-200000)*0.05;
if(profits<=600000&&profits>400000)
commission=b4+(profits-400000)*0.03;
if(profits<=1000000&&profits>600000)
commission=b6+(profits-600000)*0.015;
if(profits>1000000)
commission=b10+(profits-1000000)*0.01;
printf("当利润为%f时的提成为:%f",profits,commission);
return 0;
}
以上程序的运行结果如下:
5、数据排序
输入4个整数,然后按从小到大的顺序输出。程序如下:
#include<stdio.h>
int main()
{
int a,b,c,d,t;
printf("请输入4个整数(使用逗号分隔):");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if (a>b) {
t=a;a=b;b=t;
}
if (a>c) {
t=a;a=c;c=t;
}
if (a>d) {
t=a;a=d;d=t;
}
if (b>c) {
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);
return 0;
}
以上程序的运行结果如下: