printf(\ k++; } l=1;
while(l<=i) {
printf(\ l++; }
printf(\ i++; } i=1;
while(i<=2*n-1) {
printf(\ i++; }
printf(\ return 0; }
选做 5.9 画个空心的梯形吧
编程,输入 n ,输出如下例( n=5 )所示的 高和上底均为 n 的等腰空心梯形。 #include
int main() {
int n,i=1,j,k; scanf(\ while(i<=n) {
j=1;
while(j<=n-i) {
printf(\ j++; }
printf(\ if(i==1) {
for(k=1; k<=n-2; k++) printf(\
}
else if(i==n) {
for(k=1; k<=3*n-4; k++) printf(\ } else {
for(k=1; k<=n+2*i-4; k++) printf(\ }
printf(\ j=1;
while(j<=n-i) {
printf(\ j++; }
printf(\ i++; }
return 0; }
选做 5.10 输出菱形图案
输入 n ,输出如下例( n=3 )所示的菱形: * *** ***** *** *
#include
int n,i,j,k;
scanf(\ for(i=1; i<=n; i++) {
for(j=1; j<=n-i; j++) {
printf(\ }
for(k=1; k<=2*i-1; k++) {
- 11 -
printf(\ }
printf(\ }
for(i=1; i<=n-1; i++) {
for(j=1; j<=i; j++) {
printf(\ }
for(k=1; k<=2*n-2*i-1; k++) {
printf(\ }
printf(\ }
return 0; }
5.11 最大公约数
输入两个正整数m和n,求它们的最大公约数和最小公倍数
比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include
int m,n,i,j;
scanf(\ for(i=m;i>=1;i--) {
if (n%i==0&&m%i==0)
{printf(\greatest common divisor is %d\\n\ } }
for (j=m;;j++) {
if (j%m==0&&j%n==0)
{printf(\least common multiple is %d\\n\ } } }
5.12 水仙花数
输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输出语句:printf(\#include
i = n/100; // 取出n的百位数 j = (n/10); // 取数n的十位数 k = n; // 取出n的个位数 if(n==i*i*i+j*j*j+k*k*k) printf(\}
5.13 完数
一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No
#include
int n,i,c,sum=0; scanf(\ for(i=1;i if(n%i==0) sum=sum+i; } if(n==sum) { printf(\ for(c=1; c printf(\ - 12 - } else printf(\ } 5.14 素数 输入两个正整数m和n,求出[m,n]区间的所有素数 #include scanf(\ for(i=m;i for(j=2;j<=k;j++) if(i%j==0) break; if(j>k) printf(\ } printf(\} 5.15 找出最大素数 素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。 输入:取值范围 输出:该范围内的最大素数 #include int a,i,j; scanf(\ for(i=a;i>1;i--) { for(j=2;j if(i%j==0) break; } if(j==i) { printf(\ break; } } } 5.16 回文数 输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No #include int main(int argc, char* argv[]) { char *str; int i,n; str=chan(0); n=strlen(str); for (i = 0; i<(n-1)/2; i++) { if (str[i]!=str[n-1-i]) { n=0; break; } } if (n) { printf(\ } else printf(\ free(str); system(\ return 0; } char *chan(int count) { char a; static char * p; if ((a=getchar())!='\\n') { count++; chan(count); } else { p=malloc(sizeof(char)*(count+1)); *(p+count)=0; return p; - 13 - } *(p+count-1)=a; return p; } 选做 5.17 自守数 自守数是指一个数的平方的尾数等于该数自身的自然数。例如252=625,762=5776。输入一个自然数,判断其是否为自守数。 如果是,则输出Yes,否则输出No #include int n,i,j,a=0,b=1,c; scanf(\ i=n*n; j=i-n; while(n>0) { n=n/10; a++; } for(c=1; c<=a; c++) { b=b*10; } if(j%b==0) { printf(\ } else { printf(\ } return 0; } 选做 5.18 求亲密数 若正整数A的全部约数(包括1,不包括A本身)之和等于B ; 且整数B的全部约数(包括1,不包括B本身)之和等于A,则 A 、 B 为亲密数。编程,输入正整数A,输出亲密数 A , B(A<=B) ,若不存在亲密数,则输出 No output 。 例如:220和284就是一对亲密数。220的约数是: 1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:1、2、4、71、142,约数之和是220。 #include int n,a,b=0,c=0; scanf(\ for(a=1; a if(n%a==0) { b=a+b; } } for(a=1; a if(b%a==0) { c=c+a; } } if(n==c) { printf(\ } else { printf(\ } return 0; } 选做 5.19 高次方的尾数 输入2个正整数m和n,求mn后三位数。比如输入m和n的值分别为13和13,则1313的后三位数字为253。 #include int m,n,a,b=1,c; scanf(\ for(a=1; a<=n; a++) - 14 - { b=b*m; b=b00; } printf(\last 3 digits of %d ** %d is: %d\\n\ return 0; } 选做 5.20 阶乘尾数零的个数 输入一个正整数n,求其阶乘尾数0的个数。比如,输入n的值为100,则其阶乘尾数0的个数为24。 #include int n,a,b,c; scanf(\ a=n/25; b=n/5; c=a+b; printf(\number of 0 in the end of %d! is:%d.\\n\ return 0; } 5.21 看看是谁做的好事 某四位同学中有一个做了好事 , 不留名 , 表扬信来了,校长问是谁做的好事 . 以下四个人中有三个人说的是真话. A 说 : 不是我 B 说 : 是 C C 说 : 是 D D 说 : 他说的不对 ! 编写程序:输出是谁做的好事,只输出对应的大写字母,输出格式printf(\ 。 #include char ch; for(ch='A'; ch<='D'; ch++) { if(ch=='A'&&ch=='C'&&ch=='D'&&ch!='D') printf(\ if(ch!='A'&&ch!='C'&&ch=='D'&&ch!='D') printf(\ if(ch!='A'&&ch=='C'&&ch!='D'&&ch!='D') printf(\ if(ch!='A'&&ch=='C'&&ch=='D'&&ch=='D') printf(\ } } 5.22 贪吃的猴子 有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入:天数n 输出:第一天的桃子个数,输出语句为printf(\monkey got %d peachs in first day.\\n\ Smaple: Input: 5 Output The monkey got 114 peachs in first day. #include int n,i; long int m=1; scanf(\ for(i=1; i<=n-1; i++) { m=(n-i+m)*2; } printf(\monkey got %d peachs in first day.\\n\ return 0; } 5.23 百马百担 有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担 输入:无 输出:大、中、小马的个数,用逗号分隔。例如:2,30,68 - 15 -