江科大c++实践报告册
江苏科技大学
课程实践报告
设计题目: 程序设计(VC++)实践 设计时间: 2014-9-1 至 2014-9-5
学 院: 计算机科学与工程学院 专业班级: 通信工程 学生姓名: 张伟 学号 ********** ****: * *
2014年 09月
}
试题一
一、程序设计基本题
试建立一个类SP,求f(n,k)=1k +2k+3k+…+nk ,另有辅助函数power(m,n)用于求mn 。 具体要求如下:
(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,对该类进行测试。
二、系统设计
1、概要设计
通过类SP的成员函数power()求出m的n次方的值,再通过成员函数fun( )调用power( )函数求出f(n,k)的值。
2、详细设计
①类的定义如下: class SP {
int n,k; public:
SP(int n1,int k1){} int power(int m,int n){} int fun ( ){} void show( ) };
②类的主要成员函数的设计 int power(int m,int n) {
int p=1; //用for循环语句来实现求mn的值 for(int i=1;i s=0; //用for循环语句来实现公式的累加和 for(int j=1;j<=n;j++) s+=power(j,k); return s; } 三、系统测试 在主函数中初始化SP的对象s,并调用其成员函数show( )输出测试结果。 主函数定义如下: void main( ) { int n,k; cin>>n>>k; SP s(n,k); s.power(n,k); s.fun(n,k); s.show( ); } 用以测试的数据为: 2 3 预期的输出结果为: 9 四、实践小结 这道题值得注意的是在成员函数fun( )中调用了函数power( ),还有对for循环语句的熟练运用。 五、源程序清单 #include int n,k,s; public: SP(int n1,int k1){ n=n1; k=k1;} int power(int m,int n){ int p=1; for(int i=1;i s+=power(j,k); return s; } void show() { cout<<\"和为\"< int n,k; cin>>n>>k; SP s(n,k); s.power(n,k); s.fun(n,k); s.show(); } 试题二 一、程序设计基本题 建立一个类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}对 该类进行测试。 二、系统设计 1、概要设计 根据数组中元素的个数开辟一个动态数组空间array,通过类MOVE的成员函数exchange()输出一维数组的平均值,并把数组中最大元素和最小元素的位置相互交换,并把新的数组放在开辟的动态数组空间中。程序结束前释放为array分配的动态空间。 2、详细设计 ①类的定义如下: class MOVE { int *array; int n; public: MOVE(int b[ ],int m){} void exchange( ){} void print( ){} ~MOVE( ){} }; ②类的主要成员函数的设计 void exchange() { float p,s=0; for(int i=0;i if(max } //求所有元素中的最小值 array[a]=min; array[b]=max; } 三、系统测试 在主函数中初始化MOVE的对象move,并调用其成员函数exchange( )和print( )输出测试结果。 主函数定义如下: void main( ) { int s[ ]={21,65,43,87,12,84,44,97,32,55}; MOVE move(s,10); move.exchange( ); move.print( ); } 用以测试的数据为: 21 65 43 87 12 84 44 97 32 55 预期的输出结果为: 平均值:54 21 65 43 87 97 84 44 12 32 55 四、实践小结 这道题主要是求数组中所有元素的平均值以及元素中的最大值和最小值,同时还要注意析构函数的运用。 五、源程序清单 #include int *array; int n; public: MOVE(int b[],int m) { n=m; array=new int[n]; for(int i=0;i if(max array[a]=min; array[b]=max; } void print() { for(int i=0;i void main() { int s[]={21,65,43,87,12,84,44,97,32,55}; MOVE move(s,10); move.exchange(); move.print(); } 试题三 一、程序设计基本题 定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文 字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。 具体要求如下: (1)私有成员函数 char*str; int y:标记是否为回文字符串。 (2)公有成员函数 String(char*s):构造函数,用给定的参数s初始化数据成员str。 Y初始化为0。 void huiwen():判断str所指向的字符串是否为回文字符串。 void show():在屏幕上显示字符串。 (3)在主程序中定义字符串char s[]=“ababcedbaba”作为原始字符串。定 义一个String类对象test,用s初始化test,完成对该类的测试。 二、系统设计 1、概要设计 通过回文函数来进行判断,然后将函数判断结果进行输出。 2、详细设计 ①类的定义如下: class String { char *str; int b; public: String(char *s){} void huiwen( ){} void show( ){} ~String( ){} }; ②类的主要成员函数的设计 void huiwen() { char *p1=str,*p2=str; while(*p2)p2++;p2--; for(;p1 在主程序中定义字符串char s[]=“ababcedbaba”作为原始字符串。定义一个String类对象test,用s初始化test,并调用其成员函数huiwen( )和show( )。 void main( ) { char *s=\"ababcedbaba\"; String test(s); test.huiwen( ); test.show( ); } 用以测试的字符串为: ababcedbaba 预期的输出结果为: ababcedbaba不是回文字符串 四、实践小结 这道题困难在于用指针来操作字符串,定义了两个指针,分别指向字符串的首尾,通过比较两个指针所指的字符是否相等来判断是否为回文字符串。相等则前一个指针自增,后一个自减。若不等则不是回文字符串。 五、源程序清单 #include char *str; int b; public: String(char *s) { str=new char[strlen(s)+1]; strcpy(str,s); b=0; } void huiwen() { char *p1=str,*p2=str; while(*p2)p2++;p2--; for(;p1 } }; void main() { char *s=\"ababcedbaba\"; String test(s); test.huiwen(); test.show(); } 试题四 一、程序设计基本题 建立一个类MOVE,实现将数组中大写字母元素放在小写字母元素的左边。 具体要求如下: (1)私有数据成员 ● char*array:一维字符数组。 ● int n:数据中元素的个数。 (2)公有成员函数 ● MOVE(char b[ ],int m) :构造函数,初始化成员数据。 ● void change( ):进行排序换位。 ● void print( ):输出一维数组。 ● ~MOVE( ):析构函数。 (3)在主程序中用数据“fdsUFfsTjfsKFEkWC”对该类进行测试。 二、系统设计 1、概要设计 为array开辟一个动态数组空间,通过类MOVE的成员函数change( )来实现将数组中的大写字母元素放在小写字母元素的左边的功能。程序结束前释放为array分配的动态空间。 2、详细设计 类的定义如下: class MOVE{ char *array; int n; public: MOVE(char ,int ); void change( ); void print( ); ~MOVE( ); }; 三、系统测试 在主函数中初始化类MOVE的对象,并调用其成员函数print()输出测试 结果。主函数定义如下: void main( ) { char*arr=\"fdsUFfsTjfsKFEkWC\"; MOVE test(arr,17); test.change( ); test.print( ); } 用以测试的数据为: FdsUFfsTjfsKFEkWC 预期输出结果为: UFTKFEWCfdsfsjfsk 四、实践小结 这道题和之前的一道题有点类似, 六、源程序清单 #include char*array; int n; public: MOVE(char b[],int m) { n=m; array=new char[n]; for(int i=0;i void print() { for(int i=0;i void main() { char*arr=\"fdsUFfsTjfsKFEkWC\"; MOVE test(arr,17); test.change(); test.print(); } 试题五 一、程序设计基本题 定义一个方阵类Array,实现对方阵进行顺时针90度旋转。如图所示: 1 2 3 4 13 9 5 1 5 6 7 8 14 10 6 2 9 10 11 12 15 11 7 3 13 14 15 16 16 12 8 4 具体要求如下: (1)私有成员函数。 int a[4][4]:用于存放方阵。 (2)公有成员函数。 Array(int a1[][4],int n):构造函数,用给定的参数a1初始化数据 成员a。 void xuanzhuan():实现对方阵a进行顺时针90度的旋转。 int fun( ):求公式的累加和。 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,完成对该类的测试。在主程序中定义对象s,对该类进行测试。 二、系统设计 1、概要设计 旋 通过类的成员函数xuanzhuan( )来实现对方阵a进行顺时针90度的旋转, 转后再放入二维数组中。 2、详细设计 ①类的定义如下: class Array { int a[4][4]; public: Array(int a1[ ][4],int n){} void xuanzhuan( ){} void show( ){} }; ②类的主要成员函数的设计 void xuanzhuan( ) { int b[4][4]; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { b[i][j]=a[i][j]; } } for(int x=0;x<4;x++) { for(int y=0;y<4;y++) a[x][y]=b[3-y][x]; } } 三、系统测试 在主程序中定义数组int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。定义一个Array类对象test,用b初始化test,完成对该类的测试。在主程序中定义对象s,对该类进行测试 void main() { int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; Array test(b,4); test.xuanzhuan( ); test.show( ); } 用以测试的数组为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 预期的输出结果为: 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4 四、实践小结 这道题可以举一反三,通过这道题的运算可以方便以后旋转类的基本设计。 五、源程序清单void main() {