您的当前位置:首页正文

C语言编程题及答案

来源:帮我找美食网
C语言编程题

1.(*)求分数序列:1/2,2/3,3/5,5/8,8/13,13/21...... 前20项的和。

main()

{float i=1,j=2,t=0,s,n,m; for(n=1;n<=20;n++)

s=i/j,m=i,i=j,j=m+j,t=t+s; printf(\"t=%f\ }

2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde,输出edcba) main() {int i;

char c[10]; scanf(\"%s\ for(i=9;i>=0;i--) printf(\"%c\

} 3.(*)已知abc+cba=1333,其中a、b、c均为一位数,例如:617+716=1333, 518+815=1333, 试编程求出符合这一规律的a、b、c,并输出结果。 main()

{int a,b,c,x,y; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=1;c<=9;c++) { x=100*a+10*b+c; y=100*c+10*b+a; if(x+y==1333)

printf(\"x=%d,y=%d\ }

4.(*)利用海伦公式求三角形面积,三边长a,b,c由键盘输入。若输入的三边长不能构成 三角形,输出相应提示信息。海伦公式如下:其中s=(a+b+c)/2

三角形面积= s*(sa)*(sb)*(sc) #include\"math.h\" main()

{ float a,b,c,s,area;

scanf(\"%f,%f,%f\ s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c)); if(a+b>c&&a+c>b&&b+c>a) printf(\"area=%f\

else

.1 .

printf(\"no\"); } 5.(*)编程求出1!+2!+3!+…+8!+9!+10!的值并输出。 程序1: main()

{ int i,j;

double p=1, sum=0; for(i=1;i<=10;i++) { for(j=1;j<=i;j++) p=p*i;

sum=sum+p;p=1.0;} printf(\"sum=%f\ }

程序2:float fac(n)

int n; {float f;

if (n<0) printf(\"n<0,error!\"); else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); }

main()

{int h,s=0,n;

for(n=1;n<=4;n++) { h=fac(n); s=s+h;}

printf(\"s=1!+2!+...+10!=%d\\n\ }

程序3: main() { int i;

double p=1, sum=0; for(i=1;i<=10;i++) { p=p*i;

sum=sum+p;}

printf(\"sum=%f\ }

.2 .

6.(*)从键盘输入两个整数,输出其和,差,积,商。

#include main() {

int a,b,s,d,c; float p;

scanf(\"%d%d\ s=a+b; d=a-b; c=a*b; p=(a/b);

printf(\"s=a+b=%d\\nd=a-b=%d\\nc=a*b=%d\\np=a/b=%f\\n\ } 7.(**)输入若干个自然数,对奇数从大到小排序,对偶数从小到大排序,输出两种结果。 maxji(int a[],int n) { int i,j,k,t; for(i=0;i{k=i;

for(j=i+1;jif(a[k]{t=a[k];a[k]=a[j];a[j]=t;}

}}

#define N 10 main()

{int c[N],i,j; for(i=0;ifor(i=N-1;i>=0;i--) if(c[i]%2==0)

printf(\"%5d\ printf(\"\\n\"); for(i=0;iprintf(\"%5d\ }

8.(*)求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3 ,则153是一个“水仙花数”。

程序1: main()

{int i,j,k,a;

for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++)

if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)

printf(\"%d%d%d\\n\

}

程序:main()

{int m,i,j,k,a;

for(m=101;i<=999;m++) {i=m/100;

j=(m-m*100)/10;

.3 .

k=m%10;

if(i*i*i+j*j*j+k*k*k==m)

printf(\"%d\\n\

}

9.(*)试编程:判断输入的正整数是否既是5,又是7的整数倍数。若是则输出yes;否 则输出no。

#include main() {

int a;

scanf(\"%d\ if(a%5==0&&a%7==0) printf(\"yes\"); else

printf(\"no\"); }

10.(*)已有函数调用语句c=add(a,b);请编写aad函数,计算两个实数a和b的和,并返回和值。#include

int add(int a,int b) {

return (a+b); }

main() {

int a,b,c;

scanf(\"%d%d\ c=add(a,b);

printf(\"%d\\n\} 11.(*)有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,问共有几种换法。请编程实现。

程序1: main()

{int i,j,k,n=0;

for(i=1;i<19;i++) for(j=1;j<95;j++) for(k=1;k<98;k++)

if(5*i+j+0.5*k==100&&i+j+k==100) {printf(\"%d,%d,%d\\n\printf(\"%d\

}

12.(*)求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如: 2+22+222+2222+22222 程序1:main()

{int i, a,n;

long sum=0, b=1,c=1; scanf(\"%d,%d\for(i=1;i<=n;i++) {sum+=a*c; 程序3:main() b*=10;c+=b;} {long int sn=0,k=a; printf(\"%ld\int a,i,j; } scanf(\"%d\ for(i=1;i<=5;i++)

程序2:main() { k=10*k+a;

{ long int sn=0,k=0; sn=sn+k;

int a,i,j; } scanf(\"%d\ printf(\"%ld\\n\ for(i=1;i<=5;i++) } {for(j=1;j<=i;j++) k=10*k+a;

.4 .

sn=sn+k; k=0;}

printf(\"%ld\\n\ }

13.(*)编程输出如下图形(不能仅用printf语句): *

* * *

* * * * *

* * * * * * *

* * * * * * * * *

main()

{int i,k,j;

for(i=0;i<=4;i++)

{for(j=0;j<4-i;j++) printf(\" \");

for(k=0;k<=2*i;k++)

printf(\"*\");

printf(\"\\n\");} }

14.(*)用近似公式求自然对数的底e的值。

e≈1+1!+ + +……

#include\"math.h\" main()

{float i,j,e,p=1.0,sum=0.0; for(i=1;i<10 ;i++) {for(j=1;j<=i;j++) p=p*j;

sum=sum+1.0/p; p=1.0;} e=i+sum;

printf(\"%f\\n\

} 15.(*)请编程,用scanf()函数输入三个字符,对这三个字符各加一个整数1后,用 putchar()函数输出,且每输出一个字符换一行。

16.(*)请编程,用scanf()函数输入三个整数,输出其中不大不小的那个数,输出宽度为五位。

int findmid(int i,int j,int k)

{int n;

.5 .

if(ielse if(j>k) n=j; else n=k; return(n);}

main()

12!13!{int i,j,k,n;

scanf(\"%d%d%d\n=findmid(i,j,k); printf(\"%d\\n\}

17.(*)编程实现输出所有1~100之间能被9整除余2的数。

18.(*)编写一程序实现如下功能:输入1、2、3、4、5、6、7(分别对应星期一至星期日)中的任何一个数,便能输出与之对应的英文名称。如输入1,则输出Monday。 main()

{char day;

scanf(\"%c\swith(day)

{case '1':printf(\" monday\\n\");break; case '2':printf(\"tuesday\\n\"); break; case '3':printf(\"wednsday\\n\"); break; case '4':printf(\"thursday\\n\"); braek; case '5':printf(\" friday\\n\"); break; case '6':printf(\"saturday\\n\"); break; case '7':printf(\"sunday\\n\"); break; defult: printf(\"error\\n\");

19.(*)编一程序,对于给定的一个百分制成绩,输出相应的5分制成绩。设:90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。(用switch语句实现)。

main()

{int s,score;

scanf(\"%d\s=score/10; switch(s)

{case 10:printf(\"A\\n\");break; case 9:printf(\"A\\n\");break; case 8:printf(\"B\\n\");break; case 7:printf(\"C\\n\");break; case 6:printf(\"D\\n\");break; case 5: case 4: case 3: case 2:

case 1:printf(\"E\\n\");break; default:printf(\"error\"); }}

20.(*)试编程:判断输入的正整数是否既是5,又是7的整数倍数。若是则输出yes;否则输出no。

21.(**)一个数如果却好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出100之内的所有完数,并按下列格式输出其因子: 6 its factors are 1,2,3

main()

{int m,i,s;

for(m=2;m<1000;m++) { s=0;

for(i=1; i{ printf(\"%3d its factors are \ for(i=1;iif(m%i==0) printf(\"%4d\ printf(\"\\n\"); } }

} 22.(*)输入5对整数,请输出每对数中较大者 main()

{int i,j,a[5][2]; for(i=0;i<=4;i++) for(j=0;j<=1;j++)

scanf(\"%d\ for(i=0;i<=4;i++)

if(a[i][1]>a[i][0])

printf(\"%4d\\n\ else

printf(\"%4d\\n\ }

.6 .

23.(**)编程将一个3x3矩阵转置(行列互换)后输出。 main()

{int i,j, a[3][3],b[3][3]; for(i=0;i<=2;i++) for(j=0;j<=2;j++)

scanf(\"%d\for(i=0;i<=2;i++)

{for(j=0;j<=2;j++)

{print(“%5d”,a[i][j]); b[j][i]=a[i][j];} printf('\\n');} for(j=0;j<=2;j++) {for(i=0;i<=2;i++)

printf(\"%5d\printf(“\\n”);} }

24.(**)求一个一维数组的最大值,最小值和平均值(主函数调用并输出)。

程序2: 程序1:

main() float max(int n,float a[])

{void make(); {int i;

int a[10],i; float max;

extern int max,min; max=a[0];

extern float aver; for(i=0;ifor(i=0;i<10;i++) if(maxscanf(\"%d\return(max);

make(a,10); }

printf(\"max=%d,min=%d,aver=%.2f\; float min(int n,float a[])

} { int i;

int max,min; float aver; float min;

void make(int a[],int n) min=a[0];

{int i; float sum; for(i=0;imax=min=a[0]; if(min>a[i]) min=a[i];

sum=a[0]; return(min);

for(i=1;i{if(maxa[i]) min=a[i]; float aver(int n,float a[])

sum+=a[i];printf(\"%f\{ int i;

aver=(float)sum/n; } float sum=0,aver;

.7 .

for(i=0;isum=sum+a[i]; aver=sum/n; return(aver); }

#include\"math.h\" main()

{ int i;

float m,n,a[5],c; for(i=0;i<5;i++) scanf(\"%f\m=max(5,a); n=min(5,a); c=aver(5,a);

printf(\"%5f%5f%5f\\n\} 25.(**)编写函数,求一个不超过五位的十进制整数各位数值的和。(如:输入2634,输出15)

#include\"math.h\"

main()

{ int i,a[5],m,n=0; scanf(\"%d\for(i=0;i<=4;i++) {a[i]=m%10; n=n+a[i]; m=m-a[i]*10;

printf(\"%5d\printf('\\n'); printf(\"%d\}

26.(**)编程求出一个3x3矩阵的最大和最小元素及其下标。 main()

{int i,j,max,min,a[3][3],m1,n1,m2,n2; for(i=0;i<=2;i++)

for(j=0;j<=2;j++)

scanf(\"%d\ min=max=a[0][0];

.8 .

for(i=0;i<=2;i++)

for(j=0;j<=2;j++)

if(a[i][j]>max) {max=a[i][j];m1=I;n1=j;}

else if(a[i][j]{min=a[i][j];m2=i;n2=j;}

printf(\"max=%d,%3d,%3d,min=%d,%3d,%3d\ }

27.(**)有一个字符串,包含n 个字符,编写一个函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串。 main()

{char chs2[30]={0},chs1[30]=\"this is my first C program\"; int i,j,m;

scanf(\"%d\

for(i=m,j=0;i<30;i++,j++) chs2[j]=chs1[i]; chs2[29]='\\0'; printf(\"%s\}

28.(**)求一个3x3矩阵的对角线元素之和。 main()

{ int i,j,sum1=0,sum2=0,a[3][3]; for(i=0;i<=2;i++) for(j=0;j<=2;j++)

scanf(\"%d\for(i=0;i<=2;i++) {for(j=0;j<=2;j++)

if(i==j) sum1+=a[i][j]; if((i+j)==2) sum2+=a[i][j]; }

printf(\"%5d%5d\

29.(**)从键盘输入两个整数,输出其最大公约数和最小公倍数。 程序1:

main()

{int a,b,t,p,r;

scanf(\"%d,%d\if(awhile(b!=0)

{r=a%b;a=b;b=r;}

printf(“%5d%5d”,a,p/a);}

.9 .

main()

{ int a,b,m,n,i,t;

scanf(“%d%d”,&a,&b); if(afor(i=1;i<=n;i++)

if((m%i==0)&&(n%i==0))

{printf(\"%5d\\n\

printf(\"%5d\}

30.(**)一个已按从小到大的顺序排序的数组,有9个元素,从终端输入第10个数,要求按原来排序的规律将它插入数组中。(该数比第一个数大,比第九个数小) #define N 10

main()

{int b,i,n,a[N]={1,5,7,11,15,19,23,28,31}; scanf(\"%d\for(i=0;iif(a[i]>b) {n=i;break;} for(i=(N-2);i>=n;i--) a[i+1]=a[i]; a[n]=b;

for(i=0;iprintf(\"%5d\} 31.(**)请编写程序,输出以下扬辉三角形( 要求输出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

:

# define M 10 # define N 10 main()

{int a[M][N],i,j; for(i=0;iif(j==0||j==i) a[i][j]=1; else

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;iprintf(\"%4d\ printf(\"\\n\");} }

32.(**)从键盘输入少于50个的整数,其值在0和4之间(包括0和4),用-1作为输入

结束标志,统计每个整数的个数。请编程实现。

33.(**)从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接 到串a中;如果b的长度小于5,则把b的所有元素都连接到a中,请编程实现。

main()

{ char a[50],b[10],*p1,*p2; int i,j;

scanf(“%s%s”,a,b); n=strlen(a);

for(p1=a+n,p2=b;p1<=a+(n+4);p1++,p2++)

{*p1=*p2;

if(*p2= =’\\0’) break;}

*p1=’\\0’;

printf(“%s”,a);}

34.(**)编写函数,在一个一维数组中查找指定值,若找到则返回该数值的下标,否则返 回-1。要求用指针变量传递数组首地址。 main()

{float a[10]={1,2,3,4,5,6,7,8,9,10}; float b; int i;

scanf(\"%f\for(i=0;i<10;i++) if(b==a[i])

{printf(\"%d\\n\if(i>=10) printf(\"-1\"); printf(\"\\n\"); }

35.(**)写一程序,要求用户在键盘上输入一个整数,并把每位数字转换为英文。例如: 输入1024时,输出One Zero Two Four

main()

{ long int n;

int m,i=0,c[10]; scanf(\"%ld\do

{m=n%10; i++; c[i]=m;

printf(\"%5d%5d%5d\\n\}

while ((n/=10)>0); while(i>=1)

{i--;

switch(c[i+1])

{case 0:{ printf(\"zero\");printf(\" \");break;} case 1:{ printf(\"one\");printf(\" \"); break; } case 2: {printf(\"two\");printf(\" \"); break;} case 3: {printf(\"three\");printf(\" \");break;} case 4:{ printf(\"four\");printf(\" \");break;} case 5:{ printf(\"five\");printf(\" \");break;} case 6:{ printf(\"six\");printf(\" \"); break;} case 7:{ printf(\"seven\");printf(\" \"); break;} case 8:{ printf(\"eight\");printf(\" \"); break;} case 9:{ printf(\"nine\");printf(\" \"); break;} default:printf(\"no\");}}} 36.(**)A数组中有8个元素,从第6个元素开始将数组后三个元素移到数组开头。例如: A数组元素为:2 6 9 8 5 3 7 4 移动后数组变为:3 7 4 2 6 9 8 5

#define N 8 main()

{int a[8]={2,6,9,8,5,3,7,4}; int i, j,t; for(i=0;i<8;i++)

printf(\"%5d\printf(\"\\n\"); for(j=0;j<3;j++) { t=a[N-1];

for(i=N-2;i>=0;i--) a[i+1]=a[i]; a[0]=t;}

for(i=0;i<8;i++)

printf(\"%5d\}

37.(**)按如下格式打印输出乘法口诀表: 1×1=1

1×2=2 2×2=4 ┆

1×9=9 2×9=18 3×9=27 9×9=81

38.(**)请将n个整数按升序重新放在原数组中,操作时不得另开辟数组。 39.(**)输入若干学生一门功课的成绩,统计各分数段的人数。凡不及格(60分以下)都由一个计数器来统计,其它以10分作为一个数段,100分作为一个分数段。

main()

{int a[10]; int i,j,t,p;

for(i=0;i<10;i++) scanf(\"%d\for(i=0;i<9;i++) {p=i;

for(j=i+1;j<10;j++) if(a[p]>a[j])p=j; if(p!=j)

{t=a[i];a[i]=a[p];a[p]=t;} }

for(i=0;i<10;i++) printf(\"%5d\}

40.(**) 编写函数,给定一个数,删除数组中与之相等的元素,返回值为删除后数组中 的元素个数。

main() {float a[10],t; int s,b[6]={0},i; for(i=0;i<10;i++) scanf(\"%f\i=0;

while(i<10)

{s=(int)a[i]/10; i++;

switch(s)

{case 10:b[0]++; break; case 9:b[1]++; break; case 8:b[2]++; break; case 7:b[3]++; break; case 6:b[4]++;break; case 5: case 4: case 3: case 2: case 1:

case 0: b[5]++; break;}} for(i=0;i<=5;i++) printf(\"%2d\

}

41.(**)输入一个整数,判断它能否被3、5、7整除,并输出以下信息之一:

⑴能同时被3、5、7整除;

⑵能被其中两个数(说明哪两个数)整除; ⑶只能被其中一个整除(说明哪个数); ⑷不能被3、5、7任何一个整除。 42.(**)有10个数已按由小到大的顺序存放在一个整型数组中,从键盘输入一个数,找出该数是数组中的第几个元数,如果该数不在数组中,则打印出“无此数”。

main()

{ int a[10]={ 2,4,6,8,10,12,14,16,18,20}; int i,t,j,m;

for(i=0;i<10;i++)

printf(“%5d”,a[i]); printf(“\\n”); scanf(“%d”,&m); for(i=0;i<10;i++)

if(m==a[i]){printf(“%5d”,i+1);break;} if(i>=10) printf(“no”); } 43.(**)给出年、月、日,计算出该日是该年的第几天。 44.(***)求3至50之间所有素数之和,用子函数判断是否为素数。 #include main()

{int m,k,i,s=0; for (m=3;m<50;m++) {k=sqrt(m);

for(i=2;i<=k;i++) if (m%i==0) break; if(i>=k+1) s=s+m ;} printf(\"%5d\\n\ }

45.(***)不用strcpy函数,实现两个字符串的复制(形参用指针变量)。 46.(***)从键盘输入10个数,将其中最小的数与第一个数对换,最大的数与最后一个数对换,实现从小到大的排序。(用指针实现)

47.(***)编制程序。在主函数中输入a、b、c三个数,在子函数中用指针法将a、b、c排序(最大数放在a变量中,最小数放在c变量着),在主函数中输出。

48.(***) 输入三个字符串,按由小到大的顺序输出。(用字符指针实现)。 49.(***) 请编程,从键盘输入6名学生的5门成绩,分别统计每个学生的平均成绩。(在主函数中输入输出,子函数求平均成绩)

50.(***)编写函数将一个字符串中每一个单词的第一个字母转换为大写。 main()

{char ch[50]=\"he is my friend\"; int i,word=0;

for(i=0;ch[i]!='\\0';i++) if(ch[i]==' ') word=0; else if (word==0)

{ch[i]=capslock(ch[i]); word=1;

}

printf(\"%s\}

capslock(char a) {a=a-32; return(a); }

51.(***)一个班有10 名学生,每位学生有四门功课。请编程输出平均成绩、总分最高和最低的俩位学生所有课程的成绩。

52.(***)输入任意5个数放在数组中,假如5个数为1、2、8、2、10,请打印出以下方阵:

1 2 8 2 10 2 8 2 10 1 8 2 10 1 2 2 10 1 2 8 10 1 2 8 2

main()

{int a[5],i,j,t; for(i=0;i<5;i++) scanf(\"%d\for(i=0;i<5;i++)

printf(\"%5d\printf(\"\\n\"); for(j=1;j<5;j++) {t=a[0];

for(i=1;i<=5;i++) a[i-1]=a[i]; a[i]=t;

for(i=0;i<5;i++)

printf(\"%5d\

printf(\"\\n\");} }

53.(***)设有一数列,包含10个数,已按升序排好。编写程序,能够把从指定位置开始的n个数按逆序重新排列并输出新的完整序列。要求使用指针处理逆序部分。(例如:原数列为2,4,6,8,10,12,14,16,18,20,从第4个数开始的5个数按逆序重新排列,则得2,4,6,16,14,12,10,8,18,20)

main()

{ int a[10]={ 2,4,6,8,10,12,14,16,18,20}; int i,t,j;

for(i=0;i<10;i++)

printf(“%5d”,a[i]); printf(“\\n”);

for(i=7,j=3;i>3;i--,j++)

{ t=a[j];a[j]=a[i];a[i]=t;} for(i=0;i<10;i++)

printf(“%5d”,a[i]);

printf(“\\n”);

} 54.(**)试编程序,找出1至99之间的全部同构数。同构数是这样的一组数:它出现在平方数的右边。如5是25右边的数,25是625右边的数,5和25均是同构数。

#include

main() {int i;

for(i=1;i<100;i++)

if(i*i%10==i||i*i%100==i) printf(“%5d”,i);

判断输入的正整是否既是5又是7的整倍倍数若是则输出yes否则输出no

#include \"stdio.h\"

void main() { int num;

printf(\"请输入一个正数:\\n\"); scanf(\"%d\&num);

if(num%5 == 0 && num%7 == 0) {

printf(\"yes\\n\"); } else {

printf(\"no\\n\"); } }

输出所有的“水仙花数”,

#include\"stdio.h\" #include\"stdlib.h\" #include\"math.h\" int main() {

int i,j,k,a,b,c,m=0; int z[60]={0}; for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++) {a=pow(i,3); b=pow(j,3); c=pow(k,3);

if((i*100+j*10+k)==a+b+c) {z[m]=a+b+c;

printf(\"%5d\\n\ m++;} }

system(\"pause\");

因篇幅问题不能全部显示,请点此查看更多更全内容

Top