江苏科技大学课程实践报告设计题目: 程序设计(VC++)实践设计时间: 至学院:专业班级:学生姓名: 学号指导老师:1.试建立一个类PP,求出下列多项式的前n项的值。
具体要求如下:(1)私有数据成员int n:前若干项的项数。
double x:存放x的值。
double *p:根据n的大小动态申请存放Pn(x) 前n项的数组空间。
(2)公有成员函数PP(int num,double x1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。
~PP():析构函数,释放p指向的动态内存空间。
double fun(int n1,double x):递归函数,用于求多项式的第n1项。
注意:将递归公式中的n用作函数参数。
本函数供process函数调用。
void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。
void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。
(3)在主函数中完成对该类的测试。
先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num 项的值。
程序源代码#include<iostream.h>class pp{int n;double x;double *p;public:pp(int num,double x1);~pp();double fun(int n1,double x);void process();void show();};pp::pp(int num,double x1){n=num;x=x1;p=new double[num+1];}pp::~pp(){delete []p;}double pp::fun(int n1,double x){if(n1==0)return 1;if(n1==1)return x;if(n1>1)return ((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; }void pp::process(){int i;for(i=0;i<=n;i++){*(p+i)=fun(i,x);}}void pp::show(){cout<<"n="<<n<<'\t'<<"x="<<x<<endl;for(int i=0,m=1;i<n;i++,m++){cout<<*(p+i)<<'\t';if(m%4==0)cout<<'\n';}}void main(){int num;double x1;cout<<"put in num and x1"<<endl;cin>>num>>x1;pp items(num,x1);items.process();items.show();}运行结果2.试建立一个类SP,求,另有辅助函数power(m,n)用于求。
具体要求如下:(1)私有成员数据。
int n,k:存放公式中n和k的值;(2)公有成员函数。
SP(int n1,int k1):构造函数,初始化成员数据n和k。
int power(int m, int n):求mn。
int fun( ):求公式的累加和。
void show( ):输出求得的结果。
(3)在主程序中定义对象s,对该类进行测试。
程序源代码#include<iostream.h>class SP{int n,k;public:SP(int n1,int k1);int power(int m,int n);int fun();void show();};SP::SP(int n1,int k1){n=n1;k=k1;}int SP::power(int m,int n) {int i;if(n==0)return 1;elsefor(i=1;i<n;i++)m*=m;return m;}int SP::fun(){int y=0,x;for(x=1;x<=n;x++)y+=power(x,k);return y;}void SP::show(){cout<<"前n项的和为:"<<fun()<<endl;}void main(){int n1,k1;cout<<"输入n1和k1的值"<<endl;cin>>n1>>k1;SP s(n1,k1);s.fun();s.show();}运行结果:3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
具体要求如下:(1)私有数据成员float array[20]:一维整型数组。
int n:数组中元素的个数。
(2)公有成员函数MOVE(float b[],int m):构造函数,初始化成员数据。
void average():输出平均值,并将数组中的元素按要求重新放置。
void print():输出一维数组。
(3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。
程序源代码#include<iostream.h>class MOVE{float array[20];int n;public:MOVE(float b[],int m);void average();void print();};MOVE::MOVE(float b[],int m){int i;n=m;for(i=0;i<m;i++)array[i]=b[i];}void MOVE::average(){int i,x;float a=0;for(i=0;i<n;i++)a+=array[i];a/=n;cout<<"平均值为"<<a<<endl;float ff[20];for(i=0,x=0;i<n;i++)if(array[i]<a){ff[x]=array[i];x++;}for(i=0;i<n;i++)if(array[i]>a){ff[x]=array[i];x++;}for(i=0;i<n;i++)array[i]=ff[i];}void MOVE::print(){int q,p=1;for(q=0;q<n;q++){cout<<array[q]<<'\t';if(p%5==0)cout<<'\n';p++;}}void main(){float b[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};int m=9;MOVE aa(b,m);aa.average();aa.print();}运行结果4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。
具体要求如下:(1)私有数据成员int *array:一维整型数组。
int n:数组中元素的个数。
(2)公有成员函数MOVE(int b[],int m):构造函数,初始化成员数据。
void exchange():输出平均值,并将数组中的元素按要求重新放置。
void print():输出一维数组。
~MOVE():析构函数。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
程序源代码#include<iostream.h>class MOVE{int *array;int n;public:MOVE(int b[],int m);void exchange();void print();~MOVE();};MOVE::MOVE(int b[],int m){n=m;array=new int[n];for(int x=0;x<n;x++)array[x]=b[x];}void MOVE::exchange(){float a=0;int i,*p1,*p2;for(i=0;i<n;i++)a+=array[i];a/=n;cout<<"The average of the number is:"<<a<<endl;p1=p2=&array[0];for(i=0;i<n;i++){if(array[i]<*p1)p1=&array[i];if(array[i]>*p2)p2=&array[i];}i=*p1;*p1=*p2;*p2=i;}void MOVE::print(){int i,num=1;for(i=0;i<n;i++){cout<<array[i]<<'\t';if(num%5==0)cout<<'\n';num++;}}MOVE::~MOVE(){delete []array;}void main(){int b[]={21,65,43,87,12,84,44,97,32,55},n=10;MOVE ff(b,n);ff.exchange();ff.print();}运行结果5.定义一个类Palindrome,实现绝对回文数。
设计一个算法实现对任意整型数字判断是否为绝对回文数。
所谓绝对回文数,是指十进制数和二进制数均对称的数。
具体要求如下:(1)私有数据成员int n:整型数字。
int y:标记是否为回文数。
(2)公有成员函数Palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。
void huiwen () :判断数n是否为绝对回文数。
void show( ) :若该数为回文数,则在屏幕显示。
(3)在主程序中定义int a,由键盘输入数字。
定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。
程序源代码#include<iostream.h>class palindrome{int n;int y;public:palindrome(int x);void huiwen();void show();};palindrome::palindrome(int x){n=x;y=0;}void palindrome::huiwen(){int b[20],c[50],m,i,p=0,t1=1,t2=1;m=n;for(i=0;m>0;m/=10){p++;b[i]=m%10;i++;}for(i=0;i<p;i++)if(b[i]!=b[p-i-1]){t1=0;break;}for(i=0,m=n,p=0;m>0;m/=2) {p++;c[i]=m%2;i++;}for(i=0;i<p;i++)if(c[i]!=c[p-i-1]){t2=0;break;}if(t1&&t2)y=1;}void palindrome::show(){if(y==0)cout<<"该数不是回文数!"<<endl;else cout<<"该回文数是:"<<n<<endl;}void main(){int a;cout<<"输入a的值"<<endl;cin>>a;palindrome p(a);p.huiwen();p.show();}运行结果:6.定义一个字符串类String,实现判断该字符串是否为回文字符串。