版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程实践报告设计题目 : 程序设计 (VC+) 实践设计时间2013-1- 至 2013-1-学院 (系 ): 计算机科学与工程学院2013年1月一实践任务选择题目,创新性题目可只选择1 题,仅选提高题应不少于36 题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)题,仅选基础题应不少于。对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。二实验步骤及记录(题目,源程序代码及运行结果)1. 与学号对应的题(必做题) :基础题 12题目:建立一个 STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“ abcde” 交叉插入字符串“
2、 ABCDEFG” 的结果为“aAbBcCdDeEFG”或“ AaBbCcDdEeFG”。具体要求如下:(1)私有数据成员char str160:存放被插入的字符串。char str240:存放待插入的字符串。char str3100:存放插入后的字符串。(2)公有成员函数STRING (char *s1, char *s2 ):构造函数,用s1 和 s2 初始化 str1void process():将 str2中的字符串插入到str1中,存放到str3和 str2 中。void print():输出插入后的字符串。( 3)在主程序中定义 STRING 类的对象 test 对该类进行测试。源
3、程序代码:#include<iostream.h>#include<string.h>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+;void
4、print()strcpy(str3,str1);cout<<str3<<endl;void main()char s160="ABCDEFG"char s240="abcde"cout<<" 原字符串: "<<s1<<" "<<s2<<endl;cout<<" 交叉插入后的字符串:"STRING test(s1,s2);cess();test.print();运行结果:2-6 为选做
5、题,其中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&
6、lt;iostream.h>class MOVEint *array;int n;public:MOVE(int b,int m)n=m;array=new intm;for(int i=0;i<n;i+)arrayi=bi;void exchange()int b10;for(int k=0;k<n;k+)bk=arrayk;for(int i=0;i<n;i+)for(int j=i+1;j<n;j+)if(bj>=bi)int temp=bi;bi=bj;bj=temp;int max=b0,min=bn-1;for(int p=0;p<n;p+
7、)if(arrayp=max)arrayp=min;else if(arrayp=min)arrayp=max;void print()for(int i=0;i<n;i+)cout<<arrayi<<'t'cout<<endl;MOVE()delete narray;void main()int a10=21,65,43,87,12,84,44,97,32,55;cout<<" 原数组: "<<endl;for(int i=0;i<10;i+)cout<<ai<<
8、;'t'cout<<endl;cout<<" 交换最大值和最小值后的数组:"<<endl;MOVE a1(a,10);a1.exchange();a1.print();运行结果:3. 基础题 16题目:定义一个方阵类 CMatrix ,并根据给定算法实现方阵的线性变换。方阵的变换形式为:F=W*f Tf 为原始矩阵, f T 为原始矩阵的转置,w 为变换矩阵,这里设定为1 0 0 10 1 1 00 1 1 01 0 0 1具体要求如下:(1)私有数据成员int (*a)4 :a 指向方阵数组。int w44 : w 为变
9、换矩阵。int m : m 表示方阵的行和列数。(2)公有成员函数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 初始化 te
10、st,完成对该类的测试。源程序代码:#include<iostream.h>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;i<this->m;i+)for(int j=0;j<this->m;j+)this->aij=aij;for(i=0;i<4;i+)for( int j=0;j<4;j+)if(i+j=3|i=j)wij=1;else wij=
11、0;void Transform()int b44;for(int i=0;i<m;i+)for(int j=0;j<m;j+)bij=aji;for(int p=0;p<4;p+)for(int q=0;q<4;q+)apq=wp0*b0q+wp1*b1q+wp2*b2q+wp3*b3q;void show()for(int i=0;i<4;i+)for(int j=0;j<4;j+)cout<<aij<<'t'cout<<endl;CMatrix()delete ma;void main()int ar
12、r4=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<<arrij<<'t'cout<<endl;cout<<"变换后的方阵:"<<endl;CMatrix test(arr,4);test.Transform();test.show();运行结果4. 基础题 17题目:17定义一个类S
13、IN ,求sin(x) = x /1- x3 / 3!+ x5 / 5!- x7 / 7!+.+ (-1)n+1 x(2n-1) /(2n -1)!具体要求如下:(1)私有成员数据。int x :输入公式中 int n :输入公式中x 的值,求 n 的值。sin(x) 。(2)公有成员函数。SIN(int x, int n ) :构造函数,用于初始化x 和 nint power( int q) :求 q!的值。l int mi( int m,int n) :求 mn的值。l int fun( ) :用于求 SIN(X) 的值。l void show( ) :输出求得的结果。的值。( 3)在主程
14、序中定义对象 test,对该类进行测试源程序代码:#include<iostream.h>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(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
15、=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"<<
16、;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(): 输出长方形的长、宽和面积。( 2)定义长方形类 A 的公有派生类 Cuboid ,表示长方体
17、类私有的数据成员int h; / 表示长方体的高公有的构造函数:Cuboid(int x,int y,int z):初始化长方体的长、宽和高。公有函数void fun(): 求长方体的表面积;void show(): 输出长方体的长、宽、高和表面积。(3)在主函数中对定义的类进行测试,要求定义长方形对象长方体对象 b1(长、宽、高分别为2, 3,4),通过基类的指针的面积和长方体的表面积,输出数据成员,并体现运行的多态性。源程序代码:a1(长为 2,宽为 3),p 分别求长方形#include<iostream.h>class Rectangleprotected:int l,w;
18、int s;public:Rectangle(int x,int y)l=x;w=y;virtual void fun()s=l*w;virtual void show()cout<<" 长方形的长为:"<<l<<'t'<<"宽为: "<<w<<'t'<<"面积为: "<<s<<endl;class Cuboid:public Rectangleint h;public:Cuboid(int x,
19、int y,int z):Rectangle(x,y)h=z;void fun()s=2*(w*l+w*h+h*l);void show()cout<<"长方体的长为:"<<l<<'t'<<"宽为: "<<w<<'t'<<"高为: "<<h<<'t'<<"表面积为:"<<s<<endl;void main()Rectangle
20、 *p;Rectangle a1(2,3);p=&a1;p->fun();p->show();Cuboid b1(2,3,4);p=&b1;p->fun();p->show();运行结果:6. 提高题 10 题目:设计一个程序,查询 2000 年1 月 1 日(星期六)后的某天是星期几,具体要求如下:(1)定义函数 int leap(int year) :判断某年 year 是否为润年。能够被400 整除,或者能够被 4 整除但不能衩100 整除的年份是润年。(2)定义函数 int f(int y,int m,int d,int *m1,int *m2)
21、:判断输入的日期是否合法,其中 y、 m、 d 分别表示年、月、日,m1 表示非润年每月的天数,m2 表示润年每月的天数。(3)定义类 date,表示日期私有数据成员int year,month,day; / 分别表示某年某月某日公有成员函数:date(int y,int m,int d) :构造函数,用形参分别初始化数据成员; int get_year() :访问私有成员 year;int get_month() :访问私有成员month ;int get_day() :访问私有成员day;void show() :以指定格式输出数据成员。( 4)定义类 week,判断某天是星期几私有数据成
22、员date d1; /日期类的对象,表示某日int m112;/ 存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31int m212;/ 存储润年每月的天数31,29,31,30,31,30,31,31,30,31,30,31int 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 日的时间间隔(天数);
23、void fun() :根据 days()的计算结果判断 d1 是星期几(求以 06 表示 w 的值);void print() :输出判断结果。(5)在主函数中对定义的类进行测试。从键盘输入一个日期,并检查输入数据的合法性,然后用输入的数据和表示每月天数的数组初始化week 类的对象 w,调用相关成员函数,输出判断结果。程序运行结果如下:请输入要查询的日期(年月日):2009 9 152009/9/15,是星期二。源程序代码:#include <iostream.h>int leap(int year)if(year%400=0 | year%100!=0 &&
24、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)&&d>31)return 0; else if(m=4|m=6|m=9|m=11)&&d>30)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=
25、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;void show()cout<<year<<"/"<<month<<"/"<<day<<"
26、,"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;i<12;i+)m1i=p1i;for(int j=0;j<12;j+)m2i=p2i;w=0;int days()int i,j, result = 0;for(j=2000;j<d1.get_year();j+)result+=(leap(j)+365);for(i=1;i<d1.get_month();i+)if(i=1|i=3|i=5|i=7|i=8|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+d1.get_day()-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;b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年度2024纺织品批量生产与销售合同3篇
- 正规草牧场承包合同范文3篇
- 农家乐生态旅游区开发合同(2024版)
- 铝灰处理设备采购与安装合同(2024版)
- 销售人员合同
- 初中班会 感恩 知识课件
- 《档案库房照明设备》课件
- 2024年度高校校园餐饮服务承包合同2篇
- 财务状况报告范文
- 财务调研报告范文
- 采血后并发症及护理-课件
- 签订无固定期限劳动合同申请书
- 北京工商大学百事可乐市场营销分析
- 清华大学出版社机械制图习题集参考答案(课堂PPT)
- 清华大学机械原理课件-第8章-组合机构上课讲义
- 校园监控维护记录表
- 小学班级组织建设课件
- 劳动保障监察执法课件
- 小学文明礼仪教育中译六年级上册第九课民族礼仪 哈达
- 克拉2气田-爆炸事故案例解读课件
- 2020牛津译林版高中英语新教材选修第一册全册课文翻译及单词表
评论
0/150
提交评论