1、 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",t); } 2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde,输出edcba) main() {int i; char c
2、[10]; scanf("%s",c); for(i=9;i>=0;i--) printf("%c",c[i]); } 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++) f
3、or(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",x,y);} } 4.(*)利用海伦公式求三角形面积,三边长a,b,c由键盘输入。若输入的三边长不能构成 三角形,输出相应提示信息。海伦公式如下:其中s=(a+b+c)/2 三角形面积=
4、 #include"math.h" main() { float a,b,c,s,area; scanf("%f,%f,%f",&a,&b,&c); 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",area); else .1 . printf("no"); } 5.(*)编程求出1!+2!+3!+…+8!+9!+10!的值并
5、输出。 程序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",sum);
6、 } 程序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",s); } 程序3: main()
7、{ int i; double p=1, sum=0; for(i=1;i<=10;i++) { p=p*i; sum=sum+p;} printf("sum=%f",sum); } .2 . 6.(*)从键盘输入两个整数,输出其和,差,积,商。 7.(**)输入若干个自然数,对奇数从大到小排序,对偶数从小到大排序,输出两种结果。
8、 maxji(int a[],int n)
{ int i,j,k,t;
for(i=0;i 9、 for(i=0;i 10、 }
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",i,j,k);
}
程序:main()
{int m,i,j,k,a;
for(m=101;i<=999;m++)
11、
{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",m);
}
9.(*)试编程:判断输入的正整数是否既是5,又是7的整数倍数。若是则输出yes;否
则输出no。
10.(*)已有函数调用语句c=add(a,b);请编写aad函数,计算两个实数a和b的和,并返回和值。
11.(*)有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,问共有几种换法。请编程实现。
程序1: main()
{i 12、nt i,j,k,n=0;
for(i=1;i<19;i++)
for(j=1;j<95;j++)
for(k=1;k<94;k++)
if(5*i+j+0.5*k==100&&i+j+k==100)
{printf("%d,%d,%d\n",i,j,k);n++;}
printf("%d",n);
}
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,% 13、d",&a,&n);
for(i=1;i<=n;i++)
程序3:main()
{long int sn=0,k=a;
int a,i,j;
scanf("%d",&a);
for(i=1;i<=5;i++)
{ k=10*k+a;
sn=sn+k;
}
printf("%ld\n",sn);
}
{sum+=a*c;
b*=10;c+=b;}
printf("%ld",sum);
}
程序2:main()
{ long int sn=0,k=0;
int a,i,j;
scanf("%d",&a);
f 14、or(i=1;i<=5;i++)
{for(j=1;j<=i;j++)
k=10*k+a;
.4 .
sn=sn+k;
k=0;}
printf("%ld\n",sn);
}
13.(*)编程输出如下图形(不能仅用printf语句):
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
main()
{int i,k,j;
for(i=0;i<=4;i++)
15、 {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;
16、 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",e);
}
15.(*)请编程,用scanf()函数输入三个字符,对这三个字符各加一个整数1后,用
putchar()函数输出,且每输出一个字符换一行。
16.(*)请编程,用scanf()函数输 17、入三个整数,输出其中不大不小的那个数,输出宽度为五位。
int findmid(int i,int j,int k)
{int n;
.5 .
if(i 18、编写一程序实现如下功能:输入1、2、3、4、5、6、7(分别对应星期一至星期日)中的任何一个数,便能输出与之对应的英文名称。如输入1,则输出Monday。
main()
{char day;
scanf("%c",&day);
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;
19、
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(" 20、d",&score);
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.(*) 21、试编程:判断输入的正整数是否既是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 22、if(m%i==0) s=s+i;
if (m==s)
{ printf("%3d its factors are ",m);
for(i=1;i 23、i,j,a[5][2];
for(i=0;i<=4;i++)
for(j=0;j<=1;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=4;i++)
if(a[i][1]>a[i][0])
printf("%4d\n",a[i][1]);
else
printf("%4d\n",a[i][0]);
}
.6 .
23.(**)编程将一个3x3矩阵转置(行列互换)后输出。
main()
{int i,j, a[3][3],b[3][3];
for(i=0;i<=2;i++ 24、)
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
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",b[i][j]);
printf(“\n”);}
}
24.(**)求一个一维数组的最大值,最小值和平均值(主函数调用并输出)。
程序2:
main()
{void make();
int 25、a[10],i;
extern int max,min;
extern float aver;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
make(a,10); printf("max=%d,min=%d,aver=%.2f",max,min,aver);
}
int max,min; float aver;
void make(int a[],int n)
{int i; float sum;
max=min=a[0];
sum=a[0];
for(i=1;i 26、a[i];
if(min>a[i]) min=a[i];
sum+=a[i];printf("%f",sum);}
aver=(float)sum/n; }
程序1:
float max(int n,float a[])
{int i;
float max;
max=a[0];
for(i=0;i 27、i++)
if(min>a[i]) min=a[i];
return(min);
}
float aver(int n,float a[])
{ int i;
float sum=0,aver;
.7 .
for(i=0;i 28、ver(5,a);
printf("%5f%5f%5f\n",m,n,c);
}
25.(**)编写函数,求一个不超过五位的十进制整数各位数值的和。(如:输入2634,输出15)
#include"math.h"
main()
{ int i,a[5],m,n=0;
scanf("%d",&m);
for(i=0;i<=4;i++)
{a[i]=m%10;
n=n+a[i];
m=m-a[i]*10;
printf("%5d",a[i]);}
printf('\n');
printf("%d",n);
}
26.(**)编程求出一 29、个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",&a[i][j]);
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;}
30、 else if(a[i][j] 31、
int i,j,m;
scanf("%d",&m);
for(i=m,j=0;i<30;i++,j++)
chs2[j]=chs1[i];
chs2[29]='\0';
printf("%s",chs2);
}
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",&a[i][j]);
for(i=0;i<=2;i++)
{for(j=0;j<=2;j++)
if(i 32、j) sum1+=a[i][j];
if((i+j)==2) sum2+=a[i][j];
}
printf("%5d%5d",sum1,sum2); }
29.(**)从键盘输入两个整数,输出其最大公约数和最小公倍数。
程序1:
main()
{int a,b,t,p,r;
scanf("%d,%d",&a,&b);
if(a 33、t;
scanf(“%d%d”,&a,&b);
if(a 34、28,31};
scanf("%d",&b);
for(i=0;i 35、 # define N 10
main()
{int a[M][N],i,j;
for(i=0;i 36、]);
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) 37、
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;
38、scanf("%f",&b);
for(i=0;i<10;i++)
if(b==a[i])
{printf("%d\n",i);break;}
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",&n);
do
{m=n%10;
i++;
c[i]=m;
printf("%5d%5d% 39、5d\n",i,m,c[i]);
}
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(" ");brea 40、k;}
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个元素开始将数组后三个元素移到数 41、组开头。例如:
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",a[i]);
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",a 42、[i]);
}
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+ 43、)
scanf("%d",&a[i]);
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",a[i]);
}
40.(**) 编写函数,给定一个数,删除数组中与之相等的元素,返回值为删除后数组中
的元素个数。
main()
{float a[10],t;
int s,b[6]={0},i;
for(i=0;i<10;i+ 44、)
scanf("%f",&a[i]);
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", 45、b[i]);
}
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};
46、 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”) 47、 }
43.(**)给出年、月、日,计算出该日是该年的第几天。
44.(***)求3至50之间所有素数之和,用子函数判断是否为素数。
#include 48、) s=s+m ;}
printf("%5d\n",s);
}
45.(***)不用strcpy函数,实现两个字符串的复制(形参用指针变量)。
46.(***)从键盘输入10个数,将其中最小的数与第一个数对换,最大的数与最后一个数对换,实现从小到大的排序。(用指针实现)
47.(***)编制程序。在主函数中输入a、b、c三个数,在子函数中用指针法将a、b、c排序(最大数放在a变量中,最小数放在c变量着),在主函数中输出。
48.(***) 输入三个字符串,按由小到大的顺序输出。(用字符指针实现)。
49.(***) 请 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",ch);
}
c 50、apslock(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++)






