}
五、循环程序设计
16、给出一个不多于5位是正整数,要求:
(1)求出它是几位数?
(2)分别打印出每一位的数字(3)逆序打印各位数字。
解:
#include
#include
main()
{inti,a,num=1;
cin>>i;
a=i;
while((a=a/10)!
=0)//求是几位数
num++;
cout<<"它是"<"<a=i;
intn;
while(num!
=0)//顺序打印每一位
{n=a/pow(10,num-1);
a=a%(int)pow(10,num-1);
cout<num--;}
cout<a=i;
intm;
while(a!
=0)//逆序打印每一位
{m=a%10;
cout<a=a/10;}}
17、输入两个正整数m,n,求其最大公约数和最小公倍数。
解:
#include
main()
{intp,r,n,m,temp;
cout<<"请输入两个整数:
";
cin>>n>>m;
if(n{temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!
=0)
{r=n%m;
n=m;
m=r;}
cout<<"最大公约数是:
"<cout<<"最小公倍数是:
"<
18、输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。
解:
#include
#include
main()
{charc;
intletter=0,space=0,digit=0,other=0;
cout<<"请输入一行字符:
\n";
while((c=getchar())!
='\n')
{if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letter++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
other++;
}
cout<<"letter="<}
19、求sn=a+aa+aaa+……+aa…a之值,其中a是一个数字,例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
解:
#include
main()
{inta,n,i=1,sn=0,tn=0;
cout<<"a,n=?
";
cin>>a>>n;
while(i<=n)
{tn=tn+a;
sn=sn+tn;
a=a*10;
++i;}
cout<<"a+aa+aaa+...+aaaa...="<20、求1!
+2!
+3!
+……+20!
=?
。
解:
#include
main()
{doubles=0,t=1;
intn;
for(n=1;n<=20;n++)
{t=t*n;
s=s+t;}
cout<<"1!
+2!
+3!
...+20!
="<
21、输出所有以水仙花数,所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。
例如:
153=1*1*1+5*5*5+3*3*3。
解:
#include
main()
{inti,j,n,k;
cout<<"水仙花数是:
"<for(n=100;n<1000;n++)
{i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
cout<22、求Fibonacci数列前40个数。
这个数列有如下特点:
第1、2个数为1、1。
从第3个数开始,每个数是其前面两个数之和。
即
F1=1(n=1)
F2=1(n=2)
Fn=Fn-1+Fn-2(n≥3)
解:
#include
#include
usingnamespacestd;
intmain()
{longf1,f2;
inti;
f1=f2=1;
for(i=1;i<=20;i++)
{cout<if(i%2==0)cout<f1=f1+f2;
f2=f2+f1;}
return0;
}
23、用下面公式求π的近似值。
π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10-7为止。
解:
#include
#include
#include
usingnamespacestd;
intmain()
{ints=1;
doublen=1,t=1,pi=0;
while((fabs(t))>1e-7)
{pi=pi+t;n=n+2;s=-s;t=s/n;}
pi=pi*4;
cout<<"pi="<return0;
}
24、用迭代法求x=sqrt(a),求平方根的迭代公式为:
xn+1=1/2(xn+a/xn)
要求前后两次求出的x的差的绝对值小于10-5。
解:
#include
#include
usingnamespacestd;
intmain()
{floata,x0,x1;
cout<<"请输入a值";
cin>>a;
x0=a/2;
x1=(x0+a/x0)/2;
do{
x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x0-x1)>=1e-5);
cout<<"Thesquarerootof"<}
25、输出以下图案:
*
***
*****
*******
*****
***
*
解:
#include
intmain()
{
inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=2*i-1;j++)
cout<<"*";
cout<}
for(i=3;i>=1;i--)
{for(j=1;j<=2*i-1;j++)
cout<<"*";
cout<}
26、两个乒乓球队进行比赛,各出3人。
甲队为A、B、C3人,乙队为X,Y,Z3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编程找出3对赛手的名单。
解:
#include
usingnamespacestd;
intmain()
{chari,j,k;
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
for(k='x';k<='z';k++)
if(i!
=j&&i!
=k&&j!
=k)
if(i!
='x'&&k!
='x'&&k!
='z')
cout<<"A->"<"<"<27、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
解:
#include
usingnamespacestd;
intmain()
{
inti,j,k;
for(i=1;i<=4;i++)
{for(j=1;j<=4;j++)
for(k=1;k<=4;k++)
if(i!
=j&&i!
=k&&j!
=k)cout<
cout<}
28、一球从100米高度自由落下,每次落地后又反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米?
第10次反弹多高?
解:
#include
usingnamespacestd;
intmain()
{floatsn=100,hn=sn/2;
intn;
for(n=2;n<=10;n++)
{sn=sn+2*hn;
hn=hn/2;
}
cout<<"第10次落地时共经过"<cout<<"第10次反弹"<29、设N是一个四位数,它的9倍正好是其反序数,求N。
反序数就是将整数的数字倒过来形成的整数。
解:
设整数N的千、百、十、个位为i、j、k、m,取值范围0-9,N的范围是1002-1111,穷举条件为:
(i*1000+j*100+k*10+m)*9=m*1000+k*100+j*10+l
参考程序如下:
#include
main()
{inti,j,k,m,n;
cout<<"Thenumbersatisfiedstatescontionis:
";
for(n=1002;n<1111;n++)
{i=n/1000;
j=n/100%10;
k=n/10%10;
m=n%10;
if((i