当前位置:文档之家› C++程序设计实践报告

C++程序设计实践报告

课程实践报告设计题目: 程序设计(VC++)实践设计时间2013-1- 至2013-1-学院(系): 计算机科学与工程学院2013年1月一.实践任务选择题目,创新性题目可只选择1 题,仅选提高题应不少于3 题,仅选基础题应不少于6 题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)。

对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。

二.实验步骤及记录(题目,源程序代码及运行结果)1.与学号对应的题(必做题):基础题 12题目:建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。

例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。

具体要求如下:(1)私有数据成员char str1[60] :存放被插入的字符串。

char str2[40] :存放待插入的字符串。

char str3[100] :存放插入后的字符串。

(2)公有成员函数STRING (char *s1, char *s2 ):构造函数,用s1 和s2 初始化str1 和str2。

void process():将str2 中的字符串插入到str1 中,存放到str3 中。

void print():输出插入后的字符串。

(3)在主程序中定义STRING 类的对象test 对该类进行测试。

源程序代码:#include<iostream.h>#include<string.h>class STRING{char str1[60];char str2[40];char str3[100];public:STRING(char *s1,char *s2){strcpy(str1,s1);strcpy(str2,s2);}void process(){char *p1=str1,*p2=str2;for(int i=0;*p2;i=i+2){for(int k=strlen(str1);k>=i;k--){str1[k+1]=str1[k];}*p1=*p2;p1=p1+2;p2++;}}void print(){strcpy(str3,str1);cout<<str3<<endl;}};void main(){char s1[60]="ABCDEFG";char s2[40]="abcde";cout<<"原字符串:"<<s1<<" "<<s2<<endl;cout<<"交叉插入后的字符串:";STRING test(s1,s2);test.process();test.print();}运行结果:2-6为选做题,其中2,3,4为基础题;5,6为提高题。

2.基础题 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){n=m;array=new int[m];for(int i=0;i<n;i++)array[i]=b[i];}void exchange(){int b[10];for(int k=0;k<n;k++)b[k]=array[k];for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(b[j]>=b[i]){int temp=b[i];b[i]=b[j];b[j]=temp;}int max=b[0],min=b[n-1];for(int p=0;p<n;p++){if(array[p]==max)array[p]=min;else if(array[p]==min)array[p]=max;}}void print(){for(int i=0;i<n;i++)cout<<array[i]<<'\t';cout<<endl;}~MOVE(){delete [n]array;}};void main(){int a[10]={21,65,43,87,12,84,44,97,32,55};cout<<"原数组:"<<endl;for(int i=0;i<10;i++)cout<<a[i]<<'\t';cout<<endl;cout<<"交换最大值和最小值后的数组:"<<endl;MOVE a1(a,10);a1.exchange();a1.print();}运行结果:3.基础题16题目:定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。

方阵的变换形式为:F=W*f Tf 为原始矩阵,f T 为原始矩阵的转置,w 为变换矩阵,这里设定为10 0 10 1 1 00 1 1 010 0 1具体要求如下:(1)私有数据成员int (*a)[4]:a 指向方阵数组。

int w[4][4]:w 为变换矩阵。

int m:m 表示方阵的行和列数。

(2)公有成员函数CMatrix (int a[][4],int m) :用给定的参数a 和m 初始化数据成员a 和m;对变换矩阵w 进行初始化,要求必须用循环实现。

void Transform () :根据上述变换算法,求出变换后的数组形式,存放在原始数组内。

void show( ) :在屏幕上显示数组元素。

l~ CMatrix () :释放动态分配的空间。

(3)在主程序中定义数组int arr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。

定义一个CMatrix 类对象test,用arr 初始化test,完成对该类的测试。

源程序代码:#include<iostream.h>class CMatrix{int (*a)[4];int w[4][4];int m;public:CMatrix(int a[][4],int m){this->m=m;this->a=new int[this->m][4];for(int i=0;i<this->m;i++)for(int j=0;j<this->m;j++)this->a[i][j]=a[i][j];for(i=0;i<4;i++){for( int j=0;j<4;j++)if(i+j==3||i==j)w[i][j]=1;else w[i][j]=0;}}void Transform(){int b[4][4];for(int i=0;i<m;i++){for(int j=0;j<m;j++)b[i][j]=a[j][i];}for(int p=0;p<4;p++){for(int q=0;q<4;q++)a[p][q]=w[p][0]*b[0][q]+w[p][1]*b[1][q]+w[p][2]*b[2][q]+w[p][3]*b[3][q];}}void show(){for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<'\t';cout<<endl;}}~CMatrix(){delete [m]a;}};void main(){int arr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};cout<<"原始方阵:"<<endl;for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<arr[i][j]<<'\t';cout<<endl;}cout<<"变换后的方阵:"<<endl;CMatrix test(arr,4);test.Transform();test.show();}运行结果4.基础题 17题目:17.定义一个类SIN,求sin(x) = x /1- x3 / 3!+x5 / 5!-x7 / 7!+....+ (-1) n+1 x(2n-1) /(2n -1)! 具体要求如下:(1)私有成员数据。

int x:输入公式中x 的值,求sin(x)。

int n:输入公式中n 的值。

(2)公有成员函数。

SIN(int x, int n ):构造函数,用于初始化x 和n 的值。

int power( int q):求q!的值。

l int mi( int m,int n):求m n的值。

l int fun( ):用于求SIN(X)的值。

l void show( ):输出求得的结果。

(3)在主程序中定义对象test,对该类进行测试源程序代码:#include<iostream.h>class SIN{private: int x; int n;public:SIN(int x, int n){this->x=x;this->n=n;}int power(int q){int s=1;if(q<=1)return 1;while(q>1){s=s*q;q--;}return s;}int mi(int m, int n){int temp=1;for(int i=1;i<=n;i++){temp*=m;}return temp;}int fun(){int result=0;for(int i=0;i<=n;i++){result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);}return result;}void show(){cout<<"sin("<<x<<")的结果为:"<<fun()<<endl;}};void main(){int x, n;cout<<"输入一个整数 x"<<endl;cin>>x;cout<<"输入一个整数 n"<<endl;cin>>n;SIN test(x,n);test.show();}运行结果:5.提高题 9题目:设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:(1)定义长方形类Rectangle保护的数据成员int l,w; //表示长方形的长和宽int s; //表示长方形的面积公有的构造函数Rectangle(int x,int y):初始化长方形的长和宽;公有的虚函数virtual void fun():求长方形的面积;virtual void show():输出长方形的长、宽和面积。

相关主题