3、输出非波那契数列的前20项,每项占用6个字符的宽度,每行输出5个数。
该数列的通项公式为:
a1=1,a2=1,an=an-1+an-2(n>=3)。
****************************************************************************
#include
#include
voidmain()
{inta=0,a1=0,a2=1,i;
cout<for(i=2;i<=20;i++)
{a=a1+a2;
cout<if(i%5==0)cout<a1=a2;a2=a;}
}
*****************************************************************
#include
voidmain()
{intb[20]={1,1};
cout<
for(inti=2;i<20;i++)
{b[i]=a[i-1]+a[i-2];
cout<
}
*****************************************************************
4、输入一个自然数,判断其是否为素数。
#include
intf1(intn);
voidmain()
{inta;
cin>>a;
if(f1(a))cout<<"yes"<elsecout<<"no"<}
intf1(intn)
{inti=2,f=1;
while(i<=n/2&&f==1)
{if(n%i==0)f=0;
i++;}
returnf;}
5.下面程序在一组数中查找指定数据,请填空完善它。
#include
intsearch(inta[],intn,intk)
{inti;
for(i=0;iif(a[i]=k)
returni+1;
return-1;
}
voidmain()
{intb[10]={23,42,15,46,53,27,58,43,90,32};
intx,p;
cout<<"请输入要查找的数据:
";
cin>>x;
p=search(b,10,x);
if(p==1)
cout<<"位置为:
"<
else
cout<<"没找到!
";
}
6.编写一个函数模板“CountArray”,用于统计一维数组中某个指定值的出现次数。
如对于一维整型数组:
inta[]={1,2,3,5,5,7,8},调用此模板函数可统计出数组a中,“5”出现的次数为“2”。
template
intCoutnArray(Ta[],intn,Tx){
intcount=0;
for(inti=0;iif(x==a[i])count++
}
returncount;
}
7.现有Complex类用于描述复数,其部分代码如下:
classComplex{
private:
doublem_image;//描述实部
doublem_real;//描述虚部
public:
Complex(doublei=0,doublej=0){
m_real=i;
m_image=j;
}
};
(1)用友元重载+运算符
Complexoperator+(Complex&A,Complex&B){
intmimage=B.m_image+A.m_image;
intmreal=B.m_real+A.m_real;
returnComplex(mreal,mimage);
}
(2)用友元重载-运算符
Complexoperator+(Complex&A,double&d){
intreal=A.m_real-d;
returnComplex(real,A.m_image);
}
(3)用友元重载<<运算符
Ostream&operator<<(Ostreamout,constComplex&A){
out<returnout
}
8
#include
classA
{
intnum;
public:
A(inti){num=i;}
A(A&a){num=a.num++;}
voidprint(){cout<};
voidmain()
{
Aa
(1),b(a);
a.print();
b.print();
}
答案:
21
9.猴子吃桃问题:
猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。
intmain(){
intday,x1,x2;
day=9;
x2=1;
while(day>0){
x1=(x2+1)*2;//某天的桃子数x1是前一天桃子数x2加1后的2倍
x2=x1;
day--;
}
cout<<"total="<return0;
}
答案:
1534
10.用递归法求从1到n的平方和:
f
(1)=1(n=1)
f(n)=f(n-1)+n*n(n>1)
#include
usingnamespacestd;
intf(int);
intmain(){
intn,s;
cout<<"inputthenumbern:
";
cin>>n;
s=f(n);
cout<<"Theresultis"<
return0;
}
intf(intn){//递归法求平方和函数
if(n==1)return1;
elsereturn(n*n+f(n-1));
}
11.若一头小母牛从出生第四个年头开始每年生一头母牛,按此规律,第n年时总共会有多少头母牛。
采用递推算法。
voidmain(){
intn,i;
longa=0,b=0,c=0,d=1,temp;
//a是3岁及以上母牛数,b是2岁,c是1岁,d是0岁
cout<<"请输入年数n:
";
cin>>n;
cout<for(i=1;ia+=b;//第n年时,3岁及以上母牛数
b=c;//第n年时,2岁母牛数
c=d;//第n年时,1岁母牛数
d=a;//第n年时,新生牛数
}
cout<<"第n年总共有"<<(11)<<"头母牛。
"<}
12.在矩形类中重载关系运算符>=,采用友元,比较的依据是矩形面积的大小。
重载算术运算符+=,采用成员函数,更新矩形对象,其长与宽,分别添上形参矩形的长与宽。
重载算术运算符+,利用构造函数,采用友元。
classCRect{
intlength,witdth;
public:
CRect(intl,intw){
length=l;
width=w;
}
friendintoperator>=(CRect&r1,CRect&r2){
returnr1.length*r1.width>=r1.length*r1.width;//比较面积
}
voidoperator+=(CRect&r){
length+=r.length;//求长
width+=r.width;//求宽
}
friendoperator+(CRect&r1,CRect&r2){
returnCRect(r1.length+r2.length,r1.width+r2.width);//利用构造函数
}
}
14
编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:
xxkl.dat”中。
#include #include
voidmain(){
ofstream fout("a:
xxk1.dat”);//定义输出文件流并打开文件得2分
if(!
fout){
cerr<<"文件没有打开!
"< exit(l):
}//可有可无
intx;
cin>>x;
while(x!
=-1){
fout< cin>>x;
}
课后比较难的题
1.产生空字符串:
#include
#include
char*mystrspc(char*string,intn)
{
inti;
chara[100];
string=a;
for(i=0;i{
*(string+i)=32;
cout<<*(string+i);
}
returna;
}
voidmain()
{
char*a;
inti;
cout<<"请输入空字符串的个数:
";
cin>>i;
a=newchar[i];
mystrspc(a,i);
delete[]a;
}
2.去掉尾部的空字符串:
#include
#include
char*mytrim(char*string)
{//去掉尾部的
intl=0,p=0;
l=strlen(string);
if(l==0)returnstring;
p=l-1;
while(string[p]==32)
{
string[p--]=0;
if(p<0)break;
}
returnstring;
}
voidmain()
{
chara[100]="yuanjinlong";
cout<}
3.去掉前部的空字符串:
#include
#include
char*myltrim(char*string)
{//去掉前部的
intl=0,p;
l=strlen(string);
if(l==0)returnstring;
p=0;
while(string[p]==''||string[p]=='\t')
{
string[p++]='\n';
if(p>l)break;
}
returnstring;
}
voidmain()
{
chara[100]="yuanjinlong";
cout<}
4.递归法求feb数列的n项
#include
intfeb(intn)
{
if(n==0)return(0);
if(n==1)return
(1);
if(n>1)returnfeb(n-1)+feb(n-2);
}
voidmain()
{
cout<}
5.字符串查找函数
#include
#include
voidmystrchr(charstring[],intc)
{inti;
intk;
k=strlen(string);
for(i=0;i<=k;i++)
{
if(string[i]==c)
{
cout<
i++;
}
}
}
voidmain()
{
chars1[100]="";
cout<<"请输入字符串";
cin>>s1;
charb;
cout<<"请输入查找字符";
cin>>b;
intm=b;
mystrchr(s1,m);
}
6.字符串反转函数
#include
#include
voidmystrrev(charstring[])
{charm;
inti,k;
k=strlen(string);
for(i=0;i<(k/2);i++)
{
m=string[i];
string[i]=string[k-1-i];
string[k-1-i]=m;
}
for(i=0;icout<}
voidmain()
{chars1[100];
cout<<"请输入字符串";
cin>>s1;
mystrrev(s1);
}
7.转置
#include
#definew200//定义常量w=200
voidzhzh(inta[],intm,intn)//定义函数转置zhzh,用一维数组保存
{
intb[w];
for(inti=0;i{
for(intj=0;j{
{
b[j*n+i]=a[i*m+j];//将a[]与矩阵第i行第j列相当的元素保存到b[]第j行第i列
}
}
}
for(intk=0;ka[k]=b[k];
}
voidmain()//用主函数来验证zhzh()函数
{
inta[]={1,2,3,4,5,6,7,8,9,0,11,12,13,14,15};
for(inti=0;i<15;i++)
{
cout<if((i+1)%3==0)//按5行3列输出
cout<}
zhzh(a,3,5);//调用转置函数
for(i=0;i<15;i++)
{
cout<if((i+1)%5==0)//转置后变为3行5列
cout<}
}
8.杨辉三角
#include
intjc(intp)
{
ints=1;
for(inti=1;i<=p;i++)
s=s*i;
if(p=0)
{s=1;}
returns;
}
intzh(intm,intn)
{returnjc(n)/(jc(m)*jc(n-m));}
voidmain()
{
for(intj=0;j<10;j++)
{
for(intk=0;k<=j;k++)
{
if(k==j)
cout<else
cout<}
}
}