4•试定义一个类STR,统计一个字符串中包含的句子数和单词数,规定单词之间以空格、”
或”•”分隔,句子以”•”结束,具体要求如下
(1)私有数据成员
char*s:
指向待统计的字符串
intm,n:
分别记录求得的单词数和句子数
(2)公有成员函数
STR(char*t):
构造函数,用参数t初始化字符串s
voidfun():
按题意统计单词数,结果存放在数据成员m中,再统计句子数,结果存放在数据成
员n中
voidprint():
按输出示例的格式输出统计结果
~STR():
析构函数,实现必要的功能
(3)在主函数中对该类进行测试
输出示例:
字符串:
lamastudent.Iamtwenty.Icomfromchina.
句子数:
3
单词数:
11
源程序代码:
#includeviostream.h>
#include
classSTR
{
char*s;
intm,n;
public:
STR(char*t);
voidfun();
voidprint();
~STR()
{delete[]s;}
};
STR:
:
STR(char*t)
{
s=newchar[strlen(t)+1];strcpy(s,t);
}
voidSTR:
:
fun()
{
char*p=s;
m=0;n=0;
while(*p)
{
if(*p=='.')n++;
if(*p==''||*p==';'||*p==','||*p=='.')m++;while(*p=='')p++;
p++;
}
}
voidSTR:
:
print()
{
coutvv"字符串:
"vvsvvendl;
coutvv"句子数:
"vvnvvendl;
coutvv"单词数:
"vvmvvendl;
}
voidmain()
{
chars[100];
cin.getline(s,100);
STRt(s);
t.fun();
t.print();
}
运行结果:
l'Fi\linc++\li诜计句子数单词Debug\0004-exe"
|Ian&student.IamtwentyconFromchina.
字符串amastudentIamtuontyIconfromchina.
词数江1
5•试建立一个类PP,求出下列多项式的前n项的值。
具体要求如下:
(1)私有数据成员
1.intn:
前若干项的项数。
2.doublex:
存放x的值。
3.double*p:
根据n的大小动态申请存放Pn(x)前n项的数组空间。
(2)公有成员函数
1.PP(intnum,doublex1):
构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。
2.〜PP():
析构函数,释放p指向的动态内存空间。
3.doublefun(intn1,doublex):
递归函数,用于求多项式的第n1项。
注意:
将递归公式中的
n用作函数参数。
本函数供process函数调用。
4.voidprocess():
完成求前n项的工作,并将它们存放到p指向的动态数组中。
5.voidshow():
输出n和x,并将前n项以每行4个数的形式输出到屏幕上。
(3)在主函数中完成对该类的测试。
先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。
源程序代码:
#include
classpp{
intn;
doublex;
double*p;
public:
pp(intnum,doublex1);
~pp();
doublefun(intn1,doublex);
voidprocess();
voidshow();
};
pp:
:
pp(intnum,doublex1)
{
n=num;
x=x1;
p=newdouble[num+1];
}
pp:
:
~pp()
{
delete[]p;
}
doublepp:
:
fun(intn1,doublex)
{
if(n1==0)return1;
if(n1==1)returnx;
if(n1>1)return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1;
}
voidpp:
:
process()
{
inti;
for(i=0;i<=n;i++)
{
*(p+i)=fun(i,x);
}
}
voidpp:
:
show()
{
cout<<"n="<{
cout<<*(p+i)<<'\t';if(m%4==0)cout<<'\n:
}
}voidmain()
{
intnum;
doublex1;
cout<<"请依次输入num和x1的值"<>x1;
ppitems(num,x1);
items.process();
items.show();
}
运行结果:
'F;\lint++\lin\5,建立PP求雾项式\D亡心孑•
p青依次输入n吓和5的值
32
n=3x=2
125_5Pressanvtocontinuje
6.试建立一个类SP,求,另有辅助函数power(m,n)用于求具体要求如下:
(1)私有成员数据。
1.intn,k:
存放公式中n和k的值;
(2)公有成员函数。
1.SP(intn1,intk1):
构造函数,初始化成员数据n和k。
2.intpower(intm,intn):
求mn。
3.intfun():
求公式的累加和。
4.voidshow():
输出求得的结果。
(3)在主程序中定义对象s,对该类进行测试。
源程序代码:
#include
classSP{
intn,k;
public:
SP(intn1,intk1);
intpower(intm,intn);
intfun();
voidshow();
};
SP:
:
SP(intn1,intm1)
{
n=n1;
k=m1;
}
intSP:
:
power(intm,intn)
{
inti;
if(n==O)return1;
else
for(i=1;im*=m;
returnm;
}
intSP:
:
fun()
{
inty=0,x;
for(x=1;x<=n;x++)
y+=power(x,k);
returny;
}
voidSP:
:
show()
{
cout<<"前n项的和为:
"<voidmain()
intn1,k1;
cout<<"输入n和k的值"<>k1;
SPs(n1,k1);
s.fun();
s.show();
}
运行结果:
*F:
\linc++\lrn\6.建立类SP求打n.k)\Debi
7.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。
具体要求如下:
(1)私有数据成员
1.int*array:
一维整型数组。
2.intn:
数组中元素的个数。
(2)公有成员函数
3.MOVE(intb[],intm):
构造函数,初始化成员数据。
4.voidexchange():
输出平均值,并将数组中的元素按要求重新放置。
5.voidprint():
输出一维数组。
6.~MOVE():
析构函数。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
程序源代码:
#include
classMOVE{
int*array;
intn;
public:
MOVE(intb[],intm);
voidexchange();
voidprint();~MOVE();
};
MOVE:
:
MOVE(intb[],intm)
{
n=m;
array=newint[n];
for(intx=0;x}
voidMOVE:
:
exchange()
{
floata=0;
inti,*p1,*p2;
for(i=0;ia/=n;
cout<<"数组的平均数为:
"<p1=p2=&array[0];
for(i=0;i{
if(array[i]<*p1)p仁&array[i];if(array[i]>*p2)p2=&array[i];
}
i=*p1;*p1=*p2;
*p2=i;
}
voidMOVE:
:
print()
{
inti,num=1;
for(i=0;i{cout<if(num%5==0)cout<<'\n';
num++;
}
}
MOVE:
:
~MOVE()
{delete[]array;}
voidmain()
{
intb[]={21,65,43,87,12,84,44,97,32,55},n=10;MOVEff(b,n);
cout<<"变化前数组为:
"<ff.print();
ff.exchange();
cout<<"变化后数组为:
"<ff.print();
4
s
为匕
54勺目5
平数
且匕
1
12
55
43
7
on
4441232
^'esske9tocontinue
97
55
运行结果:
14
8•定义一个类Palindrome,实现绝对回文数。
设计一个算法实现对任意整型数字判断是否为绝对回文数。
所谓绝对回文数,是指十进制数和二进制数均对称的数。
具体要求如下:
(1)私有数据成员
1.intn:
整型数字。
2.inty:
标记是否为回文数。
(2)公有成员函数
1.Palindrome(intx):
构造函数,根据x参数初始化数据成员n,y初始化为0。
2.voidhuiwen():
判断数n是否为绝对回文数。
3.voidshow():
若该数为回文数,则在屏幕显示。
(3)在主程序中定义inta,由键盘输入数字。
定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。
源程序代码:
#include