1、循环结构程序设计 1、求1+4+7+……+100之和。 解法1: main() {int s,i; s=0; for(i=1;i<=100;i+=3) s=s+i; printf("s=%d\n",s); } 解法2: main() {int s,i; s=0; i=1; while(i<=100) {s=s+i; i+=3; } printf("s=%d\n",s); } 2、求1到100之间的奇数之和与偶数之和。 解法1: main() {int s1,s2,i; s1=s2=0; for(i=1;i<
2、100;i++) {if(i%2==1) s1=s1+i; /*奇数之和*/ else s2=s2+i; /*偶数之和*/ } printf("s1=%d,s2=%d\n",s1,s2); } 解法2: main() {int s1,s2,i; s1=s2=0; for(i=1;i<=99;i+=2) s1=s1+i; /*奇数之和*/ for(i=2;i<=100;i+=2) s2=s2+i; /*偶数之和*/ } printf("s1=%d,s2=%d\n",s1,s2); } 解法3:
3、 main() {int s1,s2,i; s1=s2=0; i=1; while(i<=99) {s1=s1+i; /*奇数之和*/ i++; s2=s2+i; /*偶数之和*/ i++; } printf("s1=%d,s2=%d\n",s1,s2); } 3、用循环程序求10的阶乘。 main() {long p; /*int型取值范围太小*/ int i; p=1; /*不能写作p=0;*/ for(i=1;i<=10;i++) p=p*i; printf("p=%ld\n",p); } 4、求1
4、3*5*...*19之积。 main() {float p; int i; p=1; for(i=1;i<=19;i+=2) p=p*i; printf("p=%f\n",p); } 5、从键盘输入一个正整数n,求1+2+3+...+n之和并输出。 main() {int i,n; long s; s=0; scanf("%d",&n); for(i=1;i<=n;i++) s=s+i; printf("s=%ld\n",s); } 6、从键盘输入一个正整数,求出其阶乘并输出。 解法1: main() {float
5、p; int i,k; p=1; scanf("%d",&k); for(i=1;i<=k;i++) p=p*i; printf("p=%f\n",p); } 解法2: main() {float p; int k; p=1; scanf("%d",&k); while(k>=1) {p=p*k; k--; } printf("p=%f\n",p); } 6A、求1-1/3+1/5-1/7+...-1/99+1/101之和。 解法1: main() {float s1,s2,s; int i; s1=s2=
6、0; for(i=1;i<=101;i+=4) s1=s1+1.0/i; /*正数之和*/ for(i=3;i<=99;i+=4) s2=s2+1.0/i; /*负数之和*/ s=s1-s2; printf("s=%f\n",s); } 解法2: main() {int i,p; float s; s=0; p=1; for(i=1;i<=101;i+=2) {s=s+p*1.0/i; /*p用于控制累加项的正负*/ p=-p; /*改变正负号*/ } printf("s=%f\n",s); }
7、
6B、求20+21+22+...+263之和。
解法1:
#include
8、992之和。 main() {long s; int i; s=0; for(i=1;i<=99;i+=2) s=s+i*i; printf("s=%ld\n",s); } 8、求1+1/3+1/5+...+1/99之和。 main() {int i; float s; s=0; for(i=1;i<=99;i+=2) s=s+1.0/i; /*不能写作1/i*/ printf("s=%f\n",s); } 9、求1+1/3+1/5+...的前20项之和。 main() {int i; float s; s
9、0; for(i=1;i<=20;i++) s=s+1.0/(2*i-1); /*不能写作1/(2*i-1)*/ printf("s=%f\n",s); } 10、求1+1/3+1/5+...之和,直到某一项的值小于10-6时停止累加。 main() {long n; /*不能写作int n*/ float s; s=0; n=1; while(1.0/n>=1e-6) {s=s+1.0/n; /*不能写作1/n*/ n+=2; } printf("s=%f\n",s); } 11、已知序列1/2,2/3,3/5,5/8,
10、求其前20项之和。 解法1: main() {float s,a,b,t; int i; s=0; a=1; b=2; for(i=1;i<=20;i++) {s=s+a/b; t=a; a=b; /*分子为前一项分母*/ b=b+t; /*分母为前一项分子分母之和*/ } printf("s=%f\n",s); } 解法2: main() {float s,a,b; int i; s=0; a=1; b=2; for(i=1;i<=20;i++) {s=s+a/b; b=a+b;
11、 /*分母为前一项分子分母之和*/ a=b-a; /*分子为前一项分母*/ } printf("s=%f\n",s); } 12、求1!+2!+3!+...+20!之和。 解法1: main() {float s,p; int n,k; s=0; /*该语句必须在外循环之前*/ for(n=1;n<=20;n++) {p=1; /*该语句必须在外循环体内部*/ for(k=1;k<=n;k++) /*求n的阶乘*/ p=p*k; s=s+p; } printf("s=%f\n",s); }
12、 解法2: main() {float s,p; int n; s=0; p=1; /*该语句必须在循环之前*/ for(n=1;n<=20;n++) {p=p*n; /*求n的阶乘*/ s=s+p; } printf("s=%f\n",s); } 13、求1!+5!+9!+...+21!之和。 main() {float s,p; int n,k; s=0; /*该语句必须在外循环之前*/ for(n=1;n<=21;n+=4) {p=1; /*该语句必须在外循环体内部*/ for
13、k=1;k<=n;k++) /*求n的阶乘*/ p=p*k; s=s+p; } printf("s=%f\n",s); } 14、从键盘两个整数,求其最大公约数和最小公倍数。 解法1:辗转相除法。 ⑴以其中一个数作被除数,另一个数作除数,相除求余数。 ⑵若余数不为0,则以上一次的除数作为新的被除数,以上一次的余数作为新的除数,继续求余数。 ⑶直至余数为0时,对应的除数就是最大公约数。 main() {int m,n,r,g,h,p; scanf("%d%d",&m,&n); p=m*n; while((r=m%n)!=0)
14、/*余数不为0时循环*/ {m=n; /*以上一次的除数作为新的被除数*/ n=r; /*以上一次的余数作为新的除数*/ } g=n; /*余数为0时的除数即最大公约数*/ h=p/g; /*两数之积除以最大公约数就是最小公倍数*/ printf("g=%d,h=%d\n",g,h); } 解法2:辗转相除法。 main() {int m,n,r,g,h,p; scanf("%d%d",&m,&n); p=m*n; while(1) /*循环条件总为真*/ {r=m%n; if(r==0) break; /*
15、余数为0时终止循环*/ m=n; /*以上一次的除数作为新的被除数*/ n=r; /*以上一次的余数作为新的除数*/ } g=n; /*余数为0时的除数即最大公约数*/ h=p/g; /*最小公倍数*/ printf("g=%d,h=%d\n",g,h); } 解法3: main() {int m,n,g,h,i; scanf("%d%d",&m,&n); for(g=m;g>=1;g--) {if((m%g==0)&&(n%g==0)) /*此时g是最大公约数*/ break; } for(i=1;i<=n;
16、i++) {h=i*m; /*h是m的倍数*/ if(h%n==0) /*此时h是最小公倍数*/ break; } printf("g=%d,h=%d\n",g,h); } 15、求a+aa+aaa+...(如2+22+222+2222+22222)前n项之和。 main() {int a,n,i; long t,s; scanf("%d%d",&a,&n); t=a; for(i=1;i<=n;i++) {s=s+t; t=t*10+a; /*求得下一项*/ } printf("s=%ld\n",s); }
17、16、从键盘输入一个正整数,将该数前后倒置后输出。 解法1: main() {int a,d; scanf("%d",&a); while(a!=0) {d=a%10; /*求得个位*/ printf("%1d",d); /*输出宽度为1*/ a=a/10; /*去掉原来的个位*/ } } 解法2: main() {int a,b,d; scanf("%d",&a); b=0;/*b用于存放倒置之后的数*/ while(a!=0) {d=a%10; /*求得个位*/ b=b*10+d; a=a/10;
18、 /*去掉原来的个位*/ } printf("%d\n",b); } 17、求出所有的水仙花数(各位数字立方之和等于数本身的三位整数)并输出。 main() {int x,a,b,c; for(x=100;x<=999;x++) {a=x/100; /*x的百位*/ b=x%100/10; /*x的十位*/ c=x%10; /*x的个位*/ if(a*a*a+b*b*b+c*c*c==x) printf("%d\n",x); } } 18、从键盘输入一个正整数,判断是否是完数(真因子之和等于数本身)。 main()
19、 {int m,s,i; scanf("%d",&m); s=0; for(i=1;i<=m-1;i++) {if(m%i==0) /*求出所有真因子*/ s=s+i; } if(s==m) printf("%d is a complete number.\n",m); else printf("%d isn't a complete number.\n",m); } 19、用双重循环打印如下图形。 * *** ***** ******* #define N 4 main() {int i,j
20、k; for(i=1;i<=N;i++) {for(j=1;j<=N-i;j++) printf(" "); /*打印N-i个空格*/ for(k=1;k<=2*i-1;k++) printf("*"); /*打印2*i-1个星号*/ printf("\n"); } } 20、用双重循环打印如下图形。 * *** ***** ******* ***** *** * 解法1: main() {int i,j,k; for(i=1;i<=4;i++) /*输出前4行*/ {for(j=1;j<
21、4-i;j++) printf(" "); for(k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } for(i=3;i>=1;i--) /*输出后3行*/ {for(j=1;j<=4-i;j++) printf(" "); for(k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } } 解法2: main() {int i,j,k; for(i=1;i<=4;i++) /*输出前4行*/ {for(j=1;j<=
22、4-i;j++) printf(" "); for(k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } for(i=1;i<=3;i++) /*输出后3行*/ {for(j=1;j<=i;j++) printf(" "); for(k=1;k<=2*(4-i)-1;k++) printf("*"); printf("\n"); } } 21、从键盘输入一个正整数,判断其是否是素数。 解法1: main() {int m,i; scanf("%d",&m); f
23、or(i=2;i<=m-1;i++)
{if(m%i==0)
break;
}
if(i>m-1)
printf("%d是一个素数.\n);
else
printf("%d不是一个素数.\n);
}
解法2:
#include
24、);
else
printf("%d is not a prime number.\n);
}
解法3:
#include
25、
解法4:
#include
26、若为小写字母,则转化为大写字母;若为大写字母,则转化为小写字母;否则转化为ASCII码表中的下一个字符。
解法1:
#include
27、
}
}
解法2:
#include
28、字母均转换为小写。
2、若是字母'a'到'y',则转化为下一个字母。
3、若是'z',则转化为'a'。
4、其它字符,保持不变。
#include






