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