公共选修课复习题.docx
《公共选修课复习题.docx》由会员分享,可在线阅读,更多相关《公共选修课复习题.docx(26页珍藏版)》请在冰点文库上搜索。
![公共选修课复习题.docx](https://file1.bingdoc.com/fileroot1/2023-5/23/59f76549-a047-406f-9ff2-70fdca61c6dc/59f76549-a047-406f-9ff2-70fdca61c6dc1.gif)
公共选修课复习题
公共选修课“C语言程序设计”复习题
1.温度转换
背景:
经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:
有些使用华氏温度标准(F),有些使用摄氏温度(C)。
现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。
如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。
温度转换的公式为:
F=(C×9/5)+32;C=(F-32)×5/9;式中F--华氏温度,C--摄氏温度。
编程:
输入:
第一个数据(1或2)确定转换的类型:
华氏转摄氏
(1);摄氏转华氏
(2);
第二个数据是相应需要转换的温度值。
输出:
相应的转换后的温度值(保留小数点后2位)。
#include
voidmain()
{
intlx;
doublef,c;
scanf("%d",&lx);
if(lx==1){
scanf("%lf",&f);
c=(f-32)*5/9;
printf("TheCentigradeis%.2f\n",c);
}
else{
scanf("%lf",&c);
f=(c*9/5)+32;
printf("TheFahrenheitis%.2f\n",f);
}
}
2.分段函数
有一分段函数,y=f(x)。
当x小于6时,y=x-12;
当x大于等于6且小于15时,y=3x-1;
当x大于等于15时,y=5x+9.
编程:
从键盘上输入一个整数x,输出对应的y值。
#include
voidmain()
{
intx,y;
scanf("%d",&x);
if(x<6)
y=x-12;
elseif(x<15)
y=3*x-1;
else
y=5*x+9;
printf("%d\n",y);
return0;
}
3.整数位数判断
输入一个不多于5位的正整数,要求编写程序:
(1)求它是几位数,并输出;
(2)逆序打印出各位数字。
#include
#include
#defineSIZE5
int
main(void)
{
intbit_count;//位数
longintinput_num;//输入数
intresult[SIZE];//存放各个位的数
inti;
scanf("%ld",&input_num);
if(input_num<0||input_num>99999){
printf("Invalidinput\n");
exit
(1);
}
for(bit_count=0;input_num;++bit_count){
result[bit_count]=input_num%10;
input_num/=10;
}
printf("%d\n",bit_count);
for(i=0;iprintf("%d",result[i]);
printf("\n");
exit(0);
}
4.四位数拆分
编程:
输入一个四位数,判断千位、百位、十位和个位数字之和是否为偶数,如果是,则输出Yes,如果不是,则输出No;如果不是四位数,则输出Invaliddata。
#include
voidmain()
{
intx,a,b,c,d,e;
scanf("%d",&x);
if(x/1000<1||x/10000>=1)
printf("Invaliddata\n");
else{
a=x/1000;
b=x%1000/100;
c=x%1000%100/10;
d=x%1000%100%10;
e=(a+b+c+d)%2;
if(e==0)
printf("Yes\n");
else
printf("No\n");
5.花多少钱买衣服
周末商场促销呢,某品牌服装既可以买套装,也可以买单件。
若买的不少于50套,每套80元;不足50套的每套90元,只买上衣每件60元,只买裤子每条45元。
编写程序,输入计划购买的上衣数量a和裤子的数量b,计算并输出应该付的款m。
#include
voidmain()
{
inta,b,y;
scanf("%d%d",&a,&b);
if(b<=a&&b<50)
y=90*b+(a-b)*60;
if(b<=a&&b>=50)
y=80*b+(a-b)*60;
if(a
y=90*a+(b-a)*45;
if(a=50)
y=80*a+(b-a)*45;
printf("%d\n",y);
}
6.到邮局去寄包裹
你去邮局给朋友寄礼物。
发现邮局对邮寄包裹的费用是这样规定的:
如果包裹长宽高任意一个尺寸超过1米,或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费0.2元,不同重量的邮资按下表计算:
重量(千克)
收费标准(元)
小于10
0.80
大于等于10但不超过20
0.75
大于等于20但不超过30
0.70
编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即可),超出尺寸或重量的输出"Error”.
#include
voidmain()
{
floata,b,c,m,y;
scanf("%f,%f,%f,%f",&a,&b,&c,&m);
if(a>1||b>1||c>1||m>30)
printf("Error\n");
else{
if(m<10)
y=0.80*m+0.2;
elseif(m<20)
y=0.75*m+0.2;
else
y=0.70*m+0.2;
printf("%.2f\n",y);
}
}
7.输出星期几的英文表示
输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词"Error(回车)"。
#include
voidmain()
{
inta;
scanf("%d",&a);
switch((int)(a))
{
case1:
printf("Monday\n");break;
case2:
printf("Tuesday\n");break;
case3:
printf("Wednesday\n");break;
case4:
printf("Thursday\n");break;
case5:
printf("Friday\n");break;
case6:
printf("Saturday\n");break;
case7:
printf("Sunday\n");break;
default:
printf("Error\n");
}
}
8.输出一行星号
编写程序在一行中输出N个星号。
输入:
N值
输出:
一行中N个星号
#include
intmain()
{
intn,i;
scanf("%d",&n);
for(i=0;iputchar('\n');
return0;
}
9.最大公约数
输入两个正整数m和n,求它们的最大公约数和最小公倍数
比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。
#include
voidmain()
{
intm,n,i,j;
scanf("%d%d",&m,&n);
for(i=m;i>=1;i--)
{
if(n%i==0&&m%i==0)
{printf("thegreatestcommondivisoris%d\n",i);break;
}
}
for(j=m;;j++)
{
if(j%m==0&&j%n==0)
{printf("theleastcommonmultipleis%d\n",j);break;
}
}
}
10.水仙花数
输出所有的水仙花数。
所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。
例如153是一水仙花数,因为153=13+53+33
输出语句:
printf("%d\n",n);
#include
voidmain()
{
intn,i,j,k;
for(n=100;n<=999;n=n+1)
{
i=n/100;//取出n的百位数
j=(n/10)%10;//取数n的十位数
k=n%10;//取出n的个位数
if(n==i*i*i+j*j*j+k*k*k)
printf("%d\n",n);
}
}
11.完数
一个数如果恰好等于它的因子之和,这个数就称为完数。
例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。
如果是,则按照如下格式输出。
比如,输入6,则输出Yes,itsfactorsare123;如果输入8,则输出No
#include
#include
intmain()
{
intn,i,c,sum=0;
scanf("%d",&n);
for(i=1;i{
if(n%i==0)
sum=sum+i;
}
if(n==sum)
{
printf("Yes,itsfactorsare");
for(c=1;c{
if(n%c==0)
printf("%d",c);
}
printf("\n");
}
else
printf("No\n");
}
12.素数
输入两个正整数m和n,求出[m,n]区间的所有素数
#include
#include
voidmain()
{intm,n,i,j,k;
scanf("%d%d",&m,&n);
for(i=m;i{k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>k)
printf("%d",i);
}
printf("\n");
}
13.找出最大素数
素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。
输入:
取值范围
输出:
该范围内的最大素数
#include
intmain()
{
inta,i,j;
scanf("%d",&a);
for(i=a;i>1;i--)
{
for(j=2;j
{
if(i%j==0)
break;
}
if(j==i)
{
printf("%d\n",i);
break;
}
}
}
选做5.18求亲密数
若正整数A的全部约数(包括1,不包括A本身)之和等于B;且整数B的全部约数(包括1,不包括B本身)之和等于A,则A、B为亲密数。
编程,输入正整数A,输出亲密数A,B(A<=B),若不存在亲密数,则输出Nooutput。
例如:
220和284就是一对亲密数。
220的约数是:
1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:
1、2、4、71、142,约数之和是220。
#include
#include
intmain()
{
intn,a,b=0,c=0;
scanf("%d",&n);
for(a=1;a{
if(n%a==0)
{
b=a+b;
}
}
for(a=1;a
{
if(b%a==0)
{
c=c+a;
}
}
if(n==c)
{
printf("%d-%d\n",c,b);
}
else
{
printf("Nooutput\n");
}
return0;
}
选做5.19高次方的尾数
输入2个正整数m和n,求mn后三位数。
比如输入m和n的值分别为13和13,则1313的后三位数字为253。
#include
#include
intmain()
{
intm,n,a,b=1,c;
scanf("%d%d",&m,&n);
for(a=1;a<=n;a++)
{
b=b*m;
b=b%1000;
}
printf("Thelast3digitsof%d**%dis:
%d\n",m,n,b);
return0;
}
选做5.20阶乘尾数零的个数
输入一个正整数n,求其阶乘尾数0的个数。
比如,输入n的值为100,则其阶乘尾数0的个数为24。
#include
#include
intmain()
{
intn,a,b,c;
scanf("%d",&n);
a=n/25;
b=n/5;
c=a+b;
printf("Thenumberof0intheendof%d!
is:
%d.\n",n,c);
return0;
}
14.看看是谁做的好事
某四位同学中有一个做了好事,不留名,表扬信来了,校长问是谁做的好事.以下四个人中有三个人说的是真话.
A说:
不是我
B说:
是C
C说:
是D
D说:
他说的不对!
编写程序:
输出是谁做的好事,只输出对应的大写字母,输出格式printf("%c\n",ch); 。
#include
#include
intmain()
{
charch;
for(ch='A';ch<='D';ch++)
{
if(ch=='A'&&ch=='C'&&ch=='D'&&ch!
='D')
printf("%c\n",ch);
if(ch!
='A'&&ch!
='C'&&ch=='D'&&ch!
='D')
printf("%c\n",ch);
if(ch!
='A'&&ch=='C'&&ch!
='D'&&ch!
='D')
printf("%c\n",ch);
if(ch!
='A'&&ch=='C'&&ch=='D'&&ch=='D')
printf("%c\n",ch);
}
}
选做5.26抓疑犯
某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
(1)A、B至少有一人作案;
(2)A、E、F三人中至少有两人参与作案;
(3)A、D不可能是同案犯;
(4)B、C或同时作案,或与本案无关;
(5)C、D中有且仅有一人作案;
(6)如果D没有参与作案,则E也不可能参与作案。
试编一程序,将作案人找出来。
输出格式为(以下结果不是最终答案):
A:
不是罪犯
B:
是罪犯
C:
是罪犯
D:
不是罪犯
E:
不是罪犯
F:
是罪犯
#include
#include
intmain()
{
intA,B,C,D,E,F;
for(A=0;A<=1;A++)
for(B=0;B<=1;B++)
for(C=0;C<=1;C++)
for(D=0;D<=1;D++)
for(E=0;E<=1;E++)
for(F=0;F<=1;F++)
if(A+B>=1&&A+E+F>=2&&A+D==1&&(B+C==0||B+C==2)&&C+D==1&&(D+E==0||D+E==2))
{
if(A==1)
printf("A:
是罪犯\n");
if(A==0)
printf("A:
不是罪犯\n");
if(B==1)
printf("B:
是罪犯\n");
if(B==0)
printf("B:
不是罪犯\n");
if(C==1)
printf("C:
是罪犯\n");
if(C==0)
printf("C:
不是罪犯\n");
if(D==1)
printf("D:
是罪犯\n");
if(D==0)
printf("D:
不是罪犯\n");
if(E==1)
printf("E:
是罪犯\n");
if(E==0)
printf("E:
不是罪犯\n");
if(F==1)
printf("F:
是罪犯\n");
if(F==0)
printf("F:
不是罪犯\n");
}
return0;
}
抓交通肇事犯
一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。
甲说:
牌照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:
四位的车号刚好是一个整数的平方,请根据以上线索求出车号。
#include
#include
intmain()
{
inta,b,c,n;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
if(a!
=b)
{
n=1100*a+11*b;
for(c=30;c<1000;c++)
if(n==c*c)
printf("Thelicenseplateis:
%d\n",n);
}
return0;
}
15.计算SUM的值
已知公式:
SUM=1+1/2+1/3+1/4+...+1/n
输入:
n
输出:
表达式sum的值。
结果保留6位小数
#include
intmain()
{
inti,n;
floats=0.0,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=1.0/i;
s+=t;
}
printf("sum=%.6f\n",s);
return0;
}
16.迭代法
用迭代法求.求平方根的迭代公式为:
要求前后两次求出的x的差的绝对值小于10-5。
#include
#include
intmain()
{
doublex1,x2,a;
scanf("%lf",&a);
{
x2=1.0;
do
{
x1=x2;
x2=0.5*(x1+a/x1);
}
while(fabs(x2-x1)>=1e-5);
printf("Thesquarerootof%.2fis%.5f\n",a,x2);
}
return0;
}
17.谁能出线
背景:
电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。
按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。
输入:
按顺序给出一个小组10个人的最后得分(int)。
输出:
能够出线的学生序号(0~9)。
#include
#defineN10
intmain()
{
inta[N];
inti,max;
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
max=a[0];
for(i=0;i<=9;i++)
{
if(max{
max=a[i];
}
}
for(i=0;i<=9;i++)
{
if(max==a[i])
printf("%d\n",i);
}
return0;
}
18.冒泡法排序
冒泡排序(BubbleSort)的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:
首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。
至此第一趟结束,将最大的数放到了最后。
在第二趟:
仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
编写程序,对输入的十个数按照从小到大排序
#include
intmain()
{
inta[10];
inti,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<=10;j++)
{
for(i=0;i<10-j;i++)
if(a[i]<=a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("%d",a[i]);
}
printf("\n");
}
19.存储并输出一个矩阵
编程,输入n,存储并输出如下例(n=5)所示的图形。
12345
11234
11123
11112
11111
#include
#defineM100
intmain()
{
inta[M][M];
inti,j,n;
scanf("%d",&n);
for(i=0;ifor(j=0;j