C语言练习题库及答案.docx
《C语言练习题库及答案.docx》由会员分享,可在线阅读,更多相关《C语言练习题库及答案.docx(45页珍藏版)》请在冰豆网上搜索。
C语言练习题库及答案
1.将所有水仙花数保存到维数组a中。
(所谓水仙花数是指一种三位数,其各位数字立方和等于该数自身。
例如:
153=1*1*1+5*5*5+3*3*3)
#include
intmain()
{
ints[100]={0};
inti;
intk=0;//表达水仙花数个数。
inta,b,c;
for(i=100;i<1000;i++)
{
a=i%10;
b=(i%100)/10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
s[k]=i;
printf("%d\n",s[k]);
k++;
}
}
}
2.按下面公式求sum值。
sum=1-2+3-4+5-6+……+99–100
#include
intmain()
{
inti;
intk=1;
intsum=0;
for(i=1;i<=100;i++)
{
sum=sum+k*i;
k=-1*k;
}
printf("%d\n",sum);
}
3.编写代码,实现冒泡排序,并规定:
(1)在有序数组中,接着插入一种元素,新数组依然有序
(2)在数组中删除一种元素,新数组依然有序
(3)对该数组进行逆序存储
#include
intmain()
{
voidsort(inta[],intm);
inta[100]={1,22,55,8,9,29,3,5,244,24};
inti;
intx;
sort(a,10);
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
/*插入一种数后,依然按序输出*/
printf("\n");
printf("请输入要插入数字:
");
scanf("%d",&x);
insert(x,a,11);
for(i=0;i<11;i++)
{
printf("%d",a[i]);
}
/*逆序输出序输出*/
printf("\n");
for(i=10;i>=0;i--)
{
printf("%d",a[i]);
}
}
voidinsert(intx,inta[],intm)
{
voidsort(inta[],intm);
a[m-1]=x;
sort(a,m);
}
/*冒泡排序*/
voidsort(inta[],intm)//m表达数组个数
{
inti,j,t;
for(i=0;ifor(j=0;j{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
4.编写程序实现如下功能,可以将下面所示6*6二维矩阵读入并存储到二维数组中,并求其对角线之和,以及最大数,并输出最大数所在行列下标。
3516261924
3327212325
3192222720
82833171015
30534121416
43629131811
#include
intmain()
{
inti,j;
inta[6][6]={{35,1,6,26,19,24},
{3,32,7,21,23,25},
{31,9,2,22,27,20},
{8,28,33,17,10,15},
{30,5,34,12,14,16},
{4,36,29,13,18,11}
};
intmax=a[0][0];
intcol,row;
intsum=0;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
if(i==j||i+j==5)sum=sum+a[i][j];
}
printf("%d\n",sum);
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
if(a[i][j]>=max)
{
max=a[i][j];
col=j;
row=i;
}
}
printf("max=%d,row=%d,col=%d\n",max,row,col);
}
5.对任意输入5个字符数组进行排序
例如:
输入
abcdeffdccccefg
得到
abccccdefefgfdc
6.求2个数组交集
输入
{5,6,7,9,10}
{2,3,4,5,6}
得到
{5,6}
#include
intmain()
{
inta[5]={5,6,7,9,10};
intb[5]={2,3,4,5,6};
inti,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(a[i]==b[j])printf("%d",a[i]);
}
}
}
7.求[m,n]之间既不能被7整除也不能被5整除整数之和,m和n值由键盘输入。
例如,如果m和n值分别为10和20,则计算成果为:
106。
#include
intmain()
{
intm,n;
inti,sum=0;
printf("请输入m和n:
");
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
if(i%7!
=0&&i%5!
=0)sum=sum+i;
}
printf("%d",sum);
}
8.求字符串长度并输出。
例如,当字符串1为"ThisIsacProgram"
则应输出:
Resultis:
19
#include
intmain()
{
charstr[100]="";
inti=0;//str下标
gets(str);
while(str[i]!
='\0')
{
i++;
str[i]=str[i]+1;
}
printf("字符串长度为:
%d",i);
}
9.将字符串中所有大写字母转换为小写,其他字符不变(不使用转换函数)。
例如,当字符串为"ThisIsacProgram"
输出:
"thisisacprogram"
#include
intmain()
{
charstr[100]="";
inti=0;
printf("请输入要转换字符串:
");
gets(str);
while(str[i]!
='\0')
{
if(str[i]>='A'&&str[i]<='Z')str[i]=str[i]+32;
i++;
}
printf("%s",str);
}
10.给学生评估成绩,若学生成绩在60-69则输出“及格”,70-89分为“良好”;90-100分为“”先进,60分一下为“不及格”,分别用if-else语句和switch语句编程实现。
#include
intmain()
{
intscore;
printf("请输入分数:
");
scanf("%d",&score);
if(score<60)
printf("不及格\n");
elseif(score<70)
printf("及格\n");
elseif(score<90)
printf("良好\n");
else
printf("先进\n");
}
#include
intmain()
{
intscore;
intclass;
printf("请输入分数:
");
scanf("%d",&score);
class=score/10;
switch(class)
{
case9:
printf("先进\n");
break;
case8:
case7:
printf("良好\n");
break;
case6:
printf("及格\n");
break;
default:
printf("不及格\n");
break;
}
}
11:
若有3个字符串s1.,s2,s3,其中,s1=“abcdef”,s2=“123456”,规定用字符数组实现将s1内容复制到s3中,并将s2内容添加在s3背面功能,最后输出字符串s3
#include
intmain()
{
chars1[100]="abcdef";
chars2[100]="123456";
chars3[200];
inti=0;//表达s1下标
intj=0;//表达s2下标
while(s1[i]!
=0)
{
s3[i]=s1[i];
i++;
}
while(s2[j]!
=0)
{
s3[i]=s2[j];
j++;
i++;
}
s3[i]='\0';
printf("%s",s3);
}
12:
编写一种通用函数swap(),在main函数中调用可以实现2个数互换。
#include
intmain()
{
voidswap(int*p1,int*p2);
inta,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
voidswap(int*p1,int*p2)
{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
13.设计程序输出如下杨辉三角形(正三角形),共6行:
#include
intmain()
{
inta[7][15]={0};
inti,j;
a[0][7]=1;
for(i=1;i<7;i++)
{
for(j=1;j<14;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
for(i=0;i<7;i++)
{
for(j=0;j<15;j++)
{
if(a[i][j]!
=0)
printf("%2d",a[i][j]);
else
printf("");
}
printf("\n");
}
}
14.设计程序求10000以上最小素数。
#include
intmain()
{
inti=10000;
while
(1)
{
i++;
if(sushu(i))break;
}
printf("%d",i);
}
intsushu(intx)
{
inti;
for(i=2;i<=x-1;i++)
if(x%i==0)break;
if(i==x)
return1;
else
return0;
}
15.输出九九乘法表。
#include
intmain()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
if(i>=j)printf("%2d*%2d=%2d",i,j,i*j);
}
printf("\n");
}
}
16.输入一种不超过五位正整数,输出其逆数。
例如输入12345,输出应为54321。
#include
intmain()
{
intx;
scanf("%d",&x);
while(x!
=0)
{
printf("%d",x%10);
x=x/10;
}
}
17.结合书上打印菱形思想,打印出如下图形:
a
bcd
efghi
gklmnop
qrstu
vwx
y
#include
intmain()
{
inti,j,k;
intm=97;
for(i=1;i<=4;i++)
{
for(j=4-i;j>0;j--)
{
printf("");
}
for(k=1;k<=2*(i-1)+1;k++)
{
printf("%c",m);
m++;
}
printf("\n");
}
for(i=1;i<=4-1;i++)
{
for(j=1;j<=i;j++)
{
printf("");
}
for(k=2*(4-i-1)+1;k>0;k--)
{
printf("%c",m);
m++;
}
printf("\n");
}
}
18.试用C语言求解“百钱百鸡”问题。
百钱买百鸡,鸡翁一值钱三,鸡母一值钱二,鸡雏三值钱一,问鸡翁、鸡母、鸡雏各几何?
#include
intmain()
{
intx,y,z;
intpos=0;
for(x=1;x<=34;x++)
{
for(y=1;y<=50;y++)
{
for(z=1;z<=300;z++)
{
if(3*x+2*y+z/3==100&&z%3==0)
{
pos=1;
break;
}
}
if(pos==1)break;
}
if(pos==1)break;
}
printf("¼¦ÎÌ=%d¼¦Ä¸=%d¼¦³û=%d",x,y,z);
}
19.斐氏数列是公元13世纪数学家斐波拉契创造。
即:
1,2,3,5,8,13,21,34,55,89,„„,输出其前15项。
#include
intmain()
{
intx,y,z;
intpos=0;
for(x=1;x<=34;x++)
{
for(y=1;y<=50;y++)
{
for(z=1;z<=300;z++)
{
if(3*x+2*y+z/3==100&&z%3==0)
{
pos=1;
break;
}
}
if(pos==1)break;
}
if(pos==1)break;
}
printf("¼¦ÎÌ=%d¼¦Ä¸=%d¼¦³û=%d",x,y,z);
}
20.编写一种函数deletechar(),使字符串中尾部*号不得多于n个;若多于n个,则删除多余*号;若少于或等于n个,则什么也不做,字符串中间和前面*号不删除。
例如,字符串内容为:
****A*BC*DEF*G*******,若n值为4,删除后,字符串中内容应当是:
****A*BC*DEF*G****;若n值为7,则字符串中内容仍为****A*BC*DEF*G*******。
n值在主函数中输入。
#include
intmain()
{
voiddeletechar(charstr[],intn);
intn;
chars[1000];
printf("请输入一种带*字符串:
");
scanf("%s",&s);
printf("请输入背面保存*数量:
");
scanf("%d",&n);
deletechar(s,n);
printf("%s",s);
}
voiddeletechar(charstr[],intn)
{
inti=0;
intk=0;//表达*数量
intpos=0;//最后与否有*
while(str[i]!
='\0')
{
if(str[i]=='*')
{
pos=1;
k++;
}
else
{
pos=0;
k=0;
}
i++;
}
while(pos!
=0&&k>=n)
{
str[i]='\0';
k--;
i--;
}
}
21.找出形参字符串中浮现频率最高字母(不区别大小写),并记录其浮现次数。
例如,形参s所指字符串为:
abcAbsmaxless,程序执行后输出结果为:
letter‘a‘:
3timesletter‘s‘:
3times。
#include
intmain()
{
charstr[100];
ints[26]={0};
inti=0;
scanf("%s",&str);
while(str[i]!
='\0')
{
if(str[i]>='A'&&str[i]<='Z')
s[str[i]-65]++;
elseif(str[i]>='a'&&str[i]<='z')
s[str[i]-97]++;
i++;
}
for(i=0;i<26;i++)
{
if(s[i]>0)printf("%s中字母%c浮现频次是%d\n",str,i+65,s[i]);
}
}
22.设计函数change(),将形参a所指数组中前半某些元素中值和后半部分元素中值互换。
形参n中存储数组中数据个数,若n为奇数,则中间元素不动。
若a所指数组中数据依次为:
1、2、3、4、5、6、7、8、9,则调换后为:
6、7、8、9、5、1、2、3、4。
#include
intmain()
{
voidchange(intx[],intm);
inta[10]={1,2,3,4,5,6,7,8,9,10};
intb[9]={1,2,3,4,5,6,7,8,9};
inti;
change(a,10);
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
change(b,9);
for(i=0;i<9;i++)
printf("%d,",b[i]);
printf("\n");
}
voidchange(intx[],intm)
{
inti,temp;
if(m%2==0)
{
for(i=0;i{
temp=x[i];
x[i]=x[m/2+i];
x[m/2+i]=temp;
}
}
else
{
for(i=0;i{
temp=x[i];
x[i]=x[m/2+i+1];
x[m/2+i+1]=temp;
}
}
}
23.编写一种函数dtob(),在main函数中读入一种10进制数,dtob(),可以将该10进制数转换成一种二进制字符串,并返回给调用函数。
#include
#include
intmain()
{
voiddtop(intx,chars[]);
chars[100];
inti=0;
intx;
printf("请输入十进制数:
");
scanf("%d",&x);
dtop(x,s);
for(i=strlen(s)-1;i>=0;i--)
{
printf("%c",s[i]);
}
}
voiddtop(intx,chars[])
{
inti=0;
charm=0;
while(x/2!
=0)
{
if(x%2==0)
m='0';
else
m='1';
s[i]=m;
x=x/2;
i++;
}
s[i]='1';
s[++i]='\0';
}
24.
编一程序每月依照每月上网时间计算上网费用,计算办法如下:
#include
intmain()
{
inthour;
floatprice;
printf("请输入本月上网小时数\n");
scanf("%d",&hour);
if(hour<=10)
price=30;
elseif(hour<50)
price=hour*3;
else
price=hour*2.5;
printf("本月上网费用%f",price);
}
规定当输入每月上网小时数,显示该月总上网费用
25.编写一种求直角三角形面积函数。
在main
函数中从键盘输入直角三角形两个直角边,然后调用该函数求该直角三角形面积(精准到小数点后2位)。
#include
intmain()
{
floatarea(floatx,floaty);
floata,b;
floats;
printf("请输入直角三角形2条边长度\n");
scanf("%f%f",&a,&b);
s=area(a,b);
printf("三角形面积是%.2f",s);
}
floatarea(floatx,floaty)
{
return0.5*x*y;
}
26.写一种函数,判断某一种四位数是不是玫瑰花数(所谓玫瑰花数即该四位数
各位数字四次方和正好等于该数自身,如:
1634=14+64+34+44)。
在主函数中从键盘任意输入一种四位数,调用该函数,判断该数与否为玫瑰花数,若是则输出“yes”,否则输出“no”.
#include
intmain()
{
intx;
printf("请输入一种正四位整数\n");
scanf("%d",&x);
if(rose(x)==1)
printf("yes\n");
else
printf("no");
}
introse(intx)
{
inta,b,c,d;
a=x/1000;
b=(x%1000)/100;
c=((x%1000)%100)/10;
d=x%10;
if(x==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
return1;
else