1、C+程序设计实践报告课程实践报告设计题目 : 程序设计 (VC+) 实践 设计时间 2013-1- 至 2013-1-学院 (系 ): 计算机科学与工程学院2013年1月一 实践任务选择题目,创新性题目可只选择 1 题,仅选提高题应不少于 3 题,仅选基础题应不少于6 题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定) 。对于提高题、创 新题及游戏题可组成团队开发,但应制定详细的项目分工说明。二实验步骤及记录(题目,源程序代码及运行结果)1. 与学号对应的题(必做题) :基础题 12题目:建立一个 STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符
2、串“ abcde” 交叉插入字符串“ ABCDEF”G“aAbBcCdDeEFG”或“ AaBbCcDdEeFG”。 具体要求如下:(1)私有数据成员char str160 :存放被插入的字符串。 char str240 :存放待插入的字符串。 char str3100 :存放插入后的字符串。(2)公有成员函数的结果为STRING (char *s1, char *s2 ) :构造函数,用 s1 和 s2 初始化 str1 和 str2 。void process() :将 str2 中的字符串插入到 str1 中,存放到 str3 中。void print() :输出插入后的字符串。(3)在
3、主程序中定义 STRING 类的对象 test 对该类进行测试。 源程序代码:#include#include class STRINGchar str160; char str240; char str3100;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-) str1k+1=str1k;*p1=*p2; p1=p1+2;p2+;v
4、oid print()strcpy(str3,str1); coutstr3endl;void main()char s160=ABCDEFG;char s240=abcde;cout 原字符串: s1 s2endl; cout 交叉插入后的字符串: ;STRING test(s1,s2); ();();运行结果:2-6 为选做题,其中 2, 3,4 为基础题; 5, 6 为提高题。2. 基础题 4题目:建立一个类 MOV,E 将数组中最大元素的值与最小元素的值互换。 具体要求如下:(1)私有数据成员int *array :一维整型数组。int n :数组中元素的个数。(2)公有成员函数MOV
5、E(int b,int m) :构造函数,初始化成员数据。void exchange() :输出平均值,并将数组中的元素按要求重新放置。void print() :输出一维数组。MOVE():析构函数。(3)在主程序中用数据 21,65,43,87,12,84,44,97,32,55 对该类进行测试。 源程序代码:#include class MOVEint *array; int n;public:MOVE(int b,int m) n=m;array=new intm;for(int i=0;in;i+) arrayi=bi;void exchange()int b10;for(int k
6、=0;kn;k+) bk=arrayk;for(int i=0;in;i+)for(int j=i+1;j=bi)int temp=bi; bi=bj; bj=temp;int max=b0,min=bn-1; for(int p=0;pn;p+)if(arrayp=max)arrayp=min;else if(arrayp=min)arrayp=max;void print()for(int i=0;in;i+) coutarrayit;coutendl;MOVE()delete narray;void main()int a10=21,65,43,87,12,84,44,97,32,55;
7、cout 原数组: endl; for(int i=0;i10;i+)coutait; coutendl;cout 交换最大值和最小值后的数组: endl;MOVE a1(a,10);();();运行结果:3. 基础题 16题目:定义一个方阵类 CMatrix ,并根据给定算法实现方阵的线性变换。方阵的变换形式 为:F=W*ff 为原始矩阵, f 为原始矩阵的转置, w 为变换矩阵,这里设定为1001011001101001具体要求如下:(1)私有数据成员int (*a)4 : a 指向方阵数组。 int w44 : w 为变换矩阵。 int m : m 表示方阵的行和列数。(2)公有成员函数
8、CMatrix (int a4,int m) :用给定的参数 a 和 m 初始化数据成员 a 和m; 对变换矩阵 w 进行初始化,要求必须用循环实现。void Transform () :根据上述变换算法,求出变换后的数组形式,存放在 原始数组内。void show( ) :在屏幕上显示数组元素。l CMatrix () :释放动态分配的空间。(3)在主程序中定义数组 int arr4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 作为原始数组。定义一个 CMatrix 类对象 test ,用 arr 初始化 test ,完成对该类的测试。 源程序代码:#inc
9、lude class CMatrixint (*a)4;int w44; int m;public:CMatrix(int a4,int m) this-m=m;this-a=new intthis-m4; for(int i=0;im;i+)for(int j=0;jm;j+) this-aij=aij;for(i=0;i4;i+)for( int j=0;j4;j+) if(i+j=3|i=j)wij=1; else wij=0;void Transform() int b44;for(int i=0;im;i+) for(int j=0;jm;j+)bij=aji;for(int p=0
10、;p4;p+) for(int q=0;q4;q+)apq=wp0*b0q+wp1*b1q+wp2*b2q+wp3*b3q;void show()for(int i=0;i4;i+) for(int j=0;j4;j+)coutaijt; coutendl;CMatrix()delete ma;void main()int arr4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;cout 原始方阵: endl; for(int i=0;i4;i+)for(int j=0;j4;j+) coutarrijt;coutendl;cout 变换后的方阵: endl;
11、CMatrix test(arr,4);();();运行结果4. 基础题 17题目:17定义一个类 SIN,求 sin( x) = x /1- x/ 3!+ x/ 5!- x/ 7!+.+ (-1) x/(2 n -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的值。 l int fun( ) :用于
12、求 SIN(X) 的值。 l void show( ) :输出求得的结果。(3)在主程序中定义对象 test ,对该类进行测试 源程序代码:#include class SINprivate: int x; int n; public:SIN(int x, int n)this-x=x; this-n=n;int power(int q)int s=1; if(q1)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
13、(int i=0;i=n;i+)result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);return result;void show()coutsin(x) 的结果为 :fun()endl;void main()int x, n;cout 输入一个整数 xx;cout 输入一个整数 nn;SIN test(x,n);();运行结果:5提高题 9题目: 设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:(1)定义长方形类 Rectangle保护的数据成员 int l,w; 高题 10 题目:设计一个程序,查询 2000 年1 月 1 日(星期六)后
14、的某天是星期几,具体要求如 下:(1)定义函数 int leap(int year) :判断某年 year 是否为润年。能够被 400 整除,或 者能够被 4 整除但不能衩 100 整除的年份是润年。(2)定义函数 int f(int y,int m,int d,int *m1,int *m2) :判断输入的日期是否合法, 其中 y、 m、d 分别表示年、月、日, m1 表示非润年每月的天数, m2 表示润 年每月的天数。(3)定义类 date ,表示日期 私有数据成员int year,month,day; / 分别表示某年某月某日 公有成员函数:date(int y,int m,int d)
15、 :构造函数,用形参分别初始化数据成员;int get_year() :访问私有成员 year ; int get_month() :访问私有成员 month; int get_day() :访问私有成员 day; void show() :以指定格式输出数据成员。(4)定义类 week,判断某天是星期几 私有数据成员date d1; / 日期类的对象,表示某日int m112;/ 存储非润年每月的天数 31,28,31,30,31,30,31,31,30,31,30,31 int m212;/ 存储润年每月的天数 31,29,31,30,31,30,31,31,30,31,30,31int
16、w;/ 表示用 0 表示星期天, 1 表示星期一,以此类推 6 表示星期六 公有成员函数week(int y,int m,int d,int *p1,int *p2) :构造函数,用 y,m,d 初始化日期,用p1,p2 分别初始化 m1, m2;int days() :计算 d1 距 2000 年 1 月 1 日的时间间隔(天数);void fun() :根据 days() 的计算结果判断 d1 是星期几(求以 06 表示 w 的 值);void print() :输出判断结果。(5)在主函数中对定义的类进行测试。从键盘输入一个日期,并检查输入数据的 合法性,然后用输入的数据和表示每月天数的
17、数组初始化 week 类的对象 w, 调用相关成员函数,输出判断结果。程序运行结果如下: 请输入要查询的日期(年月日): 2009 9 15 2009/9/15 ,是星期二。源程序代码:#include int leap(int year)if(year%400=0 | year%100!=0 & year%4=0)return 1; else return 0;int f(int y,int m,int d,int *m1,int *m2)if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)&d31)return 0;else if(m=4|m=6|m=9|m=11)&d30)
18、return 0;else return 1; while(leap(y)if(m=2&(d=28|d=30)return 0;else return 1; while(!(leap(y)if(m=2&(d=29|d=30)return 0;else return 1;class dateint year,month,day; public:date(int y,int m,int d) year=y; month=m; day=d;int get_year()return year;int get_month()return month; int get_day()return day;vo
19、id show()coutyear/month/day,;class weekdate d1; int m112; int m212;int w; public:week(int y,int m,int d,int *p1,int *p2):d1(y,m,d) for(int i=0;i12;i+)m1i=p1i;for(int j=0;j12;j+) m2i=p2i;w=0;int days()int i,j, result = 0; for(j=2000;j();j+)result+=(leap(j)+365); for(i=1;i();i+)if(i=1|i=3|i=5|i=7|i=8|
20、i=10|i=12)result+=31; else if(i=4|i=6|i=9|i=11)result+=30;else if(i=2)result+=(28+leap(j);result=result+()-1;return result;void fun()switch(days()%7) case 0:w=6;break;case 1:w=0;break; case 2:w=1;break; case 3:w=2;break; case 4:w=3;break; case 5:w=4;break; case 6:w=5;break;void print()switch(w)case
21、6:coutcase 0:cout是星期六。 是星期天。;break;break;case 1:coutcase 2:cout是星期一。 是星期二。;break;break;case 3:cout是星期三。;break;case 4:cout是星期四。;break;case 5:cout 是星期五。 ;break;void main()int m112=31,28,31,30,31,30,31,31,30,31,30,31;int m212=31,29,31,30,31,30,31,31,30,31,30,31;coutabc; coutendl; f(a,b,c,m1,m2);week w(
22、a,b,c,m1,m2);date M(a,b,c); ();();();运行结果:三实践小结1. 通过选择不同类型,不同难度层次的题目,有效地复习了一学期以来 C+的学习内容。2. 实践过程中通过个人思考及小组合作,对细节之处和难点进行了有效的分析,极大地提 高了学习效率。3. 通过对题目的分析和理解,我发现自己在字符串处理,指针等方面基础较好,而在虚函 数,友元函数等较琐碎的知识掌握得不太透彻,这是寒假期间我在准备等级考试所要留 心的地方。4. 这次的课程实践在一定程度上是为即将到来的计算机二级考试打下良好的基础。5. 在最后一次的成果展示上,我发现自己的程序缺乏创新,追求实用性,却忽略了其潜在 价值。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1