江苏科技大学课程实践报告设计题目: 计算机程序设计实践(VC++)设计时间: 2015. 3.9 至2015. 3.16学院: 数理学院专业班级: 13级信息与计算科学1班学生姓名: 陈明敏学号********** ****: **2015年5月1日一、 实践任务任务一:试建立一个类SP ,求(,)123k k kk f n k n =++++,另有辅助函数power ()用于求n m 。
具体要求如下。
(1)私有数据成员。
Int n ,k :存放公式中n 和k 的值。
(2)公有成员函数。
①SP(int n1,int k1):构造函数,初始化成员数据n 和k 。
②int power(int m,int n):求n m 。
③int fun():求公式的累加和。
④void show():输出求得的结果。
二、源程序清单#include <iostream.h> class SP{ private: 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 a=m;for(int i=1;i<n;i++) {a*=m; }return a; }int SP::fun(){ int a=0;for(int i=1;i<=n;i++) {a+=power(i,k); }return a;}void SP::show(){cout<<fun()<<endl;}void main(){ int a; int b;cin>>a>>b;SP s(a,b);s.fun();s.show();}三、实践小结本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,本题还使用了递归的方法四、运行结果一、实践任务任务二:建立一个STRING类,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。
例如,将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
具体要求如下。
(1)私有数据成员。
①char str1[60]:存放被插入的字符串。
②char str2[40]:存放待插入的字符串。
③char str3[100]:存放插入后的字符串。
(2)公有成员函数。
①STRING(char *s1,char *s2):构造函数,用s1和s2初始化str1和str2。
②void process():将str2中的字符串插入到str1中。
③void print():输出插入后的字符串。
(3)在主程序中定义STRING类的对象test对该类进行测试。
二、源程序清单#include<iostream.h>#include<string.h>class STRING{private:char str1[80];char str2[40];public:STRING(char *s1,char *s2);void process();void print();};STRING::STRING(char*s1,char *s2){strcpy(str1,s1);strcpy(str2,s2);}void STRING::process(){char s[80];char*p=str1;char*q=str2;int n=2*strlen(str1)-1;for(int i=0;i<n;i++){s[i]=*p++;i++;s[i]=*q++;}s[i]='\0';strcpy(str1,s);}void STRING::print(){cout<<str1<<endl;}void main(){char s1[80]={"ABCDE"},s2[40]={"abcde"};STRING test(s1,s2);test.process();test.print();}三、实践小结本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关字符串的排序的求解方式。
四、运行结果一、实践任务任务三:建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。
具体要求如下。
(1)私有数据成员。
①int array[20]:一维整型数组。
②int n:数组中元素的个数。
(2)公有成员函数。
①MOVE(int b[],int m):构造函数,初始化成员数据。
②void change():进行循环换位。
③void print()输出一维数组。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
二、源程序清单:#include <iostream.h>class MOVE{private:int array[20];int n;public:MOVE(int b[],int m);void change();void print();};MOVE::MOVE(int b[],int m){for(int i=0;i<m;i++){array[i]=b[i];}n=m;}void MOVE::change(){int a=n;int b[3];for(int i=0;i<3;i++){b[i]=array[a-3];a++;}for(int j=n-1;j>=3;j--){array[j]=array[j-3];}for(int k=0;k<3;k++){array[k]=b[k];}}void MOVE::print(){for(int i=0;i<n;i++)cout<<array[i]<<'\t';cout<<endl;}void main(){int a[10]={21,65,43,87,12,84,44,97,32,55};MOVE s(a,10);s.change();s.print();}三、实践小结本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关数组中元素进行循环换位的求解方式。
四、运行结果一、 实践任务任务四:定义一个类SIN ,求3571(21)sin()/1/3!/5!/7!(1)/(21)!n n x x x x x x n +-=-+-++--。
具体要求如下。
(1)私有数据成员。
①double x :输入公式中x 的值,求sin (x )。
②int n :输入公式中n 的值。
(2)公有成员函数。
①SIN(double x,int n):构造函数,用于初始化x 和n 的值。
②double power(int q):求q !的值。
③double mi(double m ,int n):求nm 的值。
④double fun():用于求sin (x )的值。
⑤void show():输出求得的结果。
(3)在程序中定义对象test ,对该类进行测试。
二、源程序清单:#include <iostream.h> class SIN{ private:double x; int n; public:SIN(double x,int n); double power(int q);double mi(double m ,int n);double fun();void show();};SIN::SIN(double x,int n){this->x=x;this->n=n;}double SIN::power(int q){double s=1;int c=1;for(;c<=q;c++){s*=c;}return s;}double SIN::mi(double m,int n){double s=m;int c=1;for(;c<n;c++){s*=m;}return s;}double SIN::fun(){double s=0;double k=-1;for(int m=1;m<=n;m++){k*=(-1);s+=k*mi(x,2*m-1)/power(2*m-1);}return s;}void SIN::show(){cout<<fun()<<endl;}void main(){int a,b;cout<<"输入两个数整数:";cin>>a>>b;SIN test(a,b); test.fun(); test.show(); }三、实践小结本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了递归的方法。
四、运行结果一、 实践任务任务五:定义一个方阵类Array ,实现对方阵进行逆时针90︒旋转。
如图5-4所示。
1234481216567837111591011122610141314151615913⎛⎫⎛⎫⎪ ⎪⎪ ⎪⇒ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭图5-4 对方阵进行逆时针 旋转具体要求如下。
(1)私有数据成员。
Int a[4][4]:用于存放方阵。
(2)公有成员函数。
①Array(int a1[][4],int n):构造函数,用给定的参数a1初始化数据成员a 。
②void xuanzhuan():实现对方阵a 进行逆时针90︒的旋转。
90︒③void show():在屏幕上显示组元素。
(3)在主程序中定义数组int b[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};作为原始数组。
定义一个Array类对象test,用b初始化test,完成对该类的测试。
二、源程序清单:#include <iostream.h>class Array{private:int a[4][4];public:Array(int a1[][4],int n);void xuanzhuan();void show();};Array::Array(int a1[][4],int n){for(int i=0;i<n;i++){for(int j=0;j<4;j++){a[i][j]=a1[i][j];}}}void Array::xuanzhuan(){int b[4][4];for(int i=0;i<4;i++){for(int j=0;j<4;j++){b[j][i]=a[i][j];}}for( i=0;i<4;i++){for(int j=0;j<4;j++){a[i][j]=b[3-i][j];}}}void Array::show(){for(int i=0;i<4;i++){for(int j=0;j<4;j++){cout<<a[i][j]<<'\t';}cout<<endl;}}void main(){int b[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};Array test(b,4);cout<<"原来的数组为:"<<endl;test.show();cout<<"旋转后的数组为:"<<endl;test.xuanzhuan();test.show();}三、实践小结本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关二维数组旋转的求解方式。