C语言循环结构练习.docx
- 文档编号:6195067
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:18
- 大小:36.37KB
C语言循环结构练习.docx
《C语言循环结构练习.docx》由会员分享,可在线阅读,更多相关《C语言循环结构练习.docx(18页珍藏版)》请在冰豆网上搜索。
C语言循环结构练习
一、以下程序使用while结构实现。
1、完成课堂实例的实现。
(1)计算s=1+2+…+100。
(累加型)
#include
#include
voidmain()
{inti=1,sum=0;clrscr();
while(i<=100)
{sum+=i;i++;}
printf("1+2+3+...+100=%d\n",sum);
}
#include
#include
voidmain()
{inti,sum;clrscr();
for(i=1,sum=0;i<=100;i++)
sum+=i;
printf("1+2+3+...+100=%d\n",sum);
}
(2)请输入数n,计算n!
。
(连乘型)
#include
#include
voidmain()
{inti=1,n;longfac=1;clrscr();
scanf("%d",&n);
while(i<=n)
{fac*=i;i++;}
printf("%d!
=%ld\n",n,fac);
}
#include
#include
voidmain()
{inti,n;longfac;clrscr();
scanf("%d",&n);
for(i=1,fac=1;i<=n;i++)
fac*=i;
printf("%d!
=%ld\n",n,fac);
}
(3)输出所有的水仙花数。
(范围型)
#include
#include
voidmain()
{intn=100,a,b,c;clrscr();
while(n<=999)
{a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
printf("%6d",n);
n++;}
printf("\n");
}
#include
#include
voidmain()
{intn,a,b,c;clrscr();
for(n=100;n<=999;n++)
{a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
printf("%6d",n);}
printf("\n");
}
(4)判断n是否为素数。
(反向思维型)
#include
#include
voidmain()
{intn,i=2;clrscr();
scanf("%d",&n);
while(i<=n-1)
{if(n%i==0)break;
i++;}
if(i>=n)
printf("%disaprimenumber\n",n);
else
printf("%disnotaprimenumber\n",n);
}
#include
#include
voidmain()
{intn,i;clrscr();
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{if(n%i==0)break;}
if(i>=n)
printf("%disaprimenumber\n",n);
else
printf("%disnotaprimenumber\n",n);
}
(5)输出100-200之间能同时被3和5整除的数。
(用continue语句)
#include
#include
voidmain()
{inti,k;clrscr();
for(i=100,k=0;i<=200;i++)
if(i%3!
=0||i%5!
=0)
continue;/*当i不被3或5整除时,继续下一次循环*/
else
{if(k%5==0)printf("\n");
/*当k为5的倍数时换行,即每行输出5个数*/
k++;printf("%6d",i);}
}
(6)输入任意n个数,输出其中最大数和最小数,并输出它们在序列中
的位置。
#include
#include
voidmain()
{inti,n,max_location=1,min_location=1;
floatx,max,min;clrscr();
printf("inputn:
");scanf("%d",&n);/*输入数的个数*/
printf("inputthefirstnumber:
");scanf("%f",&x);/*输入第一个数*/
max=min=x;/*假设第一个数既是最大数,也是最小数*/
for(i=2;i<=n;i++)/*从第二个数开始循环,所以i=2*/
{printf("inputthe%dthnumber:
",i);
scanf("%f",&x);
if(x>max)
{max=x;max_location=i;}/*如果x>max,则赋给max,并记下位置*/
if(x {min=x;min_location=i;}/*如果x } printf("\nmax=%6.2f,max_location=%d\n",max,max_location); printf("\nmin=%6.2f,min_location=%d\n",min,min_location); } (7)输出以下图形 (1): (8)输出以下图形 (2): (9) 输出以下图形(3): 图形 (1)图形 (2)图形(3) #include #include voidmain() {inti,j;clrscr(); for(i=1;i<=4;i++) {for(j=1;j<=4-i;j++) printf(""); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } for(i=3;i>=1;i--) {for(j=1;j<=4-i;j++) printf(""); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } } #include #include voidmain() {inti,j;clrscr(); for(i=1;i<=5;i++) {for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=2*i-1;j++) printf("%d",j); printf("\n"); } for(i=4;i>=1;i--) {for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=2*i-1;j++) printf("%d",j); printf("\n"); } } #include #include voidmain() {inti,j;clrscr(); for(i=1;i<=5;i++) {for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=i;j++) printf("%d",j); for(j=i-1;j>=1;j--) printf("%d",j); printf("\n"); } for(i=4;i>=1;i--) {for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=i;j++) printf("%d",j); for(j=i-1;j>=1;j--) printf("%d",j); printf("\n"); } } (10)编写输出如下字母塔的程序: A ABA ABCBA ABCDCBA ……………… …………………… ………………………… ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA #include #include voidmain() {inta,b;clrscr(); for(a=1;a<=26;a++)/*循环26次,输出26行*/ {for(b=1;b<=26-a;b++)printf("");/*输出每行左边的空格*/ for(b=1;b<=a;b++)printf("%c",b+64); /*输出每行左边(包括中间)的字母*/ for(b=a-1;b>=1;b--)printf("%c",b+64); /*输出每行右边(不包括中间)的字母*/ printf("\n");/*每行输出以后换行*/ } } 2、计算多项式7+72+73+······+7n的值,n由键盘输入。 #include #include voidmain() {inti,n;longt=1,s=0;clrscr(); printf("pleaseinputn: ");scanf("%d",&n); for(i=1;i<=n;i++) {t*=7;s+=t;}/*每次循环t乘于7以后各单项累加*/ printf("7+7*7+7*7*7+...=%ld\n",s); } 3、求 (即求1! +2! +3! +……+20! ) #include #include voidmain() {inti;doublet=1,s=0;clrscr(); for(i=1;i<=20;i++) {t=t*i;s=s+t;} printf("1! +2! +...+20! =%lf\n",s); } 4、输入2个正整数m,n,求其最大公约数和最小公倍数。 #include #include voidmain() {intm,n,t,p,r;clrscr() ; printf("pleaseinputtwonumbers: \n"); scanf("%d,%d",&n,&m); if(n {t=n;n=m;m=t;} p=n*m; while(m! =0) {r=n%m;n=m;m=r;} printf("gysis: %d\n",n); printf("gbsis: %d\n",p/n); } #include #include voidmain() {intm,n,t,p,i;clrscr(); printf("pleaseinputtwonumbers: \n"); scanf("%d,%d",&n,&m); if(n {t=n;n=m;m=t;} p=n*m; for(i=m;i>1;i--) {if(n%i==0&&m%i==0)break;} printf("gysis: %d\n",i); printf("gbsis: %d\n",p/i); } 5、请编程序打印出以下数列: 1、1、2、3、5、8、13、…的前40项。 每行输出4个数。 (斐波那契数列) 方法一: #include #include voidmain() {inti;longf1=1,f2=1,f;clrscr(); printf("%12ld%12ld",f1,f2); for(i=3;i<=40;i++) {f=f1+f2; printf("%12ld",f); if(i%4==0)printf("\n"); f1=f2;f2=f; } printf("\n"); } 方法二: #include #include voidmain() {inti;longf1=1,f2=1;clrscr(); for(i=1;i<=20;i++) {printf("%12ld%12ld",f1,f2); f1=f1+f2; f2=f2+f1; if(i%2==0)printf("\n"); } printf("\n"); } 6、求100~200间的全部素数。 每行输出6个数。 #include #include voidmain() {intn=101,k=0,i;clrscr(); while(n<200) {for(i=2;i<=n-1;i++) if(n%i==0)break; if(i>=n){printf("%6d",n);k+=1;} if(k%10==0)printf("\n"); n=n+2;} printf("\n"); } #include #include voidmain() {intn,k=0,i;clrscr(); for(n=101;n<200;n=n+2) {for(i=2;i<=n-1;i++) if(n%i==0)break; if(i>=n){printf("%6d",n);k+=1;} if(k%10==0)printf("\n");} printf("\n"); } 7、“鸡兔同笼”是一个中国古算题,最早出现在《孙子算经》中。 笼中有若干只鸡和兔子,它们共有88个头,244只脚,问鸡和兔各有多少只? #include #include voidmain() {inti,head=88,foot=244,rabbit,chick;clrscr(); for(i=0;i<=head;i++) {rabbit=i; chick=head-rabbit;/*满足共有88个头的条件*/ if(rabbit*4+chick*2==foot)/*满足共有244只脚的条件*/ printf("rabbit=%d,chick=%d\n",rabbit,chick); } } 8、求下列分数序列的前20项之和。 (sum=32.660259) , , , , , ,…… #include #include voidmain() {inti;floatfz=2,fm=1,s=0;clrscr(); for(i=1;i<=20;i++) {s=s+fz/fm; fz=fz+fm; fm=fz-fm; } printf("sum=%9.6f\n",s); } 9、输入x值,按照公式计算cos(x)的值,直到最后一项小于10-6为止。 #include #include #include voidmain() {floatsum,term,x;intk=0,sign=1;clrscr(); printf("pleaseinputx: ");scanf("%f",&x); term=1;sum=1;/*第一项直接赋值*/ while(fabs(term)>=1e-6) {k=k+2; term*=x*x/k/(k-1);/*计算单项值*/ sign=-sign;/*符号变量,用来实现正负号转换*/ sum+=sign*term;/*累加*/ } printf("sum=%6.2f\n",sum); } 10、找出1000之内的所有完数,一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。 输出时按下面的格式输出其因子: 6itsfactorsare1,2,3 #include #include voidmain() {inti,n,s;clrscr(); for(n=2;n<1000;n++) {s=0; for(i=1;i if(n%i==0)s=s+i; if(s==n) {printf("%d,itsfactorsare: ",n); for(i=1;i if(n%i==0)printf("%d,",i); printf("\n"); } } } 补充作业: (以下题目任选2题) 1、我国古代有一道有名的数学难题,称为“百鸡问题”: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 百钱买了百鸡,问鸡翁、鸡母、鸡雏各买了多少只? #include #include voidmain() {inti,j,k;clrscr(); for(i=1;i<=20;i++) for(j=1;j<=33;j++) {k=100-i-j; if((k%3==0)&&(i*5+j*3+k/3==100)&&k)printf("%4d%4d%4d\n",i,j,k); /*满足鸡雏k为整数且大于等于1只,同时正好买了100元钱*/ } } 2、猴子吃桃问题。 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上再想吃时,就只剩一个桃子了。 求第一天猴子共摘了多少桃子。 #include #include voidmain() {inti,x1,x2=1;clrscr(); for(i=9;i>=1;i--) {x1=(x2+1)*2; x2=x1; } printf("total=%d\n",x1); } 3、输入m个字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include #include voidmain() {charch;intletters=0,space=0,digit=0,other=0;clrscr(); while((ch=getchar())! ='\n') {if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') letters++; elseif(ch=='') space++; elseif(ch>='0'&&ch<='9') digit++; else other++; } printf("lettersis: %d\n",letters); printf("spaceis: %d\n",space); printf("digitis: %d\n",digit); printf("otheris: %d\n",other); } 4、输入一个自然数,计算各数位上数字之和。 如: 5246对应和为5+2+4+6=17。 #include #include voidmain() {intn,s=0;clrscr(); scanf("%d",&n); while(n>0) {s=s+n%10; n=n/10;} printf("sumis: %d\n",s); } 5、求S=1+12+123+1234+12345 #include #include voidmain() {inti,t=0,s=0;clrscr(); for(i=1;i<=5;i++) {t=t*10+i;s=s+t;} printf("s=%d\n",s); } 6、对输入的一正整数a(a在1到9之间),求Sn=a+aa+aaa+..+aaa..a,(10个a),例a=3,则S=3+33+333+..+333..3 #include #include voidmain() {inta,i=1;doubletn=0,sn=0;clrscr(); scanf("%d",&a); printf("a=%d\n",a); while(i<=10) {tn=tn*10+a;sn=sn+tn;++i;} printf("sn=%.0lf\n",sn);} #include #include voidmain() {inta,i;doubletn=0,sn=0;clrscr(); scanf("%d",&a); printf("a=%d\n",a); for(i=1;i<=10;i++) {tn=tn*10+a;sn=sn+tn;} printf("sn=%.0lf\n",sn);} 7、求1-999之间的所有同构数。 一个数出现在它的平方数的右端,这个数称为同构数。 如: 5出现在25右侧5是同构数; 25出现在625右侧25也是同构数。 #include #include voidmain() {longk,m,n;clrscr(); for(k=1;k<=999;k++) {m=k*k; if(k<10)n=m%10;/*k为一位数*/ elseif(k<100)n=m%100;/*k为两位数*/ elsen=m%1000;/*k为三位数*/ if(k==n)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 结构 练习