下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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.1MFC 程序界面设计 .95.1.2MFC 程序代码设计 .105.2 基于 MFC 的应用程序测试 .11结 论.14参考文献 .151. 需求分析1. 向量英文: Vector ,又叫矢量,顾名思义,有方向的量。但是在计算机里 vector
4、 又可以翻译为容器,或者说理解为容器,其实这不是一种很好的理解么,纯数学上的向量可以由 2 维 3 维推广到多维,实际上它不就是一个实数的容器,在推广到其他领域, 向量即一个若干相关因素的容器, 也就是说向量可以应用在很多领域中,可以轻松直观的描述事物的信息,也可以存放信息,例如,二维三维中可以描述点 (坐标),物体的位置, 描述颜色(RGB,红绿蓝,),在多维的话,可描述的范围就更广了,最简单的如描述一个人的性格,或者能力。2. 类是 C+中十分重要的概念。 它是实现面向对象程序设计的基础。 C+对 C 的改进。最重要的就是增加了“类”这样一种类型。类是所有面向对象的语言的共同特征。所有面向
5、对象的语言都提供了这种类型。 如果一种计算机语言中不包含类。它就不能称为面向对象的语言。2. 算法基本原理1. 初始化一个名叫 XiangL 的类。为了便于类中的成员更改及操作。将要用的两个向量数组设为 public 型。即 xN 和 yN 。另外由于 n 维向量的 n 值需要多次重复利用。可以把 n 设为全局变量。2. 析构函数为了实现向量动态存储释放。其实可以直接让其函数体内为空。3. 拷贝函数实现向量的拷贝构造。 为了方便实现。 用了一个选择语句让用户选择要拷贝的是 x 还是 y 向量。4. 重载赋值运算符 = 。实现两个向量之间的赋值。为了方便返回值。定义了一个 XLAdd类。其类里有
6、个公有成员数组。便于实现赋值后的输出。5. 编写成员函数求两个向量内积。利用for 循环实现对两个向量的内积求和。6. 编写成员函数求两个 向量 外积 。 由 于内积 =|a|*|b|*cosa 。 而 外积 =|a|*|b|*sina 。而上面已经求了内积。根据上面的关系可推导出外积。7. 编写成员函数求两个向量的和。利用 for 循环实现。8. 编写成员函数求两个向量的差。利用 for 循环实现。9. 编写成员函数判断两个向量之间的线性相关性。 为了简化判断。 选择向量的前几项进行判断。 另外如果内积为零的话。 直接表示为两个向量是垂直的关系。3. 类设计1. 对于基类 XiangL 来讲
7、。为了方便实现操作。我们只是设了公有成员。有公有成员数据 xN 、yN 用于存放向量。其余则为公有函数。 XingL() 为构造函数。 XLCopy(int a,int b,int d)为拷贝函数。 XLAdd operator =(int a)为运算符” =”的重载。 XLNeiJi(int a,int b,int d)为求两个向量的内积的函数。 XLWaiJi(int a,int b,int c,int d)为求两个向量的外积的函数。XLPlus(inta,intb,intd) 为求两个向量的和的函数。XLRedu(int a,intb,intd) 为求两个向量的差的函数。XLPanDua
8、n(int a,intb,intc);为判断两个向量的线性关系的函数。XiangL() 析构函数。2. 至于外加的类 XLAdd。了额方便进行对于” =”重载后能有很好的一个返回值而加的。其含有一个公有成员数据 dN 。用于存放一个向量。便于其的输出与处理。4. 基于控制台的应用程序整个程序分为三个大部分。第一个部分即为对类 XiangL 的定义。第二个部分则是对类 XiangL 中的各个成员函数进行定义。第三个部分即为主函数,主函数中用了 switch 语句让用户选择要执行的函数。4.1类的初始定义#include#includeusing namespace std;#define N 1
9、00int n;class XLAdd/备用的向量类。public:int dN;class XiangL/public:int xN,yN;XiangL();/void XLCopy(int a,int b,int d);/XLAdd operator =(int a);/int XLNeiJi(int a,int b,int d);/floatXLWaiJi(inta,intb,intvoid XLPlus(int a,int b,int d);/void XLRedu(int a,int b,int d);/void XLPanDuan(int a,int b,int c); /c,in
10、t类 XiangL 的声明。构造函数。拷贝函数。运算符” =”的重载。求两个向量的内积。d); /求两个向量的外积。求两个向量的和。求两个向量的差。判断两个向量的线性关系。XiangL();/析构函数。s;4.2 类的实现XiangL :XiangL()XiangL :XiangL()d)voidXiangL:XLCopy(inta,int/拷贝函数。int i; char c;int zN;b,intcout 选择要拷贝的向量。选x 或 y。c;switch(c)case x: for(i=0;id;i+) zi=ai; break;case y: for(i=0;id;i+) zi=bi;
11、 break;default :break;XLaddPrint(z,d);XLAdd XiangL :operator =(int a)/重载 =。int i;XLAdd b;for(i=0;in;i+)b.di=ai;return b;d)intXiangL/:XLNeiJi(int求内积。a,intb,intint i,c;c=0;for(i=0;id;i+)c+=(ai*bi);return c;d)floatXiangL/:XLWaiJi(int求外积。a,intb,intc,intint i,sx,sy;sx=0; sy=0;double s1,s2,z,y;for(i=0;id;
12、i+)sx+=(ai*ai);sy+=(bi*bi);s1=sqrt(float)sx); s2=sqrt(float)sy);z=(float)acos(c/(s1*s2);y=(float)sin(z)*(s1*s2);return y;VoidXiangL:XLPlus(inta,intb,intd)/int i; int yN;for(i=0;id;i+)yi=ai+bi;求和。XLaddPrint(y,d);VoidXiangL:XLRedu(inta,intb,intd)/求差。int i; int yN;for(i=0;in;i+)yi=ai-bi;XLaddPrint(y,d)
13、;VoidXiangL:XLPanDuan(inta,intb,intc)/判断线性关系。if(c=0) cout垂直。 endl;else 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)
14、;4.3 主函数的设计#include#includeusing namespace std;#define N 100int n;void 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 向量 其向量
15、有 n 个值。 endl;for(i=0;ibi; IfContinue();break;case 2: s.XLCopy(a,b,n); IfContinue();break;case 3: z=a; XLaddPrint(a,n);IfContinue();break;case4: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;c
16、ase 7: s.XLRedu(a,b,n); IfContinue();break;case 8: s.XLPanDuan(a,b,i); IfContinue();break;default: break;4.4 基于控制台的应用程序测试程序运行结果如图13 所示。图 1图 2图 35.1 基于 MFC的应用程序设计5.1.1 MFC 程序界面设计首先在 VC中建立 MFCAppWizard( exe)工程,名称为向量,并在向导的 Step1 中选择 Dialog based ,即建立基于对话框的应用程序,如下图 45 所示。图 4 建立 MFC AppWizard( exe)工程图 5
17、建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图6 所示。图 6 所示的界面中包含了个StaticText控件,个Button控件,和14 个 EditBox 控件,控件的基本信息列表如下表1 所示。控件类别表控件 ID1控件基本信息控件Caption说明Static TextIDC_STATIC向量x :向量y :IDC_BUTTON_Plus计算向量相加ButtonIDC_BUTTON_Redu计算向量相减IDC_BUTTON_NeiJiIDC_BUTTON_WaiJi计算两个向量的内积计算两个向量的外积Edit BoxIDC_EDIT_A00IDC_EDI
18、T_A11IDC_EDIT_b0用于存放向量用于存放内积IDC_EDIT_c0用于存放外积5.1.2 MFC程序代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为14 个 EditBox 控件建立 Member Variables ,按 Ctrl+w 键进入 MFC ClassWizard 界面,选择 Member Variables 选项卡,可显示成员变量设置界面。通过该界面设置与14 个 Edit Box 控件对应的成员变量,具体如表 2 所示。表 2 控件基本信息控件 ID成员变量类型成员变量名称IDC_EDIT_A01IDC_EDIT_A3intx_1 x_3IDC_EDI
19、T_A04IDC_EDIT_A6inty_1y_3IDC_EDIT_A07IDC_EDIT_A9inth_1 h_3IDC_EDIT_A10IDC_EDIT_A12intc_1 c_3IDC_EDIT_b0inti_NJIDC_EDIT_c0floatf_WJ下面是编写代码的重要阶段, 可以借鉴在设计基于 DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。1. 编写求和的消息处理函数,实现向量求和,具体代码如下void CMyDlg:OnAddPlus()/ TODO: Add your control notification handler code here
20、 UpdateData(true);h_1 = x_1+y_1; h_2 = x_2+y_2; h_3 = x_3+y_3; UpdateData(false);2. 编写求差的消息处理函数,实现向量求差,具体代码如下void CMyDlg:OnReduceXL()/ TODO: Add your control notification handler code here UpdateData(true);c_1 = x_1-y_1; c_2 = x_2-y_2; c_3 = x_3-y_3; UpdateData(false);3. 编写求内积的消息处理函数,实现求两个向量的内积,具体代码
21、如下void CMyDlg:OnNeiJiXL()/ TODO: Add your control notification handler code here UpdateData(true);i_NJ = (x_1*y_1) + (x_2*y_2) + (x_3*y_3); UpdateData(false);4. 编写求外积的消息处理函数,实现求两个向量的外积,具体代码如下void CMyDlg:OnWaiJiXL()/ TODO: Add your control notification handler code here UpdateData(true);int sx,sy; sx
22、=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);5.1.3基于 MFC的应用程序测试运行程序后,首先出现的界面如图8 所示。图 8 程序初始运行界面进行输入数据后,再单击求和按钮,实现求差并将结果显示出来,如图9所示。图 9 求和后的界面单击求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- HY/T 0459-2024海岛生态脆弱性评价技术指南
- 胃癌化疗病人的护理策略
- 四川省南充市阆中学市2025-2026学年初三质量检测试题(一)数学试题含解析
- 山东省临沂市郯城县重点名校2026年初三月考卷(六)物理试题含解析
- 福建省泉州实验中学2026年中考一模数学试题分类汇编:集合与常用逻辑用语含解析
- 安徽省合肥市高新区2026年初三3月模拟考试数学试题试卷含解析
- 云南省元马中学重点中学2026年初三3月模拟检测试题数学试题含解析
- 骨折患者心理护理与沟通技巧
- 山东省德州市夏津县达标名校2026年初三3月网络自测物理试题含解析
- 脑血管疾病患者的日常生活活动能力训练技巧
- 2026年江苏经贸职业技术学院单招综合素质考试题库附答案详解
- 2026河北衡水恒通热力有限责任公司公开招聘工作人员28名笔试备考试题及答案解析
- 2026春统编版(新教材)小学道德与法治一年级下册(全册)各单元知识点复习课件
- 吉水县2026年面向社会公开招聘农村(社区)“多员合一岗”工作人员【146人】笔试备考试题及答案解析
- 《工程勘察设计收费标准》(2002年修订本)-完整版-1
- 电子元器件选型规范
- 多彩贵州,魅力贵州
- 厦门医学院辅导员考试真题2022
- 有限公司450m3高炉项目初步设计安全专篇
- 热学李椿 电子
- 教学能力比赛决赛 《英语》教案
评论
0/150
提交评论