C语言实验题.docx
《C语言实验题.docx》由会员分享,可在线阅读,更多相关《C语言实验题.docx(18页珍藏版)》请在冰豆网上搜索。
C语言实验题
C语言实验题
1.买糖果
题目描述:
小瑜是个爱吃糖果的馋鬼,天天嚷着要爸爸买糖果,可是爸爸很忙,哪有时间啊,于是就让小瑜自己去了,糖果3角钱一块,爸爸给小瑜n元钱,请你告诉小瑜最多能买几块糖,还剩几角钱?
输入:
输入爸爸给小瑜的钱n元,n为整数。
输出:
小瑜最多能买回的糖块数以及剩下的钱(单位为:
角),用空格分隔。
样例输入2样例输出62
代码:
int main()
{
int n,a,b;
scanf("%d",&n);
a=10*n/3;
b=10*n%3;
printf("%d %d",a,b);
return 0;
}
温度转换
题目描述:
输入一个华氏温度,输出摄氏温度,其转换公式为:
C=5(F-32)/9
输入:
输入数据只有一个实数,即华氏温度。
输出:
输出数据只有一个,即摄氏温度,保留2位小数。
样例输入:
32.0
样例输出:
0.00
代码:
int main()
{
float f,c;
scanf("%f",&f);
c=5*(f-32)/9;
printf("%.2f",c);
return 0;
}
三角形面积
题目描述:
已知三角形的边长a、b和c,求其面积。
输入:
输入三边a、b、c
输出:
输出面积,保留3位小数。
样例输入:
122.5
样例输出:
0.950
代码:
int main()
{
float f,c;
scanf("%f",&f);
c=5*(f-32)/9;
printf("%.2f",c);
return 0;
}
一元二次方程
题目描述:
解一元二次方程ax2+bx+c=0的解。
输入:
a,b,c的值。
输出:
两个根X1和X2,其中X1>=X2。
。
结果保留两位小数。
样例输入:
15-2
样例输出:
0.37-5.37
代码:
# include
int main()
{
float a,b,c,disc,p,q,x1,x2;
scanf("%f %f %f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/2*a;
q=sqrt(disc)/2*a;
x1=p+q;x2=p-q;
printf("%.2f %.2f",x1,x2);
return 0;
}
圆柱体计算
题目描述:
已知圆柱体的底面半径r和高h,计算圆柱体底面周长和面积、圆柱体侧面积以及圆柱体体积。
输入:
输入数据有一行,包括2个正实数r和h,以空格分隔。
输出:
输出数据一行,包括圆柱体底面周长和面积、圆柱体侧面积以及圆柱体体积,以空格分开,所有数据均保留2位小数。
样例输入:
12
样例输出:
6.283.1412.576.28
提示:
圆周率定义为3.1415926。
代码:
# define pie 3.1415926
int main()
{
float h,r,l,s1,s2,v;
scanf("%f %f",&r,&h);
l=2.0*pie*r;
s1=pie*r*r;
s2=l*h;
v=s1*h;
printf("%.2f %.2f %.2f %.2f",l, s1,s2,v);
return 0;
}
找中间数
题目描述:
输入三个整数,找出其中的中间数。
输入:
输入3个整数。
输出:
输出中间数
样例输入:
123
样例输出:
2
代码:
int main()
{
int a,b,c,m;
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{if(b>c) m=b;else {if(a>c) m=c;else m=a;}}
else
{if(a>c) m=a;else {if(b>c) m=c;else m=b;}}
printf("%d",m);
return 0;
}
某年某月的天数
题目描述:
输入年和月,判断该月有几天?
输入:
输入年和月,格式为年\月
输出:
输出该月的天数。
样例输入:
2009\1
样例输出:
31
代码:
#include
int main()
{int y,m,length;
scanf("%d\\%d",&y,&m);
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
length=31;
else if(m==4||m==6||m==9||m==11)
length=30;
else if(m==2)
{if((y%4==0&&y%100!
=0)||(y%400==0))
length=29;
else length=28;
}
printf("%d",length);
return 0;
}
整数位
题目描述:
输入一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别输出每一位数字;(3)按逆序输出各位数字。
输入:
输入一个不多于5位的正整数。
输出:
输出数据有3行,第一行为正整数位数,第二行为各位数字,第三行为逆序的各位数字。
样例输入:
123
样例输出:
3
123
321
代码:
# include
int main()
{
long int num;
int place,indiv,ten,hundred,thousand,ten_thousand;
scanf("%ld",&num);
if(num>9999) place=5;
else if(num>999) place=4;
else if(num>99) place=3;
else if(num>9) place=2;
else place=1;
printf("%d\n",place);
ten_thousand=num/10000;
thousand=(num-ten_thousand*10000)/1000;
hundred=(num-thousand*1000-ten_thousand*10000)/100;
ten=(num-hundred*100-thousand*1000-ten_thousand*10000)/10;
indiv=(num-ten*10-hundred*100-thousand*1000-ten_thousand*10000);
switch(place)
{case 5:
printf("%d %d %d %d %d\n",ten_thousand,thousand,hundred,ten,indiv);
printf("%d %d %d %d %d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case 4:
printf("%d %d %d %d\n",thousand,hundred,ten,indiv);
printf("%d %d %d %d\n",indiv,ten,hundred,thousand);
break;
case 3:
printf("%d %d %d\n",hundred,ten,indiv);
printf("%d %d %d\n",indiv,ten,hundred);
break;
case 2:
printf("%d %d\n",ten,indiv);
printf("%d %d\n",indiv,ten);
break;
case 1:
printf("%d\n",indiv);
printf("%d\n",indiv);
break;}
return 0;
}
两个数比较
题目描述:
求2个数中较大者。
输入:
第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数
输出:
输出N行,每一行的值为每组数中较大的整数
样例输入:
2
12
1510
样例输出:
2
15
代码:
#include
intmain()
{intn,a,b,max;
scanf("%d",&n);
do
{scanf("%d%d",&a,&b);
max=(a>b)?
a:
b;
printf("%d\n",max);
}while(--n);
return0;
}
保留字母
题目描述:
编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入:
一个字符串,长度不超过80个字符。
输出:
删掉非英文字母后的字符串。
样例输入:
abc123+xyz.5
样例输出:
abcxyz
代码:
#include
int main()
{char a[80];
int i;
scanf("%s",a);
for(i=0;i { if((a[i]>='A')&&(a[i]<='Z')||((a[i]>='a')&&(a[i]<='z')))
printf("%c",a[i]);}
return 0;
}
矩阵转置
题目描述:
输入N*N的矩阵,输出它的转置矩阵。
输入:
第一行为整数N(1≤N≤100)。
接着是一个N*N的矩阵。
输出:
转置矩阵。
样例输入:
2
12
12
样例输出:
11
22
代码:
#include
int main()
{int a[100][100];
int b[100][100],i,j,n;
scanf("%d", &n);
for(i=0;i{for(j=0;j{scanf("%d",&a[i][j]);
b[j][i]=a[i][j];}
}
for(i=0;i{for(j=0;jprintf("%d ",b[i][j]);
printf("\n");}
return 0;
}
素数
题目描述:
输出100->200之间的素数的个数,以及所有的素数。
输入:
无
输出:
100->200之间的素数的个数,以及所有的素数。
样例输入:
无
样例输出:
21
101103...197199
代码:
#include
int main()
{
int m,k,i,j,a[100],n=0;
j=0;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
{a[j]=m;
n=n+1;j++;}
}
printf("%d\n",n);
for(j=0;j {
printf("%4d",a[j]);}
return 0;
}
矩阵下三角元素之和
题目描述:
输入一个正整数n(1<=n<=10),再输入n*n的矩阵,要求求该矩阵的下三角元素之和。
输入:
输入包括n+1行
第一行为整数:
n
接下来的n行为矩阵数据
输出:
矩阵的下三角元素之和
样例输入:
5
12345
23456
34567
45678
56789
样例输出:
75
代码:
#include
int main()
{int a[10][10];
int i,j,n,s=0;
scanf("%d",&n);
for(i=0;i {for(j=0;j scanf("%d",&a[i][j]);}
for(i=0;i {for(j=0;j<=i;j++)
s=s+a[i][j];}printf("%d",s);return 0;
}
单词统计
题目描述:
从键盘输入一行字符,统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
输入:
输入只有一行句子。
仅有空格和英文字母构成。
输出:
单词的个数。
样例输入:
stablemarriageproblemConsistsofMatchingmembers
样例输出:
7
代码:
#include
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!
='\0';i++)
if(c==' ')word=0;
else if(word==0)
{
word=1;
num++;
}
printf(" %d",num);
return 0;
}
水仙花数
题目描述:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:
153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。
输入:
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
输出:
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
样例输入:
100120
300380
样例输出:
no
370371
代码:
#include
int main ()
{ int m,n,a,b,c,d,t;
while(scanf("%d %d",&m,&n)!
=EOF)
{
t=0;
for(d=m;d<=n;d++)
{
a=d/100;
b=d/10%10;
c=d%10;
if(d==a*a*a+b*b*b+c*c*c)
{
printf("%d ",d);
t=1;
}
}
if(t==1)printf("\n");
if(t==0)printf("no\n");
}
return 0;}
最小公倍数和最大公约数
题目描述:
从键盘输入两个正整数,求这两个正整数的最小公倍数和最大公约数,并输出。
输入:
输入包括一行。
两个以空格分开的正整数。
输出:
两个整数的最小公倍数和最大公约数。
样例输入:
68
样例输出:
242
代码:
#include
int main()
{int hcf(int u,int v);
int lcd(int u,int v,int h);
int u,v,h,l;
scanf("%d %d",&u,&v);
h=hcf(u,v);
l=lcd(u,v,h);
printf("%d %d",l,h);
return 0;
}
int hcf(int u,int v)
{int t,r;
if(v>u)
{t=u;u=v;v=t;}
while ((r=u%v)!
=0)
{u=v;v=r;}
return (v);}
int lcd(int u,int v,int h)
{return(u*v/h);}
求一个3*3矩阵对角线元素之和
题目描述:
给定一个3*3的矩阵,请你求出对角线元素之和。
输入:
按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。
输出:
对角线元素之和。
样例输入:
123
123
123
样例输出:
6
代码:
# include
int main()
{ int sum(int b[3][3]);
int a[3][3],s;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
s=sum(a);
printf("%d",s);
return 0;}
int sum(int b[3][3])
{int i,c=0;
for(i=0;i<3;i++)
c=c+b[i][i];
return (c);}
计算表达式
题目描述:
计算下列表达式值:
输入:
输入x和n的值,其中x为非负实数,n为正整数。
输出:
输出f(x,n),保留2位小数。
样例输入:
32
样例输出:
2.00
代码:
# include
#include
float s(float x,int n)
{ float f;
if(n==1) f=sqrt(1+x);
else
f=sqrt(n+s(x,n-1));
return (f);}
int main()
{float s(float x,int n);
float x,f;
int n;
scanf("%f %d",&x,&n);
f=s(x,n);
printf("%.2f",f);
return 0;}
多项式求和
题目描述:
多项式的描述如下:
1-1/2+1/3-1/4+1/5-1/6+...
现在请你求出该多项式的前n项的和。
输入:
输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。
输出:
对于每个测试实例n,要求输出多项式前n项的和。
每个测试实例的输出占一行,结果保留2位小数。
样例输入:
2
12
样例输出:
1.00
0.50
代码:
int main()
{int i,n,f,b=1;
float m,s,t;
int a[100];
scanf("%d",&n);
for(i=0;i{
scanf("%d",&a[i]);
f=a[i];m=1;t=1;s=0;b=1;
while(f>0)
{s=s+t;
m=m+1;
b=-b;
t=b/m;
f--;}
printf("%.2f\n",s);}
return 0;
}
母牛的故事
题目描述:
有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0n=0表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入:
2
4
5
0
样例输出:
2
4
6
代码:
#include
int main()
{
long int n,i,a[55];
for(i=1;i<55;i++)
{if(i<=4&&i>=1)a[i]=i;
else if(4
a[i]=a[i-1]+a[i-3];
}
while(scanf("%d",&n),n)
printf("%ld\n",a[n]);
return 0;}
简单编码
题目描述:
将一串文本译成密码,密码的规律是:
将原来的小写字母全部翻译成大写字母,大写字母全部翻译成小写字母,数字的翻译规律如下:
0——>9,1——>8,2——>7,3——>6,4——>5,5——>4,6——>3,7——>2,8——>1,9——>0
然后将所有字符的顺序颠倒。
输入:
输入一串文本,最大字符个数不超过100。
输出:
输出编码后的结果。
样例输入:
china
样例输出:
ANIHC
代码:
#include
int main()
{char c[101];int i,j;
for(i=0;(c[i]=getchar())!
='\n';i++)
{if(c[i]>='a'&&c[i]<='z')
c[i]-=32;
else if(c[i]>='A'&&c[i]<='Z')
c[i]+=32;
else if(c[i]>='0'&&c[i]<='9')
c[i]=105-c[i];
}
for(j=i-1;j>=0;j--)
printf("%c",c[j]);
return 0;
}
三个数排序
题目描述:
输入三个整数x,y,z,请把这三个数由小到大输出。
输入:
输入数据包含3个整数x,y,z,分别用逗号隔开。
输出:
输出由小到大排序后的结果,用空格隔开。
样例输入:
213
样例输出:
123
代码:
# include
int main()
{
void swap(int *p1,int *p2);
int x,y,z;
int *p1,*p2,*p3;
scanf("%d,%d,%d",&x,&y,&z);
p1=&x;p2=&y;p3=&z;
if(x>y) swap(p1,p2);
if(x>z) swap(p1,p3);
if(y>z) swap(p2,p3);
printf("%d %d %d",x,y,z);
return 0;
}
void swap(int *p1,int *p2)
{
int p;
p=*p1;*p1=*p2;* p2=p;
}
字符串排序
题目描述:
输入3个字符串,按字典序从小到大进行排序。
输入:
输入数据有一行,分别为3个字符串,用空格分隔。
输出:
输出排序后的三个字符串,用空格分隔。
样例输入:
abcdcdefbcde
样例输出:
abcdbcdecdef
代码:
int main()
{void swap(char *p1,char *p2);
char n1[20],n2[20],n3[20];
scanf("%s %s %s",n1,n2,n3);
if(strcmp(n1,n2)>0)swap(n1,n2);
if(strcmp(n1,n3)>0)swap(n1,n3);
if(strcmp(n2,n3)>0)swap(n2,n3);
printf("%s %s %s",n1,n2,n3);
return 0;
}
void swap(char *p1,char *p2)
{char p[20];