";
}
return0;
}
3
许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如dad(爸爸)、noon(中午)、level(水平)等,这样的词称为回文词。
在最权威的《牛津英语大词典》里,最长的回文词是tattarrattat,是个象声词,表示敲门的声音。
英语的回文句更有趣味(忽略其中的标点符号)。
最著名的一句为:
“Madam,I’mAdam.”(小姐,我是亚当。
)据说,这是亚当在伊甸园里初见夏娃作自我介绍时说的话。
现要求编写一个函数boolhuiwen(char*p),判断输入的一个单词是否为回文词。
p是指向要输入的字符串的指针,如果是返回true,否则返回false。
#include
usingnamespacestd;
boolhuiwen(char*p)
{
char*q=p+strlen(p)-1;
for(inti=0;iif(*p!
=*q)
returnfalse;
returntrue;
}
voidmain()
{
charch[100];
cin>>ch;
if(huiwen(ch))
cout<<"yes";
else
cout<<"no";
cin.get();
cin.get();
}
4
编写一个函数,用于生成一个由若干个指定字符构成的字符串,其原型为:
voidmystr(charc,intn,char*p);其中,参数c是构造字符串的字符,n是字符串中字符的个数,p是生成的字符串的首地址。
要求:
编写主函数,在主函数中进行字符和字符个数的输入,然后再调用mystr函数生成字符串,最后在主函数中将生成的字符串输出。
#include
usingnamespacestd;
voidmystr(charc,intn,char*p)
{
for(inti=1;i<=n;i++)
cout<return;
}
intmain()
{
charc;
char*p;
p=&c;
intn;
cin>>c;
cin>>n;
mystr(c,n,p);
return0;
}
5
有一个有趣的古典数学问题:
有一对兔子,从出生后第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生1对兔子。
假设所有兔子都不死,问每个月兔子的总对数为多少?
提示:
不满1个月的为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。
每对老兔子每个月会生1对小兔子。
因此,每个月的兔子总数依次为1,1,2,3,5,8,13,…。
这就是Fibonacci数列。
该数列的递归定义如下:
f(n)=1(n等于1或2);f(n)=f(n-1)+f(n-2)(n>2)
请编写递归函数intfib(intn),求出第n个月兔子的总对数。
#include
usingnamespacestd;
voidfib(ints)
{
intd=1,f=1,sum=0,n=1,t=0;
while(n
{
n++;
t=f;
f=d;
d+=t;
sum=d+f;
}
cout<<"第"<
}
intmain()
{
ints;
cin>>s;
if(s!
=1)
fib(s);
else
cout<<"第1个月兔子的总对数为1"<return0;
}
实验五
1
仿照本次实验预习的程序填空题1,将以上Distance函数定义为类piont的友元函数,实现程序的功能。
并在主函数中增加输入两点作为友元函数的实参。
#include
#include
usingnamespacestd;
classpoint
{
public:
point(floata,floatb){x=a;y=b;}
friendfloatDistance(pointp1,pointp2)
{
floatdx=p1.x-p2.x;
floatdy=p1.y-p2.y;
return(float)sqrt(dx*dx+dy*dy);
}
private:
floatx,y;
};
intmain()
{
floatp1_x,p1_y,p2_x,p2_y;
//输入四个点
cin>>p1_x>>p1_y>>p2_x>>p2_y;
pointp1(p1_x,p1_y),p2(p2_x,p2_y);
cout<return0;
}
2
根据以下主函数的功能来设计日期类CDateInfo,使其能正确运行。
类CDateInfo中应该具有描述年、月、日的三个数据成员和相应的成员函数。
#inc