C++编程题及答案.docx
《C++编程题及答案.docx》由会员分享,可在线阅读,更多相关《C++编程题及答案.docx(23页珍藏版)》请在冰豆网上搜索。
C++编程题及答案
C++编程题
1、求Sn=a+aa+aaa+aaaa+…+aa…a(n个a)之值,其中a是一个数字,n表示a的位数。
程序如下:
例如:
2+22+222+2222(此时a=2,n=4)
#include
usingnamespacestd;
intmain()
{
inta,n,b=0,s=0;
cin>>a>>n;
for(inti=1;i<=n;i++)
{
b=b*10+a;
s+=b;
}
cout<
return0;
}
2、从键盘上输入一个正整数,判别它是否为一回文数。
如:
123321
程序如下:
#include
usingnamespacestd;
intmain()
{
longi,n,m;
cout<<"请输入一个整数"< cin>>m;
cout<i=m;n=m;m=0;
while(i)
{ m=m*10+i%10;
i=i/10; }
if(m==n)cout<<"是回文数";
elsecout<<"不是回文数";
cout< return0;
}
3、n为一个整数(小于10万),它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序如下:
#include
#include
usingnamespacestd;
intmain()
{
unsignedlonginti,x,y,z;
for(i=1;i<1000000;i++)
{
x=(sqrt(i+100));
y=(sqrt(i+268));
if(x*x==i+100&&y*y==i+268)
{
cout<
}
return0;
}
4、求1000之内的完全数。
Ÿ说明:
完全数就是:
除了它本身以外所有因子之和等于其本身,例如:
6=1+2+3。
程序如下:
#include
usingnamespacestd;
intmain()
{
inti,j,t;
cout<<"1000以内的完全数为"<for(i=1;i<=1000;i++)
{
t=0;
for(j=1;j
if(i%j==0)t+=j;
if(t==i)
cout<
}
return0;
}
5、求出[900,1000]间有偶数个因子(这里因子不含1和自身)的数有多少个,其中最小的一个?
程序如下:
#include
#include
usingnamespacestd;
voidmain()
{
inti,w=0,j=0;
floata;
for(i=900;i<=1000;i++)
{
a=sqrt(i);
if(a*a==i)
j++;
else
w++;
if(w==1)
cout<<"[900,1000]间有偶数个因子的数的个数为"<
}
cout<<"[900,1000]中最小的有偶数因子的数是";
cout<}
6、编写一个自定义函数:
intf(intM,intN),f()的功能是:
对给定的正整数M和N,找出满足方程“7x+4y=M”的正整数解中x是偶数且y是奇数的解,其中:
x,y属于[1,N]的范围。
Ÿ要求:
若M和N不都是正整数,则结束函数并返回-1;只有M和N都是正整数时,才继续求解操作,用二重循环进行求解:
(1)在函数中输出满足条件的正整数解x和y,
(2)并且使函数值返回满足条件的正整数解的组数。
程序如下:
(可参考第20题)
intf(intM,intN)
{
intx,y,count=0;
if(M<1||N<1)return-1;
for(x=2;x<=N/7;x+=2)
{
for(y=1;y<=M/4;y+=2)
{
if(7*x+4*y==M)
{ count++;
cout<<"x="< }
}
}
return(count?
count:
-1);
}
7、写一个函数:
找出一个整数数组中,第二大的数.
程序如下:
intfind_sec_max(intdata[],intcount)
{
intmaxnumber=data[0];
intsec_max=data[0];
for(inti=1;i{
if(data[i]>maxnumber)
{
sec_max=maxnumber;
maxnumber=data[i];
}
else
{
if(data[i]>sec_max)
sec_max=data[i];
}
}
returnsec_max;
}
8、写一个函数,找出给定字符串中数字字符(即’0’—‘9’这10个数字)的个数(如字符串“olympic2000”中数字字符的个数为4个。
函数的原型为:
intCalcDigital(char*str);
函数参数:
str为所要处理的字符串。
函数返回值:
所给字符串中数字字符的个数。
程序如下:
int CalcDigital(char*str)
{
if(str==NULL)
return0;
intnum_of_digital=0;
for(inti=0;str[i]!
=0x0;i++)
if(str[i]<=9&&str[i]>=0)
num_of_digital++;
returnnum_of_digital;
}
9、编写一个自定义函数:
intf(charx,intN),f()的功能是:
对给定的字符c和整数N,用c代表的符号打印一个N行的图案,每行开头没有任何空格。
比如,当c为"*"且N为5时,打印的图案如本题图所示。
且函数值返回1。
#include
usingnamespacestd;
intf(charx,intN);
intmain()
{
f('*',5);
return0;
}
程序如下:
#include
usingnamespacestd;
intf(charx,intN);
intmain()
{
f('*',5);
return0;
}
intf(charx,intN)
{
for(inti=0;i{
for(intj=0;j<=i;j++)
cout< cout<}
return0;
}
10、编写一个自定义函数:
intf(intN),f()的功能是:
对给定的正整数N,打印一个N行N列的由"A"、"B"、"C"以及空格""符号组成的方阵图案。
比如,当N为5时,打印的图案如本题图所示。
且函数值返回1。
#include
usingnamespacestd;
intf(intN);
voidmain()
{f(5);}
程序如下:
#include
usingnamespacestd;
intf(intN);
voidmain()
{f(5);}
intf(intN)
{
inti,j;
for(i=0;i{
for(j=0;j{
if(j==0||j==i)cout<<"A";
elseif(i else cout<<"C";
}
cout<}
return1;
}
11、编写函数f(),计算具有n个元素的一维数组a中每组相邻两个数的差,找出其中的最大差作为函数值返回。
#include
usingnamespacestd;
#defineM5
intf(inta[],intn);
voidmain()
{inti,a[M];
for(i=0;i cin>>a[i];
cout<<"Theresultis"<}
程序如下:
#include
usingnamespacestd;
#defineM5
intf(inta[],intn);
voidmain()
{inti,a[M];
for(i=0;i cin>>a[i];
cout<<"Theresultis"<}
intf(inta[],intn)
{
inti,t;
t=abs(a[0]-a[1]);
for(i=1;i if(treturnt;
}
12、根据下列要求和提示,编写一个函数f(N)判断某数N是否为“完全数”,N由主函数给出;如果N是“完全数”则函数值返回1,N不是“完全数”则函数值返回0。
“完全数”定义如下:
如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。
如:
6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。
#include
usingnamespacestd;
intf(intN);
voidmain()
{intN;
cin>>N;
if(f(N)==1)
cout<"< else
cout<"<}
程序如下:
#include
usingnamespacestd;
intf(intN);
voidmain()
{intN;
cin>>N;
if(f(N)==1)
cout<"< else
cout<"<}
intf(intN)
{
inti,s=0;
for(i=1;i if(N%i==0)s=s+i;
if(s==N)return1;
return0;
}
13、编写程序,求e的值,e≈1+1/1!
+1/2!
+1/3!
+1/4!
+...,最后一项的值小于1e-6。
程序如下:
#include
usingnamespacestd;
intmain()
{
inti=0;
doublej=1,e=1;
while(1/j>1e-6)
{
i=i+1;
j=j*i;
e=e+1/j;
}
cout<<"e="<return0;
}
14、有十进制数字a,b,c,d和e,求满足式子:
abcd*e=dcba(a非0,e非0非1)的四位数中:
(1)共有多少个?
(2)最小的abcd;
(3)与之相对应的e。
程序如下:
#include
usingnamespacestd;
intmain()
{
inta,b,c,d,e;
ints=0,f=0;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
for(e=2;e<=9;e++)
if((a*1000+b*100+c*10+d)*e==d*1000+c*100+b*10+a)
{s++;
if(f==0)
cout< f=1;
}
cout<
return0;
}
15、有一个7层灯塔,每层所点灯数都等于该层上一层的两倍,灯的总数是381盏,求:
塔底灯数?
第几层的灯数为48?
程序如下:
#include
usingnamespacestd;
voidmain()
{
inti,j,t,s;
for(i=1;;i++)
{
t=i;
s=0;
for(j=1;j<=7;j++)
{
s=s+t;
if(t==48)cout< t=t*2;
}
if(s==381)
break;
}
cout<<"塔底灯数="<}
16、有3个红球,5个白球,6个黑球,从中任意取出8个球,且其中必须有白球,请求出共有多少种取法?
程序如下:
#include
usingnamespacestd;
voidmain()
{
intr,w,b,c=0;
for(r=0;r<=3;r++)
for(w=1;w<=5;w++)
for(b=0;b<=6;b++)
if(r+w+b==8)c++;
cout<}
17、求数列1,3,3,3,5,5,5,5,5,7,7,7,7,7,7,7……。
求:
第40项的值;值为17的第1个数是数列中第几项?
程序如下:
#include
usingnamespacestd;
voidmain()
{
inti,j,c=0;
for(i=1;;i+=2)
{
if(i==17)
{
cout<<"值为17的第1个数的项数为"< break;
}
for(j=1;j<=i;j++)
{
c++;
if(c==40)cout<<"第40项的值ֵ="<
}
}
}
18、计算p的近似值,直到最后一项的绝对值小于10-8为止,近似公式为
程序如下:
#include"stdafx.h"
#include
usingnamespacestd;
intmain(intargc,char*argv[])
{
doublepi=1,t=1,i=1;
while(1/>=1e-8)
{t=-t;
i=i+2;
pi=pi+t/i;
}
cout<<"pi="<<4*pi<return0;
}
19、用牛顿迭代法求方程3x^3-4x^2-5x+13=0在x=1附近的根,要求精度为10-6。
牛顿迭代公式为:
x1=x0-f(x0)/f"(x0)
程序如下:
#include
#include
usingnamespacestd;
intmain()
{
doublediedai(doublea,doubleb,doublec,doubled,doublex);
doublea,b,c,d;
doublex=10000.0;
cout<<"请依次输入方程四个系数:
";
cin>>a>>b>>c>>d;
x=diedai(a,b,c,d,x);
cout<return0;
}
doublediedai(doublea,doubleb,doublec,doubled,doublex)
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
returnx;
}
20、编写一个自定义函数:
intf(int M,intN),函数f的功能是:
对给定的正整数M和N,找出满足方程"5x+6y=M"的正整数解中x和y都是偶数的解。
要求:
若M和N不都是正整数,则结束函数并返回-1;只有M和N都是正整数时,且x,y∈[1,N],才继续求解操作,并用二重循环进行求解:
(1)在函数中输出满足条件的正整数解x和y,
(2)使函数值返回满足条件的正整数解的组数。
#include
usingnamespace std;
intf(intM,intN);
voidmain()
{ cout<程序如下:
#include
usingnamespace std;
intf(intM,intN);
voidmain()
{ cout<intf(intM,intN)
{
intx,y;
intn=0;
if(M<0||N<0)return-1;
for(x=1;x for(y=1;y { if(5*x+6*y==M&&x%2==0&&y%2==0)
{n=n+1;
cout<<"x="< }
returnn;
}
21、编写一个自定义函数:
intf(longa[],intn,longx),f()的功能是:
对给定的含有n个元素的一维数组a及某个指定数x,查找数组a中是否存在元素值等于x的元素,若存在,则函数值返回找到的下标最大的那个元素的下标;若不存在,则函数值返回-1。
#include
usingnamespace std;
intf(longa[],intn,longx);
voidmain()
{longx=7;
long a[5]={3,5,2,7,9};
cout<}
程序如下:
#include
usingnamespace std;
intf(longa[],intn,longx);
voidmain()
{longx=7;
long a[5]={3,5,2,7,9};
cout<}
intf(longa[],intn,longx)
{
inti;
intmaxi=-1;
for(i=1;i if(a[i]==x) maxi=i;
if(maxi>=0)returnmaxi;
elsereturn-1;
}
22、求s=2+22+222+...+222...2的和,即第n个加数是一个n位的整数,且各数位上的数字均为2,例如当n=4时,s=2+22+222+2222。
要求设计一个函数intf(intn)求每一个加数,在main()中用累加求和方式求出总和。
#include"stdafx.h"
#include
intf(intn);
intmain(intargc,char*argv[])
{
ints=0,i,n;
cout<<"Inputn:
";
cin>>n;
for(i=1;i<=n;i++)
s=s+f(i);
cout<<"2+22+222+...="<
return0;
}
程序如下:
#include
intf(intn);
intmain(intargc,char*argv[])
{
ints=0,i,n;
cout<<"Inputn:
";
cin>>n;
for(i=1;i<=n;i++)
s=s+f(i);
cout<<"2+22+222+...="<
return0;
}
intf(int n)
{
int i,j=0;
for(i=1;i<=n;i++)
j=2+j*10;
returnj;}
23、所有能被13整除又能被17整除且末位不是偶数的三位数有几个?
最大的一个?
程序如下:
#include
usingnamespacestd;
intmain(intargc,char*argv[])
{
inti,j=0;
for(i=999;i>=101;i-=2)
if(i%(13*17)==0)
{j++;
if(j==1)c=i;
}
cout<return0;
}
24、有一个分数序列:
1/2,2/3,3/5