if(c[i]%2!
=0)
printf("%5d",c[i]);
}
水仙花
8.(*)求出0〜999之间的所有“水仙花数”并输出。
数”是指一个三位数,其各位数字的立方和确好等于该数本身,153=1+5+3,贝V153是一个“水仙花数”。
程序1:
main()
{inti,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()
{intm,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",m);
}
9.(*)试编程:
判断输入的正整数是否既是5,又是7的整数倍
数。
若是则输出yes;否
则输出no。
10.(*)已有函数调用语句c=add(a,b);请编写aad函数,计算
两个实数a和b的和,并返回和值
11.(*)有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,问共有几种换法。
请编程实现。
程序1:
main()
{inti,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()
{inti,a,n;
longsum=0,b=1,c=1;
:
(uslu\p|%“)HU!
」d
{g
!
>|+US=US
:
(u^le^l11p%lp%11)jueos
13.(*)编程输出如下图形(不能仅用printf语句):
*******
*********
main()
{inti,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的值
#include"math.h"
main()
{floati,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",e);
}
15.(*)请编程,用scanf()函数输入三个字符,对这三个字符各加一个整数1后,用
putchar()函数输出,且每输出一个字符换一行。
16.(*)请编程,用scanf()函数输入三个整数,输出其中不大不小的那个数,输出宽度为五位。
intfindmid(inti,intj,intk)
{intn;
if(ielseif(j>k)n=j;
elsen=k;
return(n);}
main()
{inti,j,k,n;
scanf("%d%d%d",&i,&j,&k);
n=findmid(i,j,k);
printf("%d\n",n);
}
17.(*)编程实现输出所有1〜100之间能被9整除余2的数。
18.(*)编写一程序实现如下功能:
输入1、2、3、4、5、6、7
(分别对应星期一至星期日)中的任何一个数,便能输出与之对应的英文名称。
如输入1,则输出Monday。
main()
{charday;
scanf("%c",&day);
swith(day)
{case'1':
printf("monday\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()
{ints,score;
scanf("%d",&score);
s=score/10;
switch(s)
{case10:
printf("A\n");break;
case9:
printf("A\n");break;
case8:
printf("B\n");break;
case7:
printf("C\n");break;
case5:
case4:
case3:
case2:
case1:
printf("E\n");break;
default:
printf("error");
}}
20.(*)试编程:
判断输入的正整数是否既是5,又是7的整数倍数。
若是则输出yes;否则输出no。
21.(**)一个数如果却好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
编程序找出100之内的所有完数,并按下列格式输出其因子:
6itsfactorsare1,2,3
main()
{intm,i,s;
for(m=2;m<1000;m++)
{s=0;
for(i=1;iif(m%i==0)s=s+i;
if(m==s)
{printf("%3ditsfactorsare",m);for(i=1;iprintf("\n");
}
}
}
22.(*)输入5对整数,请输出每对数中较大者main()
{inti,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
23.(**)编程将一个3x3矩阵转置(行列互换)后输出。
main()
{inti,j,a[3][3],b[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++)
{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()
{voidmake();
inta[10],i;
externintmax,min;
externfloataver;
for(i=0;i<10;i++)
seanf("%d",&a[i]);
make(a,10);
printf("max=%d,min=%d,aver=%.2f",max,min,aver);
用并输出)。
程序1:
floatmax(intn,floata[])
{inti;
floatmax;
max=a[0];
for(i=0;i}
floatmin(intn,floata[])
{inti;
floatmin;
min二a[0];
for(i=0;iif(min>a[i])min二a[i];
return(min);
floataver(intn,floata[])
{inti;
floatsum=0,aver;
.7.
for(i=0;isum=sum+a[i];
aver=sum/n;
return(aver);
}
#include"math.h"
main()
{inti;
floatm,n,a[5],c;
for(i=0;i<5;i++)
scanf("%f",&a[i]);
m=max(5,a);
n=min(5,a);
c=aver(5,a);
printf("%5f%5f%5f\n",m,n,c);
25.(**)编写函数,求一个不超过五位的十进制整数各位数值的和。
(如:
输入2634,输出15)
#include"math.h"
main()
{inti,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.(**)编程求出一个3x3矩阵的最大和最小元素及其下标
main()
{inti,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;}
elseif(a[i][j]{min=a[i][j];m2=i;n2=j;}
printf("max=%d,%3d,%3d,min=%d,%3d,%3d",max,m1,n1,min,m2,n2)
J
}
27.(**)有一个字符串,包含n个字符,编写一个函数,将此
字符串中从第m个字符幵始的全部字符复制成另一个字符串。
main()
{charchs2[30]={0},chs1[30]="thisismyfirstC
program";
inti,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()
{inti,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==j)sum1+=a[i][j];
if((i+j)==2)sum2+=a[i][j];
}
printf("%5d%5d",sum1,sum2);}
29.(**)从键盘输入两个整数,输出其最大公约数和最小公倍
(oll.qHzMmyd宀TraqHepo(qve)七s03af03-=p%-p%=)」ueos
LrdTqaf
ourolu二吐窠
2eala(「EP9%=)=u_」d)
((0H.!
l%u)o3o3(0H.!
l%lu))七
(++■—UHV-—L.!
l)」s宀TraqHepsqveMs03a503Q%F%Hueos
-i-rTU-lu-qaflu二
()£elu
•6•
宀C?
BO5Q9%P9^汀£」d
printf("%5d",a*b/i);
30.(**)一个已按从小到大的顺序排序的数组,有9个元素,从终端输入第10个数,要求按原来排序的规律将它插入数组中。
(该数比第一个数大,比第九个数小)
#defineN10
main()
{intb,i,n,a[N]={1,5,7,11,15,19,23,28,31};
scanf("%d",&b);
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",a[i]);
}
31.(**)请编写程序,输出以下扬辉三角形(要求输出10行)。
121
1331
14641
#defineM10
#defineN10
main()
{inta[M][N],i,j;
for(i=0;ifor(j=0;j<=i;j++)
if(j==0||j==i)a[i][j]=1;else
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{for(j=0;j<=i;j++)printf("%4d",a[i][j]);
printf("\n");}
32.(**)从键盘输入少于50个的整数,其值在0和4之间(包
括0和4),用-1作为输入结束标志,统计每个整数的个数。
请编程实现。
33.(**)从键盘输入两个字符串a和b,要求不用库函数strcat
把串b的前五个字符连接
到串a中;如果b的长度小于5,则把b的所有元素都连接到a中,请编程实现。
main()
{chara[50],b[10],*p1,*p2;
inti,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()
{floata[10]={1,2,3,4,5,6,7,8,9,10};
floatb;
inti;
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时,输出OneZeroTwoFour
main()
{longintn;
intm,i=0,c[10];
scanf("%ld",&n);
do
{m=n%10;
i++;c[i]=m;
printf("%5d%5d%5d\n",i,m,c[i]);
}
while((n/=10)>0);while(i>=1)
{i--;
switch(c[i+1])
{case0:
{printf("zero");printf("");break;}case1:
{printf("one");printf("");break;}case2:
{printf("two");printf("");break;}case3:
{printf("three");printf("");break;}case4:
{printf("four");printf("");break;}case5:
{printf("five");printf("");break;}case6:
{printf("six");printf("");break;}case7:
{printf("seven");printf("");break;}case8:
{printf("eight");printf("");break;}
case9:
{printf("nine");printf("");break;}
default:
printf("no");}}}
36.(**)A数组中有8个元素,从第6个元素幵始将数组后三个
元素移到数组开头。
例如:
A数组元素为:
26985374移动后数组变为:
374
26985
#defineN8
main()
{inta[8]={2,6,9,8,5,3,7,4};
inti,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[i]);
}
37.(**)按如下格式打印输出乘法口诀表:
1x1=1
1X2=22X2=4
I
I
I
1X9=92X9=183X9=279X9=81
38.(**)请将n个整数按升序重新放在原数组中,操作时不得另开辟数组。
39.(**)输入若干学生一门功课的成绩,统计各分数段的人数。
凡不及格(60分以下)都由一个计数器来统计,其它以10分作为一个数段,100分作为一个分数段。
main()
{inta[10];
i