C程序设计实践报告文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)课程实践报告设计题目: 程序设计(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<>#include<>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);();();}运行结果: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<>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);();();}运行结果:3.基础题16题目:定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。
方阵的变换形式为:F=W*fTf 为原始矩阵,fT 为原始矩阵的转置,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)在主程序中定义数组intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。
定义一个CMatrix 类对象test,用arr 初始化test,完成对该类的测试。
源程序代码:#include<>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);();();}运行结果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):求mn的值。
l int fun( ):用于求SIN(X)的值。
l void show( ):输出求得的结果。
(3)在主程序中定义对象test,对该类进行测试源程序代码:#include<>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);();}运行结果:5.提高题 9题目:设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:(1)定义长方形类Rectangle保护的数据成员int l,w; 高题10题目:设计一个程序,查询2000 年1 月1 日(星期六)后的某天是星期几,具体要求如下:(1)定义函数int leap(int year):判断某年year 是否为润年。