实验5循环结构参考答案文档格式.docx
《实验5循环结构参考答案文档格式.docx》由会员分享,可在线阅读,更多相关《实验5循环结构参考答案文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
=%ld\n"
n,fac);
{inti,n;
longfac;
for(i=1,fac=1;
=n;
fac*=i;
(3)输出所有的水仙花数。
(范围型)
{intn=100,a,b,c;
while(n<
=999)
{a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
%6d"
n);
n++;
\n"
);
{intn,a,b,c;
for(n=100;
n<
=999;
n++)
(4)判断n是否为素数。
(反向思维型)
{intn,i=2;
=n-1)
{if(n%i==0)break;
if(i>
%disaprimenumber\n"
else
%disnotaprimenumber\n"
{intn,i;
for(i=2;
=n-1;
(5)输出100-300之间能同时被3和5整除的数。
(用continue语句)
(每行输出5个数)
{inti,k;
for(i=100,k=0;
=300;
{if(i%3!
=0||i%5!
=0)
continue;
/*当i不被3或5整除时,继续下一次循环*/
k++;
i);
if(k%5==0)printf("
/*当k为5的倍数时换行,即每行输出5个数*/
(6)输入任意n个数,输出其中最大数和最小数,并输出它们在序列中
的位置。
#include<
{inti,n,max_location=1,min_location=1;
floatx,max,min;
inputn:
"
/*输入数的个数*/
printf("
inputthefirstnumber:
%f"
x);
/*输入第一个数*/
max=min=x;
/*假设第一个数既是最大数,也是最小数*/
i++)/*从第二个数开始循环,所以i=2*/
{printf("
inputthe%dthnumber:
scanf("
if(x>
max)
{max=x;
max_location=i;
}/*如果x>
max,则赋给max,并记下位置*/
if(x<
min)
{min=x;
min_location=i;
}/*如果x<
min,则赋给mix,并记下位置*/
}
\nmax=%6.2f,max_location=%d\n"
max,max_location);
\nmin=%6.2f,min_location=%d\n"
min,min_location);
(7)输出以下图形
(1):
(8)输出以下图形
(2):
(9)
输出以下图形(3):
图形
(1)图形
(2)图形(3)
{inti,j;
for(i=1;
=4;
{for(j=1;
j<
=4-i;
j++)
"
for(j=1;
=2*i-1;
*"
for(i=3;
i>
=1;
i--)
=5;
=5-i;
for(j=1;
j);
for(i=4;
=i;
for(j=i-1;
j>
j--)
(10)编写输出如下字母塔的程序:
A
ABA
ABCBA
ABCDCBA
………………
……………………
…………………………
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
{inta,b;
for(a=1;
a<
=26;
a++)/*循环26次,输出26行*/
{for(b=1;
b<
=26-a;
b++)printf("
/*输出每行左边的空格*/
for(b=1;
=a;
%c"
b+64);
/*输出每行左边(包括中间)的字母*/
for(b=a-1;
b>
b--)printf("
/*输出每行右边(不包括中间)的字母*/
/*每行输出以后换行*/
2、计算多项式7+72+73+·
·
+7n的值,n由键盘输入。
{inti,n;
longt=1,s=0;
pleaseinputn:
{t*=7;
s+=t;
}/*每次循环t乘于7以后各单项累加*/
7+7*7+7*7*7+...=%ld\n"
s);
3、求
(即求1!
+2!
+3!
+……+20!
)
{inti;
doublet=1,s=0;
=20;
{t=t*i;
s=s+t;
1!
+2!
+...+20!
=%lf\n"
4、输入2个正整数m,n,求其最大公约数和最小公倍数。
{intm,n,t,p,r;
clrscr()
;
pleaseinputtwonumbers:
\n"
%d,%d"
n,&
m);
if(n<
m)
{t=n;
n=m;
m=t;
p=n*m;
while(m!
{r=n%m;
m=r;
gysis:
%d\n"
gbsis:
p/n);
{intm,n,t,p,i;
for(i=m;
1;
{if(n%i==0&
&
m%i==0)break;
p/i);
5、请编程序打印出以下数列:
1、1、2、3、5、8、13、…的前40项。
每行输出4个数。
(斐波那契数列)
方法一:
longf1=1,f2=1,f;
%12ld%12ld"
f1,f2);
=40;
{f=f1+f2;
%12ld"
f);
if(i%4==0)printf("
f1=f2;
f2=f;
方法二:
longf1=1,f2=1;
{printf("
f1=f1+f2;
f2=f2+f1;
if(i%2==0)printf("
6、求100~200间的全部素数。
每行输出6个数。
{intn=101,k=0,i;
200)
{for(i=2;
if(n%i==0)break;
if(i>
=n)
{printf("
k+=1;
if(k%6==0)printf("
n=n+2;
}
{intn,k=0,i;
for(n=101;
200;
n=n+2)
}
7、“鸡兔同笼”是一个中国古算题,最早出现在《孙子算经》中。
笼中有若干只鸡和兔子,它们共有88个头,244只脚,问鸡和兔各有多少只?
{inti,head=88,foot=244,rabbit,chick;
for(i=0;
=head;
i++)
{rabbit=i;
chick=head-rabbit;
/*满足共有88个头的条件*/
if(rabbit*4+chick*2==foot)/*满足共有244只脚的条件*/
rabbit=%d,chick=%d\n"
rabbit,chick);
}
8、求下列分数序列的前20项之和。
(sum=32.660259)
,
,……
floatfz=2,fm=1,s=0;
{s=s+fz/fm;
fz=fz+fm;
fm=fz-fm;
sum=%9.6f\n"
9、输入x值,按照公式计算cos(x)的值,直到最后一项小于10-6为止。
math.h>
{floatsum,term,x;
intk=0,sign=1;
pleaseinputx:
scanf("
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
{inti,n,s;
for(n=2;
1000;
{s=0;
n;
if(n%i==0)s=s+i;
if(s==n)
%d,itsfactorsare:
if(n%i==0)printf("
%d,"
补充作业:
(以下题目任选2题)
1、我国古代有一道有名的数学难题,称为“百鸡问题”:
鸡翁一,值钱五;
鸡母一,值钱三;
鸡雏三,值钱一。
百钱买了百鸡,问鸡翁、鸡母、鸡雏各买了多少只?
{inti,j,k;
for(i=1;
for(j=1;
=33;
{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天早上再想吃时,就只剩一个桃子了。
求第一天猴子共摘了多少桃子。
{inti,x1,x2=1;
for(i=9;
{x1=(x2+1)*2;
x2=x1;
total=%d\n"
x1);
3、输入m个字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
{charch;
intletters=0,space=0,digit=0,other=0;
while((ch=getchar())!
='
\n'
{if(ch>
a'
&
ch<
z'
||ch>
A'
Z'
letters++;
elseif(ch=='
'
space++;
elseif(ch>
0'
ch<
9'
digit++;
other++;
lettersis:
%d\n"
letters);
spaceis:
space);
digitis:
digit);
otheris:
other);
4、输入一个自然数,计算各数位上数字之和。
如:
5246对应和为5+2+4+6=17。
{intn,s=0;
while(n>
0)
{s=s+n%10;
n=n/10;
sumis:
5、求S=1+12+123+1234+12345
{inti,t=0,s=0;
{t=t*10+i;
s=s+t;
s=%d\n"
6、对输入的一正整数a(a在1到9之间),求Sn=a+aa+aaa+..+aaa..a,(10个a),例a=3,则S=3+33+333+..+333..3
{inta,i=1;
doubletn=0,sn=0;
a);
a=%d\n"
a);
while(i<
=10)
{tn=tn*10+a;
sn=sn+tn;
++i;
sn=%.0lf\n"
sn);
{inta,i;
=10;
7、求1-999之间的所有同构数。
一个数出现在它的平方数的右端,这个数称为同构数。
5出现在25右侧5是同构数;
25出现在625右侧25也是同构数。
{longk,m,n;