C语言练习题库及答案.docx

上传人:b****5 文档编号:6731478 上传时间:2023-01-09 格式:DOCX 页数:45 大小:42.45KB
下载 相关 举报
C语言练习题库及答案.docx_第1页
第1页 / 共45页
C语言练习题库及答案.docx_第2页
第2页 / 共45页
C语言练习题库及答案.docx_第3页
第3页 / 共45页
C语言练习题库及答案.docx_第4页
第4页 / 共45页
C语言练习题库及答案.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

C语言练习题库及答案.docx

《C语言练习题库及答案.docx》由会员分享,可在线阅读,更多相关《C语言练习题库及答案.docx(45页珍藏版)》请在冰豆网上搜索。

C语言练习题库及答案.docx

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;i

for(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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1