向量類的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
向量類的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
向量類的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
向量類的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、封皮(按學(xué)校要求手工填寫)成績(jī)?cè)u(píng)定表學(xué)生姓名邵澤宇班級(jí)學(xué)號(hào)1203060107專業(yè)通信工程課程設(shè)計(jì)題目向量類的設(shè)計(jì)與實(shí)現(xiàn)評(píng)組長(zhǎng)簽字:語(yǔ)成績(jī)?nèi)掌?0年月日課程設(shè)計(jì)任務(wù)書學(xué)院信息科學(xué)與工程專 業(yè)通信工程學(xué)生姓名邵澤宇班級(jí)學(xué)號(hào)1203060107課程設(shè)計(jì)題目向量類的設(shè)計(jì)與實(shí)現(xiàn)實(shí)踐教學(xué)要求與任務(wù)1. 構(gòu)造函數(shù)實(shí)現(xiàn) n 維向量初始化構(gòu)造。這里 n 可變。2. 析構(gòu)函數(shù)實(shí)現(xiàn)向量動(dòng)態(tài)存儲(chǔ)釋放。3. 拷貝函數(shù)實(shí)現(xiàn)向量的拷貝構(gòu)造。4. 重載賦值運(yùn)算符 '=' 。實(shí)現(xiàn)兩個(gè)向量之間的賦值。5. 編寫成員函數(shù)求兩個(gè)向量?jī)?nèi)積。6. 編寫成員函數(shù)求兩個(gè)向量外積。7. 編寫成員函數(shù)求兩個(gè)向量的和。8. 編寫

2、成員函數(shù)求兩個(gè)向量的差。9. 編寫成員函數(shù)判斷兩個(gè)向量之間的線性相關(guān)性。0. 編寫一個(gè)主函數(shù)測(cè)試多項(xiàng)式類的上述功能。工作計(jì)劃與進(jìn)度安排第 17 周:分析題目,查閱課題相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第 18 周:程序的設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第 19 周:程序測(cè)試與分析,撰寫課程設(shè)計(jì)報(bào)告,進(jìn)行答辯驗(yàn)收。指導(dǎo)教師:201年月日專業(yè)負(fù)責(zé)人:201年月日學(xué)院教學(xué)副院長(zhǎng):201年月日摘 要很多自然科學(xué)和工程技術(shù)中的問題的解決最終都?xì)w結(jié)到向量問題的處理,向量在解物理中的許多問題例如物理中力、速度、加速度、位移都是利用向量解決合力、合速度之類的問題。本文采用C+語(yǔ)言實(shí)現(xiàn)了對(duì)向量的基本操作,采用VisualC+6

3、.0 的控制臺(tái)工程和MFC工程分別實(shí)現(xiàn)了對(duì)向量的處理。關(guān)鍵詞:隊(duì)列;類模板;控制臺(tái)工程;MFC工程目錄1需求分析 .12算法基本原理 .13類設(shè)計(jì) .14基于控制臺(tái)的應(yīng)用程序 .24.1類的接口設(shè)計(jì) .24.2類的實(shí)現(xiàn) .34.3主函數(shù)設(shè)計(jì) .54.4基于控制臺(tái)的應(yīng)用程序測(cè)試 .65基于 MFC的應(yīng)用程序 .95.1基于 MFC的應(yīng)用程序設(shè)計(jì) .95.1.1 MFC 程序界面設(shè)計(jì) .95.1.2 MFC 程序代碼設(shè)計(jì) .105.2基于 MFC的應(yīng)用程序測(cè)試 .11結(jié) 論.14參考文獻(xiàn) .151. 需求分析1. 向量英文: Vector ,又叫矢量,顧名思義,有方向的量。但是在計(jì)算機(jī)里 vect

4、or 又可以翻譯為容器,或者說理解為容器,其實(shí)這不是一種很好的理解么,純數(shù)學(xué)上的向量可以由 2 維 3 維推廣到多維,實(shí)際上它不就是一個(gè)實(shí)數(shù)的容器,在推廣到其他領(lǐng)域, 向量即一個(gè)若干相關(guān)因素的容器, 也就是說向量可以應(yīng)用在很多領(lǐng)域中,可以輕松直觀的描述事物的信息,也可以存放信息,例如,二維三維中可以描述點(diǎn) (坐標(biāo)),物體的位置, 描述顏色(RGB,紅綠藍(lán),),在多維的話,可描述的范圍就更廣了,最簡(jiǎn)單的如描述一個(gè)人的性格,或者能力。2. 類是 C+中十分重要的概念。 它是實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。 C+對(duì) C 的改進(jìn)。最重要的就是增加了“類”這樣一種類型。類是所有面向?qū)ο蟮恼Z(yǔ)言的共同特征。所有

5、面向?qū)ο蟮恼Z(yǔ)言都提供了這種類型。 如果一種計(jì)算機(jī)語(yǔ)言中不包含類。它就不能稱為面向?qū)ο蟮恼Z(yǔ)言。2. 算法基本原理1. 初始化一個(gè)名叫 XiangL 的類。為了便于類中的成員更改及操作。將要用的兩個(gè)向量數(shù)組設(shè)為 public 型。即 xN 和 yN 。另外由于 n 維向量的 n 值需要多次重復(fù)利用。可以把 n 設(shè)為全局變量。2. 析構(gòu)函數(shù)為了實(shí)現(xiàn)向量動(dòng)態(tài)存儲(chǔ)釋放。其實(shí)可以直接讓其函數(shù)體內(nèi)為空。3. 拷貝函數(shù)實(shí)現(xiàn)向量的拷貝構(gòu)造。 為了方便實(shí)現(xiàn)。 用了一個(gè)選擇語(yǔ)句讓用戶選擇要拷貝的是 x 還是 y 向量。4. 重載賦值運(yùn)算符 '=' 。實(shí)現(xiàn)兩個(gè)向量之間的賦值。為了方便返回值。定義了一個(gè)

6、 XLAdd類。其類里有個(gè)公有成員數(shù)組。便于實(shí)現(xiàn)賦值后的輸出。5. 編寫成員函數(shù)求兩個(gè)向量?jī)?nèi)積。利用for 循環(huán)實(shí)現(xiàn)對(duì)兩個(gè)向量的內(nèi)積求和。6. 編寫成員函數(shù)求兩個(gè) 向量 外積 。 由 于內(nèi)積 =|a|*|b|*cosa。而 外積=|a|*|b|*sina。而上面已經(jīng)求了內(nèi)積。根據(jù)上面的關(guān)系可推導(dǎo)出外積。7. 編寫成員函數(shù)求兩個(gè)向量的和。利用 for 循環(huán)實(shí)現(xiàn)。8. 編寫成員函數(shù)求兩個(gè)向量的差。利用 for 循環(huán)實(shí)現(xiàn)。9. 編寫成員函數(shù)判斷兩個(gè)向量之間的線性相關(guān)性。 為了簡(jiǎn)化判斷。 選擇向量的前幾項(xiàng)進(jìn)行判斷。 另外如果內(nèi)積為零的話。 直接表示為兩個(gè)向量是垂直的關(guān)系。3. 類設(shè)計(jì)1. 對(duì)于基類 X

7、iangL 來(lái)講。為了方便實(shí)現(xiàn)操作。我們只是設(shè)了公有成員。有公有成員數(shù)據(jù) xN 、yN 用于存放向量。其余則為公有函數(shù)。XingL() 為構(gòu)造函數(shù)。 XLCopy(int a,int b,int d)為拷貝函數(shù)。 XLAdd operator =(int a)為運(yùn)算符” =”的重載。 XLNeiJi(int a,int b,int d)為求兩個(gè)向量的內(nèi)積的函數(shù)。 XLWaiJi(int a,int b,int c,int d)為求兩個(gè)向量的外積的函數(shù)。XLPlus(inta,intb,intd) 為求兩個(gè)向量的和的函數(shù)。XLRedu(int a,intb,intd) 為求兩個(gè)向量的差的函數(shù)。X

8、LPanDuan(int a,intb,intc);為判斷兩個(gè)向量的線性關(guān)系的函數(shù)。XiangL() 析構(gòu)函數(shù)。2. 至于外加的類 XLAdd。了額方便進(jìn)行對(duì)于” =”重載后能有很好的一個(gè)返回值而加的。其含有一個(gè)公有成員數(shù)據(jù) dN 。用于存放一個(gè)向量。便于其的輸出與處理。4. 基于控制臺(tái)的應(yīng)用程序整個(gè)程序分為三個(gè)大部分。第一個(gè)部分即為對(duì)類 XiangL 的定義。第二個(gè)部分則是對(duì)類 XiangL 中的各個(gè)成員函數(shù)進(jìn)行定義。第三個(gè)部分即為主函數(shù),主函數(shù)中用了 switch 語(yǔ)句讓用戶選擇要執(zhí)行的函數(shù)。4.1類的初始定義#include<iostream>#include<cmat

9、h>using namespace std;#define N 100int 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

10、 XLPanDuan(int a,int b,int c); /c,int類 XiangL 的聲明。構(gòu)造函數(shù)??截惡瘮?shù)。運(yùn)算符” =”的重載。求兩個(gè)向量的內(nèi)積。d); /求兩個(gè)向量的外積。求兩個(gè)向量的和。求兩個(gè)向量的差。判斷兩個(gè)向量的線性關(guān)系。XiangL();/析構(gòu)函數(shù)。d)s;4.2 類的實(shí)現(xiàn)XiangL :XiangL()XiangL :XiangL()voidXiangL:XLCopy(inta,int/拷貝函數(shù)。int i; char c;int zN;cout<<" 選擇要拷貝的向量。選x 或 y。"<<endl;cin>>c

11、;switch(c)b,intcase 'x': for(i=0;i<d;i+) zi=ai; break;case 'y': for(i=0;i<d;i+) zi=bi; break;default :break;XLaddPrint(z,d);XLAdd XiangL :operator =(int a)/重載 =。int i;XLAdd b;for(i=0;i<n;i+)b.di=ai;return b;d)intXiangL/:XLNeiJi(int求內(nèi)積。a,intb,intint i,c;c=0;for(i=0;i<d;i+)

12、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;i<d;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;i&l

13、t;d;i+)yi=ai+bi;求和。XLaddPrint(y,d);VoidXiangL:XLRedu(inta,intb,intd)/求差。int i; int yN;for(i=0;i<n;i+)yi=ai-bi;XLaddPrint(y,d);VoidXiangL:XLPanDuan(inta,intb,intc)/判斷線性關(guān)系。if(c=0) cout<<"垂直。 "<<endl;else if(a0/a0)=(b1/b1)cout<<"平行或在一條線。"<<endl;else cout&l

14、t;<"無(wú)線性關(guān)系。"<<endl;void XLaddPrint(int r,int b)/輸出向量。int i;cout<<" 向量為。 ("for(i=0;i<b;i+)cout<<ri<<","cout<<")"<<endl;int IfContinue()/判斷是否繼續(xù)執(zhí)行函數(shù)的函數(shù)。char i;cout<<" 繼續(xù)執(zhí)行函數(shù)請(qǐng)輸入Y/y:"<<endl;cin>>i

15、;if(i='Y'|i='y') return 0;else exit(1);4.3 主函數(shù)的設(shè)計(jì)#include<iostream>#include<cmath>using namespace std;#define N 100int n;void main()int i,c,n;XiangL z;int aN,bN;while(1)cout<<"1初始化。 2進(jìn)行拷貝。 3重載 =。 "cout<<"4求內(nèi)積。 5 求外積。 6 求和。 7 求差。 8 表示線性相關(guān)性。"

16、<<endl;cin>>c;i=s.XLNeiJi(a,b,n);switch(c)case 1:cout<<" 請(qǐng)輸入 n 維向量的 n 值:"<<endl; cin>>n;cout<<" 請(qǐng)輸入 x 向量其向量有 "<<n<<" 個(gè)值。"<<endl; /輸入值。for(i=0;i<n;i+) cin>>ai; cout<<" 請(qǐng)輸入 y 向量 其向量有 "<<n

17、<<" 個(gè)值。 "<<endl; for(i=0;i<n;i+) cin>>bi; IfContinue();break;case 2: s.XLCopy(a,b,n); IfContinue();break;case 3: z=a; XLaddPrint(a,n);IfContinue();break;case4:cout<<"內(nèi)積為。"<<s.XLNeiJi(a,b,n)<<endl;IfContinue();break;case5:cout<<"外

18、積 為 。 "<<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); IfContinue();break;default: break;4.4 基于控制臺(tái)的應(yīng)用程序測(cè)試程序運(yùn)行結(jié)果如圖13 所示。圖 1圖 2圖 35.1 基于 MFC的應(yīng)用程序設(shè)計(jì)程序界面設(shè)計(jì)首先在 VC中建立 MFCAppWi

19、zard( exe)工程,名稱為向量,并在向?qū)У?Step1 中選擇 Dialog based ,即建立基于對(duì)話框的應(yīng)用程序,如下圖 45 所示。圖 4 建立 MFC AppWizard( exe)工程圖 5 建立基于對(duì)話框的應(yīng)用程序?qū)?duì)話框資源中的默認(rèn)對(duì)話框利用工具箱改造成如下界面,如圖6 所示。圖 6 所示的界面中包含了個(gè)StaticText控件,個(gè)Button控件,和14 個(gè) EditBox 控件,控件的基本信息列表如下表1 所示??丶悇e控件表 ID1控件基本信息控件Caption說明Static TextIDC_STATIC向量x :向量 y :ButtonIDC_BUTTON_Pl

20、us計(jì)算向量相加IDC_BUTTON_Redu 計(jì)算向量相減IDC_BUTTON_NeiJiIDC_BUTTON_WaiJi計(jì)算兩個(gè)向量的內(nèi)積計(jì)算兩個(gè)向量的外積Edit BoxIDC_EDIT_A00用于存放向量IDC_EDIT_A11IDC_EDIT_b0用于存放內(nèi)積IDC_EDIT_c0用于存放外積程序代碼設(shè)計(jì)為了能夠?qū)?duì)話框界面上的控件能夠與代碼聯(lián)系起來(lái),需要為14 個(gè) EditBox 控件建立 Member Variables ,按 Ctrl+w 鍵進(jìn)入 MFC ClassWizard 界面,選擇 Member Variables 選項(xiàng)卡,可顯示成員變量設(shè)置界面。通過該界面設(shè)置與14

21、個(gè) Edit Box 控件對(duì)應(yīng)的成員變量,具體如表 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_EDIT_c0floatf_WJ下面是編寫代碼的重要階段, 可以借鑒在設(shè)計(jì)基于 DOS界面的控制臺(tái)應(yīng)用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。1. 編寫求和的

22、消息處理函數(shù),實(shí)現(xiàn)向量求和,具體代碼如下void CMyDlg:OnAddPlus()/ TODO: Add your control notification handler code here UpdateData(true);h_1 = x_1+y_1; h_2 = x_2+y_2; h_3 = x_3+y_3; UpdateData(false);2. 編寫求差的消息處理函數(shù),實(shí)現(xiàn)向量求差,具體代碼如下void CMyDlg:OnReduceXL()/ TODO: Add your control notification handler code here UpdateData(tr

23、ue);c_1 = x_1-y_1; c_2 = x_2-y_2; c_3 = x_3-y_3; UpdateData(false);3. 編寫求內(nèi)積的消息處理函數(shù),實(shí)現(xiàn)求兩個(gè)向量的內(nèi)積,具體代碼如下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. 編寫求外積的消息處理函數(shù),實(shí)現(xiàn)求兩個(gè)向量的外積,具體代碼如下void CMyDlg:OnWaiJiXL()/ TODO: Add your control notification handler code here UpdateData(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);Upda

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論