版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封 皮(按学校要求手工填写) 成 绩 评 定 表学生姓名邵泽宇班级学号1203060107专 业通信工程课程设计题目向量类的设计与实现评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程专 业通信工程学生姓名邵泽宇班级学号1203060107课程设计题目向量类的设计与实现实践教学要求与任务1.构造函数实现n维向量初始化构造。这里n可变。2.析构函数实现向量动态存储释放。3.拷贝函数实现向量的拷贝构造。4.重载赋值运算符=。实现两个向量之间的赋值。5.编写成员函数求两个向量内积。6.编写成员函数求两个向量外积。7.编写成员函数求两个向量的和。8.编写成员函数求两个向量的差。
2、9.编写成员函数判断两个向量之间的线性相关性。0.编写一个主函数测试多项式类的上述功能。工作计划与进度安排第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日摘 要很多自然科学和工程技术中的问题的解决最终都归结到向量问题的处理,向量在解物理中的许多问题例如物理中力、速度、加速度、位移都是利用向量解决合力、合速度之类的问题。本文采用C+语言实现了对向量的基本操作,采用Visual C+ 6.0的控制台工程
3、和MFC工程分别实现了对向量的处理。关键词:队列;类模板;控制台工程;MFC工程目 录1 需求分析12 算法基本原理13 类设计14 基于控制台的应用程序24.1 类的接口设计24.2 类的实现34.3 主函数设计54.4 基于控制台的应用程序测试65 基于MFC的应用程序95.1 基于MFC的应用程序设计95.1.1 MFC程序界面设计95.1.2 MFC程序代码设计105.2基于MFC的应用程序测试11结 论14参考文献151. 需求分析1.向量英文:Vector,又叫矢量,顾名思义,有方向的量。但是在计算机里vector又可以翻译为容器,或者说理解为容器,其实这不是一种很好的理解么,纯数
4、学上的向量可以由2维3维推广到多维,实际上它不就是一个实数的容器,在推广到其他领域,向量即一个若干相关因素的容器,也就是说向量可以应用在很多领域中,可以轻松直观的描述事物的信息,也可以存放信息,例如,二维三维中可以描述点(坐标),物体的位置,描述颜色(RGB,红绿蓝,),在多维的话,可描述的范围就更广了,最简单的如描述一个人的性格,或者能力。 2.类是C+中十分重要的概念。它是实现面向对象程序设计的基础。C+对C的改进。最重要的就是增加了“类”这样一种类型。类是所有面向对象的语言的共同特征。所有面向对象的语言都提供了这种类型。如果一种计算机语言中不包含类。它就不能称为面向对象的语言。2. 算法
5、基本原理1.初始化一个名叫XiangL的类。为了便于类中的成员更改及操作。将要用的两个向量数组设为public型。即xN和yN。另外由于n维向量的n值需要多次重复利用。可以把n设为全局变量。2.析构函数为了实现向量动态存储释放。其实可以直接让其函数体内为空。3.拷贝函数实现向量的拷贝构造。为了方便实现。用了一个选择语句让用户选择要拷贝的是x还是y向量。4.重载赋值运算符=。实现两个向量之间的赋值。为了方便返回值。定义了一个XLAdd类。其类里有个公有成员数组。便于实现赋值后的输出。5.编写成员函数求两个向量内积。利用for循环实现对两个向量的内积求和。6.编写成员函数求两个向量外积。由于内积=
6、|a|*|b|*cosa。而外积=|a|*|b|*sina。而上面已经求了内积。根据上面的关系可推导出外积。7.编写成员函数求两个向量的和。利用for循环实现。8.编写成员函数求两个向量的差。利用for循环实现。9.编写成员函数判断两个向量之间的线性相关性。为了简化判断。选择向量的前几项进行判断。另外如果内积为零的话。直接表示为两个向量是垂直的关系。3. 类设计 1.对于基类XiangL来讲。为了方便实现操作。我们只是设了公有成员。有公有成员数据 xN、yN用于存放向量。其余则为公有函数。XingL()为构造函数。XLCopy(int a,int b,int d)为拷贝函数。XLAdd ope
7、rator =(int a)为运算符”=”的重载。XLNeiJi(int a,int b,int d)为求两个向量的内积的函数。XLWaiJi(int a,int b,int c,int d)为求两个向量的外积的函数。XLPlus(int a,int b,int d)为求两个向量的和的函数。XLRedu(int a,int b,int d)为求两个向量的差的函数。XLPanDuan(int a,int b,int c); 为判断两个向量的线性关系的函数。XiangL()析构函数。 2.至于外加的类XLAdd。了额方便进行对于”=”重载后能有很好的一个返回值而加的。其含有一个公有成员数据dN。用
8、于存放一个向量。便于其的输出与处理。4.基于控制台的应用程序整个程序分为三个大部分。第一个部分即为对类XiangL的定义。第二个部分则是对类XiangL中的各个成员函数进行定义。第三个部分即为主函数,主函数中用了switch语句让用户选择要执行的函数。4.1 类的初始定义#include#includeusing namespace std;#define N 100int n;class XLAdd /备用的向量类。public: int dN;class XiangL /类XiangL的声明。public: int xN,yN; XiangL(); /构造函数。void XLCopy(in
9、t a,int b,int d); /拷贝函数。XLAdd operator =(int a); /运算符”=”的重载。int XLNeiJi(int a,int b,int d); /求两个向量的内积。float XLWaiJi(int a,int b,int c,int d); /求两个向量的外积。void XLPlus(int a,int b,int d); /求两个向量的和。void XLRedu(int a,int b,int d); /求两个向量的差。 void XLPanDuan(int a,int b,int c); /判断两个向量的线性关系。XiangL(); /析构函数。s
10、;4.2 类的实现XiangL :XiangL()XiangL :XiangL()void XiangL :XLCopy(int a,int b,int d) /拷贝函数。int i; char c;int zN;cout选择要拷贝的向量。选x或y。c;switch(c)case x: for(i=0;id;i+) zi=ai; break;case y: for(i=0;id;i+) zi=bi; break;default :break;XLaddPrint(z,d);XLAdd XiangL :operator =(int a) /重载=。int i;XLAdd b;for(i=0;in
11、;i+)b.di=ai;return b;int XiangL :XLNeiJi(int a,int b,int d) /求内积。int i,c;c=0;for(i=0;id;i+)c+=(ai*bi);return c;float XiangL :XLWaiJi(int a,int b,int c,int d) /求外积。int i,sx,sy;sx=0; sy=0;double s1,s2,z,y;for(i=0;id;i+)sx+=(ai*ai);sy+=(bi*bi);s1=sqrt(float)sx); s2=sqrt(float)sy); z=(float)acos(c/(s1*s
12、2);y=(float)sin(z)*(s1*s2);return y;Void XiangL:XLPlus(int a,int b,int d) /求和。int i; int yN;for(i=0;id;i+)yi=ai+bi;XLaddPrint(y,d);Void XiangL :XLRedu(int a,int b,int d) /求差。int i; int yN;for(i=0;in;i+)yi=ai-bi;XLaddPrint(y,d);Void XiangL :XLPanDuan(int a,int b,int c) /判断线性关系。if(c=0) cout垂直。endl;els
13、e if(a0/a0)=(b1/b1) cout平行或在一条线。endl;else cout无线性关系。endl;void XLaddPrint(int r,int b) /输出向量。int i;cout向量为。(;for(i=0;ib;i+)coutri,;cout)endl;int IfContinue() /判断是否继续执行函数的函数。char i;cout继续执行函数请输入Y/y:i;if(i=Y|i=y) return 0;else exit(1);4.3 主函数的设计#include#includeusing namespace std;#define N 100int n;voi
14、d main()int i,c,n;XiangL z;int aN,bN;while(1) cout1 初始化。 2 进行拷贝。 3 重载=。 ; cout4 求内积。5 求外积。6 求和。7 求差。8 表示线性相关性。c; i=s.XLNeiJi(a,b,n); switch(c) case 1:cout请输入n维向量的n值:n;cout请输入x向量其向量有n个值。endl; /输入值。 for(i=0;iai; cout请输入y向量 其向量有n个值。endl; for(i=0;ibi; IfContinue(); break; case 2: s.XLCopy(a,b,n); IfCont
15、inue();break; case 3: z=a; XLaddPrint(a,n);IfContinue();break; case 4: cout内积为。s.XLNeiJi(a,b,n)endl; IfContinue();break; case 5: cout外积为。s.XLWaiJi(a,b,i,n)endl; IfContinue();break; case 6: s.XLPlus(a,b,n); IfContinue();break; case 7: s.XLRedu(a,b,n); IfContinue();break; case 8: s.XLPanDuan(a,b,i); I
16、fContinue();break; default: break; 4.4 基于控制台的应用程序测试程序运行结果如图13所示。图1图2图35.1基于MFC的应用程序设计5.1.1 MFC程序界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为向量,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图45所示。图4 建立MFC AppWizard(exe)工程图5 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图6所示。图6所示的界面中包含了个Static Text控件,个Button控件,和14个Edit
17、Box控件,控件的基本信息列表如下表1所示。表1 控件基本信息控件类别控件ID控件Caption说明Static TextIDC_STATIC向量x:向量y:ButtonIDC_BUTTON_Plus计算向量相加IDC_BUTTON_Redu计算向量相减IDC_BUTTON_NeiJi计算两个向量的内积IDC_BUTTON_WaiJi计算两个向量的外积Edit BoxIDC_EDIT_A00 IDC_EDIT_A11用于存放向量IDC_EDIT_b0用于存放内积IDC_EDIT_c0用于存放外积 MFC程序代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为14个Edit Box控件
18、建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面。通过该界面设置与14个Edit Box控件对应的成员变量,具体如表2所示。表2 控件基本信息控件ID成员变量类型成员变量名称IDC_EDIT_A01IDC_EDIT_A3intx_1 x_3IDC_EDIT_A04IDC_EDIT_A6inty_1y_3IDC_EDIT_A07IDC_EDIT_A9inth_1 h_3IDC_EDIT_A10IDC_EDIT_A12intc_1 c_3IDC_EDIT_b0inti_NJIDC_EDI
19、T_c0floatf_WJ下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。1. 编写求和的消息处理函数,实现向量求和,具体代码如下void CMyDlg:OnAddPlus() / TODO: Add your control notification handler code hereUpdateData(true);h_1 = x_1+y_1;h_2 = x_2+y_2;h_3 = x_3+y_3;UpdateData(false);2. 编写求差的消息处理函数,实现向量求差,具体代码如下void CMyDlg:O
20、nReduceXL() / TODO: Add your control notification handler code hereUpdateData(true);c_1 = x_1-y_1;c_2 = x_2-y_2;c_3 = x_3-y_3;UpdateData(false);3. 编写求内积的消息处理函数,实现求两个向量的内积,具体代码如下void CMyDlg:OnNeiJiXL() / TODO: Add your control notification handler code hereUpdateData(true);i_NJ = (x_1*y_1) + (x_2*y_2
21、) + (x_3*y_3);UpdateData(false);4. 编写求外积的消息处理函数,实现求两个向量的外积,具体代码如下void CMyDlg:OnWaiJiXL() / TODO: Add your control notification handler code hereUpdateData(true);int sx,sy;sx=0; sy=0;double s1,s2,z;sx=(x_1*x_1)+(x_2*x_2)+(x_3*x_3);sy=(y_1*y_1)+(y_2*y_2)+(y_3*y_3);s1=sqrt(float)sx); s2=sqrt(float)sy); z=(float)acos(i_NJ/(s1*s2);f_WJ=(float)sin(z)*(s1*s2);UpdateData(false); 基于MFC的应用程序测试运行程序后,首先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 崇明县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解参考
- 2026年清远市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)(含答案详解)
- 2026年武威市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(达标题)
- 2026年省属虚拟市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(典优)
- 2025年特种作业人员考试(煤矿采煤机操作作业)全真模拟试题及答案
- 2025年特种设备检验人员资格考试(起重机械检验师QZS)复习题及答案
- 体育与健康知识试卷及答案
- 2026年马鞍山市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(典优)
- 2025年云南省特种作人员取证培训以及特种设备作业人员取证培训考试制冷与空调设备安装修理作业复习题及答案
- 2025年全国特种设备检验检测人员专业培训考试压力容器检验师复习题库及答案
- T/NAHIEM 54-2022骨髓移植病房建设标准
- DB5132∕T 76-2022 熊猫级民宿的划分与评定
- 园林艺术原理知到课后答案智慧树章节测试答案2025年春湖南应用技术学院
- 盘形基础制动装置一制动盘和合成闸片一制动盘课件
- 《建筑垃圾清运处置方案》专题培训
- DBJ51T 140-2020 四川省不透水土层地下室排水卸压抗浮技术标准
- 上海市二级甲等综合医院评审标准(2024版)
- 乙烯H罐出料管线火灾事故经过
- 国际经济与贸易专业生涯发展展示
- (excel版)高中3500个英语单词表(带音标)乱序
- 中职班干部培训内容
评论
0/150
提交评论