C++循环控制结构练习题.docx
《C++循环控制结构练习题.docx》由会员分享,可在线阅读,更多相关《C++循环控制结构练习题.docx(33页珍藏版)》请在冰豆网上搜索。
C++循环控制结构练习题
循环控制结构练习题
1.从键盘上输入一个正整数n,计算其阶乘n!
#include
#include
usingnamespacestd;
intf(intn)
{
intt=1;
for(inti=n;i>0;i--)
t=t*i;
returnt;(0的阶层为1)
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
cout<if(n<0)n=abs(n);
cout<<"n!
="<system("pause");
return0;
}
2.从键盘上输入一个正整数n,判断是否是素数?
法1:
#include
#include
usingnamespacestd;
voidf(intn){
intk=sqrt(n),i;
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)cout<elsecout<}
intmain()
{
intn;
cout<<"n=";
cin>>n;
f(n);
system("pause");
return0;
}
法2;#include
#include
usingnamespacestd;
boolf(intn){
intk=sqrt(n),i;
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)return1;
elsereturn0;
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
f(n);
if(f(n))cout<elsecout<system("pause");
return0;
}
3.26.2017
boolf2(intn)
{intk=sqrt(n),i;
for(i=2;i<=k;i++)
if(n%i==0)return0;
if(i>=k+1)return1;1
}intmain()
{intn;
while
(1)
{cin>>n;
if(n==0)break;
if(f2(n))cout<<"是素数!
!
"<system("pause");
return0
3.编写程序,输入一个整数,求该整数的各位数字和。
#include
#include
usingnamespacestd;
intf(intn)
{
intt=0;
for(inti=n;i>0;i=i/10)
t=i%10+t;
returnt;
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
if(n<0)n=abs(n);
cout<<"n的各位数字和为:
"<system("pause");
return0;
}
法二:
intf(intn)
{
if(n<10)returnn;
elsereturn(n%10+f(n/10));
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
if(n<0)n=abs(n);
cout<<"n的各位数字和为:
"<system("pause");
return0;
}
3.26.2017
intf3(intn)
{n=abs(n);
if(n<10)returnn;
elsereturn((n%10)+f3(n/10));}
intmain()
{intn;
while
(1)
{cin>>n;
if(n==0)break;
cout<system("pause");
return0;}
3.编写程序,输入一个整数,求该整数的各位数字的乘积。
法一:
#include
usingnamespacestd;
intf(intn)
{
if(n<10)returnn;
elsereturn((n%10)*f(n/10));
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<system("pause");
return0;
}
法二:
#include
usingnamespacestd;
intf(intn)
{
intt=1;
for(inti=n;i>0;i=i/10)
t=t*(i%10);
returnt;
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<system("pause");
return0;
}
3.26.2017
intf4(intn)
{n=abs(n);
if(n<10)returnn;
elsereturn((n%10)*f3(n/10));}
intmain()
{intn;
while
(1)
{cin>>n;
if(n==0)break;
cout<system("pause");
return0;}
4.编写程序,输入一个整数,求该整数的各位数字的平方和。
法一:
#include
usingnamespacestd;
intf(intn)
{
intt=0;
for(inti=n;i>0;i=i/10)
t=t+(i%10)*(i%10);
returnt;
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<system("pause");
return0;
}法二:
#include
usingnamespacestd;
intf(intn)
{
if(n<10)returnn*n;
elsereturn(n%10)*(n%10)+f(n/10);
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<system("pause");
return0;
}
3.27.2017intf4(intn)
{n=abs(n);
if(n<10)returnn*n;
if(n>10)return(n%10)*(n%10)+f4(n/10);}
intmain()
{intn;
while
(1)
{cin>>n;
if(n==0)break;
cout<system("pause");
return0;}
5.编写程序,输入一个整数,求该整数的各位上的数字是否包含数字5,若有则输出是第几位有含数字5.
#include
usingnamespacestd;
voidf(intn)
{
intj=0;
for(inti=n;i>0;i=i/10)
{
j++;if(i%10==5)cout<}
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<<"包含5的位置i为:
";
f(n);
cout<system("pause");
return0;
}3.27.2017
voidf5(intn,intm)
{for(inti=n,j=0;i>0;i=i/10,j++)
if(i%10==m){cout<<"第"<}
intmain()
{intn,m;
while
(1)
{cin>>n>>m;
if(n==0)break;
f5(n,m);}
system("pause");
return0;}
6.编写程序输出一个平行四边行。
注:
边长为10个*号
voidu()
{
inti=0;
for(inti=1;i<=10;i++)
{
cout<for(intj=1;j<=10;j++)
cout<<'*';
cout<}
}
3.27.2017
voidf6()
{for(intj=0;j<10;j++)
{cout<for(inti=0;i<10;i++)
cout<<'*';
cout<intmain()
{intn,m;
f6();
system("pause");
return0;}
8.编程计算:
的前20项的和。
法一:
#include
usingnamespacestd;
doublef(doublen)
{
if(n>0){
if(n==1)return1;
elsereturnn/(2*n-1)+f(n-1);
}
}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<cout<system("pause");
return0;
}
3.27.2017
doublef7(doublen)
{inti;if(n>0){
if(n==1)return1;
elsereturn(n/(2*n-1))+f7(n-1);
}}
intmain()
{doublen,m;
cin>>n;
cout<system("pause");
return0;}
9.编写一程序,输入一个正整数,统计该数中含数字5的个数。
usingnamespacestd;
voidf(intn)
{
intj=0;
for(inti=n;i>0;i=i/10)
{
if(i%10==5)j++;
}cout<}
intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<<"包含5的个数为:
";
f(n);
cout<system("pause");
return0;
10.编写程序,输出所有含数字5且为77倍数的四位数。
voidJ(){
for(inti=1000;i<=9999;i++)
if(i%77==0){
intm=i;
for(m;m>0;m=m/10)
if(m%10==5){cout<
}
}intmain()
{J();
System(“pause”);
return0;
}
11.编写一程序,输入一个正整数n,求大于等于n的最小素数。
#include
usingnamespacestd;
intmain()
{
intx,b,i,m,k;
cout<<"请输入一个整数:
";
cin>>x;
b=sqrt(x);
for(i=2;i<=b;i++)
if(x%i==0)break;
if(i>=b+1)cout<else
for(m=x;;m++){
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{cout<}system("pause");
return0;
}
法二:
#include
usingnamespacestd;
intmain()
{
intn,k,m,i,j;
cout<<"n=";
cin>>n;
for(i=n;;i++){
for(j=2;j*j
if(i%j==0)break;
if(j*j>=i){
cout<
break;
}
}
system("pause");
return0;
}
12.从键盘输入一个小于15的正整数,计算其阶乘。
13.编程计算1!
+2!
+3!
+.....+n!
。
n从键盘输入。
3.27.2017
intsum2(intn)
{intsum=0,t=1;
for(intj=1;j<=n;j++)
{t=1;
for(inti=1;i<=j;i++)
t=t*i;
sum=sum+t;}
returnsum;
}
intmain()
{intn;
while
(1){
cin>>n;
if(n==0)break;
cout<<"sum="<}
system("pause");
return0;}
14.从键盘上输入一个正整数m,找出1000至10000之间所有各位数字之和等于m的数。
如输入32,则有9869满足要求。
因为9869各位上数字之和等于32。
#include
usingnamespacestd;
voidf(intm)
{
inti;
for(i=1000;i<10000;i++)
{
intsum=0;
for(intj=i;j>0;j=j/10){sum=sum+j%10;}
if(sum==m){cout<
}
cout<}
intmain()
{
intn,m;
cout<<"n=";
cin>>n;
f(n);
system("pause");
return0;
}
15.已知xxz+yzz=532,求所有可能的x,y,z的值
#include
usingnamespacestd;
intmain()
{
for(intx=0;x<=9;x++){
for(inty=0;y<=9;y++){
for(intz=0;z<=9;z++){
intk=x*10+x*100+z+y*100+z*10+z;
if(k==532)cout<}
}
}system("pause");
return0;
}
16.编程从键盘中随机输入若干整数,统计其中正整数、0、负整数数的个数。
当输入整数100000时结束输入。
#include
usingnamespacestd;
voidmain()
{
intn=0,m=0,k=0,c=0;
while(n!
=100000){
cout<<"n=";
cin>>n;
if(n>0)k++;
elseif(n==0)m++;
elseif(n<0)c++;
}cout<<"正整数的个数是:
"<cout<<"负整数的个数是:
"<cout<<"0的个数是:
"<system("pause");
}
17.编写一程序,输入一个正整数n,求小于等于n的最大素数。
18.求100~999中的。
所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。
例如,因为153=13+53+33,所以153为水仙花数。
#include
usingnamespacestd;
voidmain()
{
inti;
for(i=100;i<=999;i++)
{
intj,sum=0;
j=i;
while(j)
{
intk=j%10;
sum=sum+k*k*k;
j=j/10;
}if(sum==i)cout<}
system("pause");
}
19.求1000之内的所有完数。
所谓完数是指一个数恰好等于它的所有因子之和。
例如,6=1+2+3,所以6为完数。
20.编一程序显示如下图案:
*
***
*****
*******
*********
21.编一程序显示如下图案:
A
ABC
ABCDE
#include
#include
usingnamespacestd;
voidf(intn){
for(inti=1;i<=n;i++){
cout<for(intj=0;j<2*i-1;j++)
{
chart='A'+j;
cout<}
cout<}
}
intmain()
{
f(3);
system("pause");
return0;
}
21.根据π/4=1-1/3+1/5-1/7+…求π的近似值,直到最后一项的值小于0.000001为止。
22.猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,发现只剩一个桃子了,求猴子第一天究竟摘了多少个桃子?
23.编程序模拟剪刀,石头和纸游戏。
游戏规则为:
剪刀剪纸,石头砸剪刀,纸包石头.玩游戏者从键盘上输入s(表示剪刀)或R(表示石头)或P(表示纸),要求两个游戏者交替输入,计算机给出输赢的信息。
24.编写程序输出菲波那切数列的前20项。
即前两项为1,以后每一项为前两项之和。
25.打印九九乘法表。
26.若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?
27.编写程序,输入一个整数,求该整数是几位数?
并输出最高位数字。
#include
usingnamespacestd;
intf(intn)
{
intx=0,j=0;
for(inti=n;i>0;i=i/10){
j++;
if(x
}cout<returnx;
}intmain()
{
intn;
cout<<"n=";
cin>>n;
n=abs(n);
cout<cout<system("pause");
return0;
}
28.从键盘上输入一个正整数n,求出5位数中各位数字之和等于n的所有素数,每行按6个素数输出。
法一:
#include(错误)
usingnamespacestd;
voidf(intm,intn,intk)
{
intl=0;
for(inti=m;i<=n;i++){
ints=0;
for(intj=i;j>0;j=j/10)
s=s+j%10;
if(s==k){
intt,z=sqrt(i);
for(t=2;t<=k;t++)
if(i%t==0)break;
if(t>=k+1){
cout<
l++;
if(l%6==0)cout<}
}
}
}
intmain()
{
f(10000,99999,43);
system("pause");
return0;
}
法二:
(正确)
#include
usingnamespacestd;
voidfoundPrime(intn)
{
intk=0;
for(inti=1