C题库.docx
《C题库.docx》由会员分享,可在线阅读,更多相关《C题库.docx(41页珍藏版)》请在冰豆网上搜索。
![C题库.docx](https://file1.bdocx.com/fileroot1/2023-2/7/392118d4-aee6-46be-af87-47d38d2086de/392118d4-aee6-46be-af87-47d38d2086de1.gif)
C题库
C语言程序设计题库
1.根据圆柱体的半径和高,计算圆柱体的表面积和体积(结果精确到小数点后3位)。
程序要求:
(1)圆柱体的半径和高要求从键盘输入,数据输入时,应当显示提示字符串;
(2)输出时要求有文字说明。
#definepi3.1415926
#include
main()
{
floatr,h;//定义r为底面半径h为圆柱体高
floats,v;//定义s为圆柱表面积,v为圆柱体体积
printf("请输入底面半径和高(米),中间以逗号分隔:
");
scanf("%f,%f",&r,&h);
s=2*pi*r*h+2*pi*r*r;//计算表面积
v=pi*r*r*h;//计算体积
printf("表面积为%.3f(m2)\n体积为%.3f(m3)\n",s,v);
}
2.从键盘分别输入两个复数的实部和虚部,求它们的和、差、积、商并将结果在屏幕上输出。
#include"stdio.h"
main()
{
floata,b,c,d,resultr,resulti;
printf("请输入第一个复数:
");
scanf("%f%f",&a,&b);
printf("请输入第二个复数:
");
scanf("%f%f",&c,&d);
printf("两复数之和为%.2f+%.2fi\n",a+c,b+d);//求和并输出
printf("两复数之差为%.2f+%.2fi\n",a-c,b-d);//求差并输出
resultr=a*c-b*d;
resulti=a*d+b*c;
printf("两复数之积为%.2f+%.2fi\n",resultr,resulti);//求积并输出
resultr=(a*c+b*d)/(c*c+d*d);
resulti=(b*c-a*d)/(c*c+d*d);
printf("两复数之商为%.2f+%.2fi\n",resultr,resulti);//求商并输出
}
3.输入一个实数,输出它的平方根值,如果输入数小于0,输出“输入数据错误”的提示。
#include"stdio.h"
#include"math.h"
main()
{
floata,b,c;
printf("请输入任意正实数:
");
scanf("%f",&a);
if(a<0)
printf("输入数据错误\n");
else
{
b=sqrt(a);
c=-b;
printf("%.2f的平方根是%.2f和%.2f\n",a,b,c);
}
}
4.输入三个字符后,请按各字符ASCII码从大到小的顺序输出这些字符。
#include"stdio.h"
main()
{
chara,b,c,t;
printf("请输入三个字符");
a=getchar();//输入字符串
b=getchar();
c=getchar();
//比较第一个和第二个
if(a
{
t=a;a=b;b=t;//完成交换,
}
//比较第一个和第三个
if(a{
t=a;a=c;c=t;//完成交换,
}
//比较第二个和第三个
if(b{
t=b;b=c;c=t;//完成交换,
}
printf("字符由大到小顺序是%c,%c,%c",a,b,c);
}
5.任意输入三条边的长度,判断能否构成三角形?
若能构成三角形,是等边三角形、等腰三角形还是其它三角形?
#include"stdio.h"
main()
{
floata,b,c,t;
printf("请输入三个数:
\n");
scanf("%f%f%f",&a,&b,&c);
//将边按从大到小顺序存放在a,b,c变量中
if(a
{
t=a;a=b;b=t;
}
if(a{
t=a;a=c;c=t;
}
if(b{
t=b;b=c;c=t;
}
if(a
{
printf("能构成三角形\n");//两边之和大于第三边
if(a==b||b==c||a==c)//有两边相等的情况
{
if(a==b&&b==c)//三边全等
printf("是等边三角形\n");
else
printf("是等腰三角形\n");
}
else
printf("是其它三角形\n");
}
else
printf("不能构成三角形\n");
}
6.假设用1,2,……7分别表示星期一、星期二、……星期日。
现输入一个数字,输出对应的星期几的英文单词。
main()
{
intweek;
printf("请输入任意数值(1-7):
");
scanf("%d",&week);
switch(week)
{
case1:
printf("Mon.\n");break;
case2:
printf("Tue.\n");break;
case3:
printf("Wed.\n");break;
case4:
printf("Tur.\n");break;
case5:
printf("Fri.\n");break;
case6:
printf("Sat.\n");break;
case7:
printf("Sun.\n");break;
default:
printf("输入错误!
\n");
}
}
7.判断输入字符的类型
#include"stdio.h"
main()
{
charc;
printf("inputacharacter:
");
c=getchar();
if(c<32)
printf("Thisisacontrolcharacter\n");
elseif(c>='0'&&c<='9')
printf("Thisisadigit\n");
elseif(c>='A'&&c<='Z')
printf("Thisisacapitalletter\n");
elseif(c>='a'&&c<='z')
printf("Thisisasmallletter\n");
else
printf("Thisisanothercharacter\n");
}
8.1862年,英国的天文学家哈雷发现一颗大慧星描绘的曲线和1531年,1607年的慧星惊人地相似,便大胆断定,这是同一天体的三次出现,并预言它将于76年后再度回归。
这就是著名的哈雷慧星,它的回归周期大约是76年。
请你编制程序,列出哈雷慧星在1607~3000年的回归时间表。
#include"stdio.h"
main()
{
intyear;
for(year=1607;year<3000;year=year+76)
{
if(year<3000)
printf("%5d",year);
}
printf("\n");
}
9.根据第五次全国人口普查的结果,截至2000年11月1日,北京市的常住人口总数为1381.9万。
如果从2001年初开始,北京市把全市人中的年增长率控制在0.13%以内,到2008年举办奥运会时(按到年底计算),北京市最多有多少常住人口?
同时请你按年输出每年的常住人口数。
#include"stdio.h"
main()
{
floatpeople;
intyear;
people=1381.9;
for(year=2001;year<2009;year++)
{
people*=1+0.0013;
printf("%d年,人口%.3f\n",year,people);
}
}
10.若一个口袋中放有12个球,其中有3个红的,3个白的和6个黑的,问从中任取8个共有多少种不同的颜色搭配?
#include
main()
{
inti,j,count=0;
printf("红球白球黑球\n");
printf("...................\n");
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if((8-j-i)<=6)
printf("%2d:
%3d%3d%3d\n",++count,i,j,8-i-j);
}
11.在一次演讲比赛中,有10个评委为参赛的选手打分,按百分制计分,选手最后得分为10个分数的平均分。
/*Example36.c演讲比赛计分器*/
#include
main()
{
inti=1;//循环计数器
floatsum,score;//sum为总分,score为评委的评分
sum=0;
while(i<=10)
{
printf("请输入第%d个评委的评分",i);
scanf("%f",&score);//输入每个评委的评分
sum=sum+score;//累加求和
i++;
}
printf("该选手的平均分为%.2f\n",sum/10);//计算并输出平均值
}
12.在一次歌星大奖赛中,有10个评委为参赛的选手打分,选手最后得分为去掉一个最高分和一个最低分后的平均分。
#include
main()
{
intscore,i,max,min,sum;
max=0;
min=100;
sum=0;
for(i=1;i<=10;i++)
{
printf("Inputnumber%d--",i);
scanf("%d",&score);
sum+=score;
if(score>max)max=score;
if(score}
printf("Canceledmaxscore:
%d\n",max);
printf("Canceledminscore:
%d\n",min);
printf("Averagescore:
%d\n",(sum-max-min)/8);
}
13.如果能将一张厚度为0.05mm的报纸对折,再对折,再对折……对折50次后,报纸的厚度是多少?
/*Example38.c纸的对折问题*/
#include"stdio.h"
main()
{
doublea=0.0005;//a表示纸的厚度,初始为0.0005米
inti;
for(i=1;i<=50;i++)//对折50次
{
a=a*2;//每对折一次厚度是原来的2倍
}
printf("这张纸对折50次后厚度为%.2f米\n",a);//保留两位小数输出
}
14.求具有
性质的四位数。
#include
main()
{
intn,ab,cd;
printf("下面是满足条件的四位数:
\n");
for(n=1000;n<10000;n++)//四位数n的取值范围1000~9999
{
ab=n/100;//截取n的前两位数存于ab
cd=n%100;//截取n的后两位存于cd
if((ab+cd)*(ab+cd)==n)//判断n是否为所求的四位数
printf("%d",n);
}
printf("\n");
}
15.输入一个自然数,判断该数是否为素数,如果是素数,输出“YES”,否则输出“NO”。
#include
#include
main()
{
intn,i,flag=1;//flag为标记变量
printf("请输入任意一个数:
\n");
scanf("%d",&n);
for(i=2;i<=n-1;i++)
if(n%i==0)
{
flag=0;
break;//跳出循环
}
if(flag==1)printf("YES\n");
elseprintf("NO\n");
}
16.输出100以内能被9整除的数,按照每行5个数的格式输出。
#include
main()
{
intn,count=0;//count为输出计数器
for(n=9;n<=100;n++)
{
if(n%9!
=0)
continue;//能被9整除则跳出本次循环检查下一个数
printf("%d\t",n);
count++;
if(count%5==0)//每输出5个数就输出回车
printf("\n");
}
printf("\n");
}
17.编程列出100~400之间所有的素数,按每行10个数的格式输出。
#include
#include
main()
{
intn,i,count=0;//count为输出计数器
for(n=100;n<=400;n++)
{
for(i=2;i<=sqrt(n);i++)
if(n%i==0)//如果n能被i整除,则不是素数,
{
break;//跳出内嵌的循环,检查外循环的下一个数
}
if(i>sqrt(n))//如果i>sqrt(n),即为素数
{
printf("%5d",n);//按5位宽度的格式输出
count++;
if(count%10==0)printf("\n");//按每行10个数的格式输出
}
}
printf("\n");
}
18.马克思手稿中的趣味数学问题:
有30个人,其中有男人、女人和小孩,在一家饭馆吃饭共花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?
#include
main()
{
intx,y,z;
printf("MenWomenChildren\n");
for(x=0;x<=10;x++)
{
y=20-2*x;
z=30-x-y;
if(3*x+2*y+z==50)
printf("%-8d%-8d%-8d\n",x,y,z);//按宽度间隔左对齐输出
}
}
19.某单位要进行工资改革,增加金额取决于工龄和现工资两个因素:
对于工龄大于等于20年的,如果现工资高于2000,加400元,否则加280元;对于工龄小于20年的,如果现工资高于1500,加350元,否则加220元。
工龄和现工资从键盘输入,编程求加工资后的员工工资。
#include
main()
{
floats1,s;
inty;
printf("请输入原工资s1,工龄y:
");
scanf("%f,%d",&s1,&y);
if(y>=20)
{
if(s1>=2000)s=s1+400;
elses=s1+280;
}
else
{
if(s1>=1500)s=s1+350;
elses=s1+220;
}
printf("现工资s=%.2f\n",s);
}
20.利用辗转相除法求两个正整数的最大公因子。
#include
main()
{
intm,n,r;
printf("请任意输入两个正整数:
");
scanf("%d,%d",&m,&n);
while(n!
=0)
{
r=m%n;//求余数
m=n;
n=r;
}
printf("最大公约数是%d\n",m);
}
21.一个三位的自然数的七进制表示是一个三位数,九进制表示也是一个三位数,且这两种表示的数码顺序正好相反,求这个自然数。
#include
main()
{
inti,j,k;
for(i=1;i<7;i++)//穷举九进制的第一位数
for(j=0;j<7;j++)//中间一位可以是零
for(k=1;k<7;k++)
if(i*9*9+j*9+k==i+j*7+k*7*7)//判断是否满足题意
{
printf("这个三位数是:
");
printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k,j,i,i,j,k,i*9*9+j*9+k);
}
}
22.在举办校园演讲比赛的时候要计算选手的最后得分,比赛得分计算规则为:
去掉一个最高分和一个最低分,然后求剩余得分的平均分,设计程序来实现这样的功能。
#include
#defineN12//定义符号常量
voidmain()
{
floatscore[N],min,max,sum,avg;
inti;
printf("请输入12位评委给出的分数:
\n");
for(i=0;iscanf("%f",&score[i]);//输入选手成绩
min=max=sum=score[0];//将score[0]值作为max,min,sum的初始值
for(i=1;i{
if(maxif(min>score[i])min=score[i];//查找最低分
sum=sum+score[i];//求总分
}
avg=(sum-max-min)/(N-2);//求去掉最高最低分后的平均分
printf("最高分:
%6.2f,最低分:
%6.2f\n",max,min);
printf("选手的最后得分是:
%6.2f\n",avg);
}
23.随机产生两个矩阵,矩阵A4×3与矩阵B3×5,输出两个矩阵,计算A×B,并输出结果矩阵。
#include
#include
#include
#defineM14
#defineN13
#defineM23
#defineN25
voidmain()
{
intA[M1][N1],B[M2][N2];
longintC[M1][N2];
inti,j,k;
srand(time(0));//用一个随机值初始化随机数发生器
for(i=0;ifor(j=0;jA[i][j]=rand()%20;//返回一个0-20之间的随机数赋值给A[i][j]
for(i=0;ifor(j=0;jB[i][j]=rand()%30;//返回一个0-30之间的随机数赋值给B[i][j]
printf("矩阵A:
\n");//输出矩阵A
for(i=0;ifor(j=0;jprintf("%8d",A[i][j]);
printf("\n");
}
printf("矩阵B:
\n");//输出矩阵B
for(i=0;ifor(j=0;jprintf("%8d",B[i][j]);
printf("\n");
}
for(i=0;ifor(j=0;jC[i][j]=0;
for(k=0;kC[i][j]+=A[i][k]*B[k][j];
}
printf("矩阵C:
\n");//输出矩阵C
for(i=0;ifor(j=0;jprintf("%10d",C[i][j]);
printf("\n");
}
}
24.将给定字符串“Cprogram”逆序存储并输出。
#include
voidmain()
{
charstr[]=”Youarethebest!
”;//字符数组初始化
charch;
inti,n;
n=sizeof(str)-1;//sizeof(str)用来求字符串长度
for(i=0;i{
ch=str[i];//ch作为中间变量,临时存储字符
str[i]=str[n-i-1];
str[n-i-1]=ch;
}
printf(“%s\n”,str);
}
25.求逆序
#include"stdio.h"
voidmain()
{
inta[7]={32,43,3,9,12,87,99},i,temp;
printf("Theoriginalarrayis:
\n");
for(i=0;i<7;i++)
printf("%d",a[i]);
for(i=0;i<7/2;i++)
{
temp=a[i];
a[i]=a[7-i-1];
a[7-i-1]=temp;
}
printf("\nThereversedarrayis:
\n");
for(i=0;i<7;i++)
printf("%d",a[i]);
printf("\n");
}
26.数据加密
#include"stdio.h"
voidmain()
{
intd,sd[4],i,t;
printf("请输入传输数据:
");
scanf("%d",&d);
sd[0]=d%10;
sd[1]=d%100/10;
sd[2]=d%1000/100;
sd[3]=d/1000;
for(i=0;i<4;i++)
{
sd[i]+=5;
sd[i]%=10;
}
for(i=0;i<2;i++)
{
t=sd[i];
sd[i]=sd[3-i];
sd[3-i]=t;
}
d=sd[0]+sd[1]*10+sd[2]*100+sd[3]*1000;
printf("%d\n",d);
}
27.输入一串字符,计算其中空格的个数,请编写程序实现。
#include
#include
voidmain(