軟件課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《軟件課程設(shè)計(jì)》報(bào)告</p><p><b>  班 級(jí):</b></p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)老師: </p><

2、;p><b>  軟件課程設(shè)計(jì)任務(wù)書(shū)</b></p><p><b>  專(zhuān)業(yè)年級(jí):</b></p><p><b>  學(xué)生姓名: </b></p><p>  任務(wù)下達(dá)日期: 年 月 日</p><p>  課程設(shè)計(jì)日期:年 月 日至年 月 日

3、</p><p>  課程設(shè)計(jì)題目: 面向過(guò)程 </p><p>  軟件課程設(shè)計(jì)指導(dǎo)教師評(píng)閱書(shū)</p><p>  指導(dǎo)教師評(píng)語(yǔ)(①基礎(chǔ)理論及基本技能的掌握;②獨(dú)立解決實(shí)際問(wèn)題的能力;③研究?jī)?nèi)容的理論依據(jù)和技術(shù)方法;④取得的主要成果及創(chuàng)新點(diǎn);⑤工作態(tài)度及工作量;⑥總體評(píng)價(jià)及建議成績(jī);⑦存在問(wèn)題等):</p><p>  成 績(jī):

4、 指導(dǎo)教師簽字:</p><p>  年 月 日</p><p><b>  目錄</b></p><p>  面向過(guò)程設(shè)計(jì)題2-------.求反序數(shù)和原數(shù)和(sy1-2.cpp)</p><p>  1.1 需求分析…………………………………………………………

5、…………….…6</p><p>  1.2 概要設(shè)計(jì)………………………………………………………………………...6</p><p>  1.3 詳細(xì)設(shè)計(jì)與編碼………………………………………………………………...7</p><p>  1.4 調(diào)試分析………………………………………………………………………...7</p><p>  

6、1.5 用戶(hù)使用說(shuō)明 ………………………………………………………………….7</p><p>  1.6 設(shè)計(jì)心得………………………………………………………………………...7</p><p>  二、面向過(guò)程設(shè)計(jì)題5-----5判斷日期與星期:(sy1-5.cpp)</p><p>  2.1 需求分析…………………………………………………………………………

7、8</p><p>  2.2 概要設(shè)計(jì)………………………………………………………………………...8</p><p>  2.3 詳細(xì)設(shè)計(jì)與編碼………………………………………………………………...8</p><p>  2.4 調(diào)試分析………………………………………………………………………...9</p><p>  2.5 用戶(hù)

8、使用說(shuō)明 ………………………………………………………………….9</p><p>  2.6 設(shè)計(jì)心得………………………………………………………………………...9</p><p>  三、面向?qū)ο笤O(shè)計(jì)題1------定義complex類(lèi)進(jìn)行復(fù)數(shù)的加減乘除</p><p> ?。╯y2-1.cpp)</p><p>  3.1 需求分析…

9、………………………………………………………………………10</p><p>  3.2 概要設(shè)計(jì)………………………………………………………………………...11</p><p>  3.3 詳細(xì)設(shè)計(jì)與編碼………………………………………………………………...12</p><p>  3.4 調(diào)試分析………………………………………………………………………...1

10、3</p><p>  3.5 用戶(hù)使用說(shuō)明 …………………………………………………………………13</p><p>  3.6 設(shè)計(jì)心得………………………………………………………………………...13</p><p>  四、面向過(guò)程設(shè)計(jì)題3---------用三種方法通過(guò)虛函數(shù)求Fibonacci(sy2-3.cpp)</p><p>

11、;  4.1 需求分析…………………………………………………………………………14</p><p>  4.2 概要設(shè)計(jì)………………………………………………………………………...15</p><p>  4.3 詳細(xì)設(shè)計(jì)與編碼………………………………………………………………..16</p><p>  4.4 調(diào)試分析…………………………………………………

12、……………………...17</p><p>  4.5 用戶(hù)使用說(shuō)明 ………………………………………………………………….17</p><p>  4.6 設(shè)計(jì)心得………………………………………………………………………...17</p><p>  五、圖形界面1---------計(jì)算器(sy3計(jì)算器.rar)</p><p>  5.1

13、 需求分析……………………………………………………………………… .18</p><p>  5.2 概要設(shè)計(jì)………………………………………………………………………..19</p><p>  5.3 詳細(xì)設(shè)計(jì)與編碼………………………………………………………………..20</p><p>  5.4 調(diào)試分析…………………………………………………………………

14、……...22</p><p>  5.5 用戶(hù)使用說(shuō)明 ………………………………………………………………….22</p><p>  5.6 設(shè)計(jì)心得………………………………………………………………………...22</p><p>  六、數(shù)據(jù)結(jié)構(gòu)1------用鏈表和數(shù)組兩種方式分別實(shí)現(xiàn)棧的出棧、入棧、取棧頂元素、判空、查找等操作(第四階段1-1、第四階段1

15、-2)</p><p>  6.1 需求分析…………………………………………………………………………23</p><p>  6.2 概要設(shè)計(jì)………………………………………………………………………...24</p><p>  6.3 詳細(xì)設(shè)計(jì)與編碼……………………………………………………………….24</p><p>  6.4 調(diào)

16、試分析………………………………………………………………………...29</p><p>  6.5 用戶(hù)使用說(shuō)明 ………………………………………………………………….29</p><p>  6.6 設(shè)計(jì)心得………………………………………………………………………...29</p><p>  七、數(shù)據(jù)結(jié)構(gòu)3--------求A矩陣的轉(zhuǎn)置矩陣B(第四階段――3)&

17、lt;/p><p>  7.需求分析………………………………………………………..………….……30</p><p>  7.概要設(shè)計(jì)………………………………………………………………………...30</p><p>  7.詳細(xì)設(shè)計(jì)與編碼………………………………………………………………..30</p><p>  7.調(diào)試分析…………………………

18、……………………………………………...31</p><p>  7.用戶(hù)使用說(shuō)明 ………………………………………………………………….31</p><p>  7.設(shè)計(jì)心得………………………………………………………………………...32</p><p>  八、課程設(shè)計(jì)總結(jié) ……………………………………………………………… 33</p><p

19、><b>  第一部分 基礎(chǔ)題</b></p><p>  2. 編程序,從鍵盤(pán)輸入正整數(shù)n,求出n與其反序數(shù)之和并輸出。/////////////////////////////////</p><p><b>  需求分析:</b></p><p>  本程序主要完成的是:由用戶(hù)自己輸入一個(gè)多為正整數(shù),由程序?qū)⒚?/p>

20、位分離,倒序組合,并由程序?qū)⑴帕泻玫姆葱驍?shù)與原數(shù)進(jìn)行求和。</p><p>  ////////////////////////////////程序執(zhí)行結(jié)果//////////////////////////////////////////////////////////////</p><p><b>  概要設(shè)計(jì):</b></p><p>

21、  本程設(shè)計(jì)思路:將輸入的正整數(shù)通過(guò)取整、取余進(jìn)行分離,利用數(shù)組儲(chǔ)存,再利用c++庫(kù)函數(shù)pow將分離的數(shù)分別乘上10的多次方達(dá)到,與原數(shù)位數(shù)相同且是反序數(shù)的效果。</p><p>  再將其與原數(shù)進(jìn)行求和。</p><p>  1.3  詳細(xì)設(shè)計(jì)與編碼:</p><p>  #include<iostream></p><

22、p>  #include<cmath></p><p>  using namespace std;</p><p>  int main()</p><p><b>  {</b></p><p>  int n,m=0;</p><p>  cout<<"

23、;please input a integer:";</p><p><b>  cin>>n;</b></p><p><b>  int c=n;</b></p><p>  int a[100]={0};//用于將分離的數(shù)位儲(chǔ)存</p><p>  int b[100]=

24、{0};//用于儲(chǔ)存相反數(shù)位</p><p>  int i=0,j;</p><p>  while(n!=0)//分離整數(shù)各個(gè)位</p><p><b>  {</b></p><p>  a[i++]=n%10;</p><p><b>  n=n/10;</b><

25、;/p><p><b>  }</b></p><p>  for(i,j=0;i>0;i--,j++)</p><p><b>  {</b></p><p>  b[j]=a[i-1];</p><p><b>  }</b></p>

26、<p>  for(j;j>0;j--)</p><p><b>  { </b></p><p>  m=m+b[j-1]*pow(10,j-1);//計(jì)算相同數(shù)位的反序數(shù)</p><p><b>  }</b></p><p>  cout<<"原來(lái)的數(shù)

27、是:"<<c<<'\n';</p><p>  cout<<"倒序后的數(shù)是:"<<m<<'\n';</p><p>  cout<<"兩個(gè)數(shù)相加得:"<<c<<"+"<<m<&

28、lt;"="<<c+m<<endl;//求和</p><p>  cout<<"謝謝您的使用!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><

29、;p>  1.4 調(diào)試分析:</p><p>  在調(diào)試過(guò)程中數(shù)組中儲(chǔ)存的數(shù)一定要想好,否則不能得出結(jié)果。</p><p>  而且本程序支持9位以下的整數(shù),位數(shù)太多則不能得出結(jié)果。</p><p>  1.5  用戶(hù)使用說(shuō)明:</p><p>  用戶(hù)根據(jù)程序的提示指定輸入自己想要計(jì)算的數(shù)。</p><

30、;p>  1.6 設(shè)計(jì)心得:</p><p>  通過(guò)自己的親手做,開(kāi)始覺(jué)的有點(diǎn)不熟悉,不能完成,但通過(guò)自己耐心的調(diào)試最后得出了結(jié)果,如果可能的話希望把程序做得更簡(jiǎn)潔些。</p><p>  2.第五題:編程序,使 用戶(hù)任意輸入一個(gè)年份以及該年的1月1日是星期幾,而后任意指定某一天(再輸入該年的任意一個(gè)月份日期),由程序計(jì)算出這一天是星期幾。注意,2月份閏年為29天,非閏年為28天

31、;可被4整除而不可被100整除的年份、或者可被400整除的年份均為閏年。 </p><p><b>  1需求分析</b></p><p>  用戶(hù)自己輸入一個(gè)日期,并輸入該年的一月一日是星期幾,由該程序完成計(jì)算,輸出這一天是星期幾。</p><p>  /////////////////////////////////程序執(zhí)行結(jié)果//////

32、//////////////////////////////////////////////////////////////</p><p><b>  2.2概要設(shè)計(jì):</b></p><p>  本程設(shè)計(jì)思路:輸入用戶(hù)想要計(jì)算的日期(包括年、月、日)及本年一月一日的星期,</p><p>  定義一個(gè)數(shù)組儲(chǔ)存平年12個(gè)月的天數(shù),再用判斷語(yǔ)句

33、判斷這一年是平年還是閏年,若為閏年,將數(shù)組中儲(chǔ)存2月的元素的天數(shù)設(shè)為29,至此天數(shù)設(shè)定完成。然后利用一個(gè)for循環(huán)計(jì)算經(jīng)過(guò)的天數(shù)。最后利用公式計(jì)算這一天是星期幾。</p><p>  2.3  詳細(xì)設(shè)計(jì)與編碼:</p><p>  #include<iostream></p><p>  using namespace std;</p&

34、gt;<p>  void main()</p><p><b>  {</b></p><p>  int y,m,d,n;//輸入變量年、月、日和星期</p><p><b>  int s=0;</b></p><p>  int a[13]={0,31,28,31,30,31,

35、30,31,31,30,31,30,31};//定義一個(gè)數(shù)組儲(chǔ)存每個(gè)月的天數(shù)</p><p>  cout<<"請(qǐng)輸入年月日:"<<endl;</p><p>  cout<<"年"<<endl;cin>>y;</p><p>  cout<<"

36、月"<<endl; cin>>m;</p><p>  cout<<"日"<<endl; cin>>d;</p><p>  cout<<"請(qǐng)輸入這年的一月一日是星期幾;"<<endl;</p><p><b>  cin&

37、gt;>n;</b></p><p>  if(y/4==0&&y/100!=0||y/400==0)</p><p><b>  a[2]=29;</b></p><p><b>  else</b></p><p><b>  a[2]=28;<

38、/b></p><p>  for(int i=0;i<m;i++)</p><p><b>  {</b></p><p><b>  s=s+a[i];</b></p><p><b>  }</b></p><p><b> 

39、 s=s+d;</b></p><p><b>  int n1;</b></p><p><b>  n1=n;</b></p><p><b>  if(s<7)</b></p><p><b>  {</b></p>

40、<p><b>  n=n+s-1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  n=n+s%7-1;</p><p

41、><b>  }</b></p><p>  cout<<"這一天是星期"<<n<<endl;</p><p><b>  }</b></p><p>  2.4 調(diào)試分析:</p><p>  調(diào)試過(guò)程中,經(jīng)常遇到公式計(jì)算錯(cuò)誤,即使輸

42、入、輸出正確也要多驗(yàn)證幾個(gè)不同情況,</p><p>  有時(shí)會(huì)忽略一些問(wèn)題。</p><p>  2.5  用戶(hù)使用說(shuō)明:</p><p>  用戶(hù)根據(jù)程序的提示輸入年、月、日及這年一月一日的星期。</p><p>  2.6 設(shè)計(jì)心得:</p><p>  這個(gè)程序看似復(fù)雜,其實(shí)弄懂其中的主要公式,及

43、編寫(xiě)程序時(shí)的主要方法,就可以編寫(xiě)出來(lái)。</p><p><b>  二 、面向?qū)ο?lt;/b></p><p>  1. 自定義一個(gè)示意性的復(fù)數(shù)類(lèi)型complex,其中含有若干個(gè)成員函數(shù),使用該類(lèi)可以完成復(fù)數(shù)的加法以及對(duì)復(fù)數(shù)的輸出。請(qǐng)完成類(lèi)定義,并編制主函數(shù),說(shuō)明complex類(lèi)對(duì)象,對(duì)定義的各成員函數(shù)進(jìn)行調(diào)用。進(jìn)一步,在類(lèi)中添加對(duì)復(fù)數(shù)進(jìn)行其他基本運(yùn)算(如,復(fù)數(shù)減、乘、除

44、、取模等)的相應(yīng)成員函數(shù),并通過(guò)主函數(shù)處的調(diào)用來(lái)驗(yàn)證各函數(shù)的使用正確性。</p><p><b>  3.1需求分析</b></p><p>  用戶(hù)根據(jù)提示輸入兩個(gè)復(fù)數(shù),然后程序自動(dòng)求出這兩個(gè)復(fù)數(shù)的和、差、積、商。</p><p>  ///////////////////////////////////程序執(zhí)行結(jié)果/////////////

45、/////////////////////////////////</p><p><b>  3.2概要設(shè)計(jì)</b></p><p>  本程序主要運(yùn)用運(yùn)算符的重載:</p><p>  complex operator+(complex &c2);</p><p>  complex operator-(co

46、mplex &c2);</p><p>  complex operator*(complex &c2);</p><p>  complex operator/(complex &c2);</p><p>  double x(complex &c);</p><p>  分別將實(shí)數(shù)的加減乘除運(yùn)算符重載,使在

47、這些運(yùn)算符在復(fù)數(shù)中也可以使用,還利用復(fù)數(shù)的算法。</p><p>  3.3 詳細(xì)設(shè)計(jì)及代碼</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  class

48、 complex</p><p><b>  {</b></p><p><b>  private:</b></p><p>  double real;</p><p>  double imag;</p><p><b>  public:</b>

49、</p><p>  complex(){real=0.0;imag=0.0;}</p><p>  ~complex(){};</p><p>  complex(double r,double i)</p><p><b>  {</b></p><p><b>  real=r;&

50、lt;/b></p><p><b>  imag=i;</b></p><p><b>  }</b></p><p>  complex operator+(complex &c2);</p><p>  complex operator-(complex &c2);<

51、;/p><p>  complex operator*(complex &c2);</p><p>  complex operator/(complex &c2);</p><p>  double x(complex &c);</p><p>  void display();</p><p>

52、  void set();</p><p><b>  };</b></p><p>  double complex::x(complex &c)</p><p><b>  {</b></p><p>  return sqrt(c.real*c.real+c.imag*c.imag);

53、</p><p><b>  }</b></p><p>  void complex::set()</p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入實(shí)部"<<endl;</p><p>  cin&

54、gt;>real;</p><p>  cout<<"請(qǐng)輸入虛部"<<endl;</p><p>  cin>>imag;</p><p><b>  }</b></p><p>  void complex::display()</p><

55、;p><b>  {</b></p><p>  cout<<"("<<real<<","<<imag<<"i"<<")"<<endl;</p><p><b>  }</b>&

56、lt;/p><p>  complex complex::operator+(complex &c2)</p><p><b>  { </b></p><p>  return complex(real+c2.real,imag+c2.imag);</p><p><b>  }</b><

57、;/p><p>  complex complex::operator-(complex &c2)</p><p><b>  {</b></p><p>  return complex(real-c2.real,imag-c2.imag);</p><p><b>  }</b></p

58、><p>  complex complex::operator*(complex &c2)</p><p><b>  {</b></p><p>  return complex((real*c2.real-imag*c2.imag),(real*c2.imag+imag*c2.real));</p><p>&

59、lt;b>  }</b></p><p>  complex complex::operator/(complex &c2)</p><p><b>  { </b></p><p>  return complex((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.i

60、mag*c2.imag),(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));</p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  co

61、mplex c1,c2,c7(0,0);</p><p>  double x1,x2;</p><p>  cout<<"請(qǐng)輸入第一個(gè)復(fù)數(shù):";c1.set();</p><p>  cout<<"請(qǐng)輸入第一個(gè)復(fù)數(shù):";c2.set();</p><p>  complex

62、c3,c4,c5,c6;</p><p><b>  c3=c1+c2;</b></p><p><b>  c4=c1-c2;</b></p><p><b>  c5=c1*c2;</b></p><p><b>  c6=c1/c2;</b><

63、/p><p>  x1=c1.x(c1);</p><p>  x2=c1.x(c2);</p><p>  cout<<"相加得"<<endl;c3.display();</p><p>  cout<<"相減得"<<endl;c4.display();&l

64、t;/p><p>  cout<<"相乘得"<<endl;c5.display();</p><p>  cout<<"相除得"<<endl;c6.display();</p><p>  cout<<"第一個(gè)數(shù)的模"<<x1<<

65、;endl;</p><p>  cout<<"第二個(gè)數(shù)的模"<<x2<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  3.4調(diào)試分析</

66、b></p><p>  調(diào)試過(guò)程中,由于代碼量較大,括號(hào)的數(shù)量可能會(huì)不一致,要細(xì)心,在編寫(xiě)乘除法時(shí)要注意算法,因?yàn)閺?fù)數(shù)的乘除與實(shí)數(shù)有一定的區(qū)別。</p><p>  3.5  用戶(hù)使用說(shuō)明:</p><p>  用戶(hù)根據(jù)屏幕上的提示信息,依次輸入計(jì)算的復(fù)數(shù)的實(shí)虛部,</p><p>  然后程序會(huì)自動(dòng)計(jì)算,然后將結(jié)果輸出到

67、屏幕上。</p><p><b>  3.6設(shè)計(jì)心得</b></p><p>  通過(guò)本程序的設(shè)計(jì),我對(duì)運(yùn)算符的重載有了更加深刻的認(rèn)識(shí),對(duì)于面向?qū)ο筮@種思想也有了更深的理解。</p><p>  4. 利用虛函數(shù)手段,按照3種不同的計(jì)算方法來(lái)求出Fibonacci數(shù)列的第n項(xiàng)(的具體項(xiàng)值)并輸出。</p><p><

68、;b>  4.1需求分析</b></p><p>  分別通過(guò)三種不同的方法結(jié)合面對(duì)對(duì)象的編程思想,利用類(lèi)、純虛函數(shù),求Fibonacci數(shù)列的任何一項(xiàng)的值。</p><p>  第一種使用的是簡(jiǎn)單數(shù)據(jù)平移法;</p><p>  第二種使用的是數(shù)組法;</p><p>  最后一種使用的函數(shù)遞歸的方法。</p>

69、<p>  ///////////////////////////////////////程序執(zhí)行結(jié)果//////////////////////////////////////////////</p><p><b>  4.2 概要設(shè)計(jì)</b></p><p>  本程序主要通過(guò)純虛函數(shù)的方法實(shí)現(xiàn)Fibonacci數(shù)列的求值,</p>

70、<p>  在定義的類(lèi)中聲明純虛函數(shù),在類(lèi)外用三種不同的方法實(shí)現(xiàn),</p><p>  最后用科學(xué)計(jì)數(shù)的方法打印出來(lái)。</p><p>  4.3 詳細(xì)設(shè)計(jì)及編碼</p><p>  #include <iostream></p><p>  using namespace std;</p><p&g

71、t;  class baseCla</p><p><b>  {</b></p><p><b>  public:</b></p><p>  virtual double fib(int n)=0; //定義純虛函數(shù)fib()</p><p><b>  };</b&g

72、t;</p><p>  class fib1Cla:public baseCla</p><p><b>  { </b></p><p><b>  public :</b></p><p>  virtual double fib(int n); //在派生類(lèi)中說(shuō)明同一個(gè)虛函數(shù)

73、fib()</p><p><b>  };</b></p><p>  class fib2Cla:public baseCla</p><p><b>  {</b></p><p><b>  public:</b></p><p>  virtu

74、al double fib(int n); </p><p><b>  };</b></p><p>  class fib3Cla:public baseCla</p><p><b>  {</b></p><p><b>  public:</b></p>

75、<p>  virtual double fib(int n); </p><p><b>  };</b></p><p>  double fib1Cla::fib (int n) //對(duì)fib1中的函數(shù)進(jìn)行定義(簡(jiǎn)單數(shù)據(jù)平移法)</p><p><b>  { </b></p

76、><p><b>  double p;</b></p><p>  double a=1,b=1;</p><p>  if(n==1||n==2)</p><p>  return 1 ;</p><p><b>  else </b></p><p>

77、;<b>  {</b></p><p>  for(int i=3;i<=n;i++)</p><p><b>  {</b></p><p><b>  p=a+b;</b></p><p><b>  a=b;</b></p>&

78、lt;p><b>  b=p;</b></p><p><b>  }</b></p><p><b>  return p;</b></p><p><b>  }</b></p><p><b>  }</b></p&

79、gt;<p>  double fib2Cla::fib (int n) //對(duì)fib2中的函數(shù)進(jìn)行定義(數(shù)組法)</p><p><b>  { </b></p><p>  double a[1000];</p><p><b>  a[0]=1;</b></p>

80、;<p><b>  a[1]=1;</b></p><p>  if(n==1||n==2)</p><p>  return 1 ;</p><p><b>  else</b></p><p><b>  {</b></p><p>

81、  for(int i=2;i<=n-1;i++)</p><p>  a[i]=a[i-1]+a[i-2];</p><p>  return a[n-1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  doub

82、le fib3Cla::fib (int n) </p><p><b>  {</b></p><p><b>  double p;</b></p><p>  if(n==1||n==2)</p><p><b>  p=1;</b></p><p

83、><b>  else</b></p><p>  p=fib(n-1)+fib(n-2);</p><p><b>  return p;</b></p><p><b>  }</b></p><p>  void fun( baseCla*p, int n)

84、 //自定義函數(shù)fun,形參p為指向基類(lèi)的指針,其對(duì)應(yīng)實(shí)參</p><p>  //可為不同派生類(lèi)對(duì)象的地址,n指明了要求出數(shù)列的第n項(xiàng)</p><p><b>  { </b></p><p>  double d=p->fib (n); //根據(jù)p指針不同調(diào)用不同的派生類(lèi)中的虛函數(shù)fib</p>

85、<p>  cout.flags(ios::scientific);</p><p>  cout.precision(15);</p><p>  cout<<"fib("<<n<<")="<<d<<endl;</p><p><b>  }

86、</b></p><p>  void main()</p><p><b>  {</b></p><p>  fib1Cla obj1;</p><p>  fib2Cla obj2;</p><p>  fib3Cla obj3;</p><p>  co

87、ut<<"------fib1Cla--------"<<endl;//簡(jiǎn)單變量"數(shù)據(jù)平移"求解方法,求fib(1476)</p><p>  fun(&obj1,1476);</p><p>  cout<<"------fib2Cla--------"<<endl;//數(shù)

88、組求解方法,求fib(888)</p><p>  fun(&obj2,888);</p><p>  cout<<"------fib3Cla--------"<<endl;//遞歸求解方法,求fib(35)</p><p>  fun(&obj3,35);</p><p><

89、;b>  }</b></p><p><b>  4.4 調(diào)試分析</b></p><p>  本程序的算法難度不大,主要是對(duì)純虛函數(shù)的認(rèn)識(shí)和使用</p><p>  在調(diào)用三個(gè)不同的方法時(shí),指針的使用是非常有必要的。如果指向不當(dāng)就可能造成錯(cuò)誤。</p><p><b>  4.5用戶(hù)使用說(shuō)明

90、</b></p><p>  本程序重在利用三種不同的方法進(jìn)行Fibonacci數(shù)列的求值,</p><p>  故在程序中已經(jīng)設(shè)定好了需要求解的數(shù)值,用戶(hù)只需單擊執(zhí)程序指令,程序就會(huì)自動(dòng)進(jìn)行運(yùn)算。</p><p><b>  4.6 設(shè)計(jì)心得</b></p><p>  通過(guò)本程序的設(shè)計(jì)和編輯,我更深刻的體

91、會(huì)了面向?qū)ο笾屑兲摵瘮?shù)的使用,對(duì)面向?qū)ο缶幊痰乃枷胗辛烁羁痰恼J(rèn)識(shí),提高了我的編程能力。</p><p>  第三階段、可視化程序設(shè)計(jì)</p><p><b>  5.1需求分析</b></p><p>  根據(jù)用戶(hù)需求編寫(xiě)一個(gè)計(jì)算器,用戶(hù)可以根據(jù)自己的需求進(jìn)行簡(jiǎn)單的數(shù)學(xué)計(jì)算,例如加法運(yùn)算,減法運(yùn)算,乘法運(yùn)算,除法運(yùn)算和一些高級(jí)運(yùn)算如開(kāi)平方,求

92、冪運(yùn)算。</p><p><b>  測(cè)試 4+5=</b></p><p>  ////////////////////////////////////程序執(zhí)行結(jié)果///////////////////////////////////////////</p><p>  ////////////////////////////////////

93、//////////////////////////////////////////////////////////////////////</p><p><b>  5.2概要設(shè)計(jì):</b></p><p>  抽象數(shù)據(jù)類(lèi)型與函數(shù)定義:</p><p><b>  1.類(lèi)及類(lèi)函數(shù):</b></p><

94、;p>  運(yùn)算類(lèi)型均默認(rèn)為長(zhǎng)整型,將計(jì)算結(jié)果保留六位小數(shù)。</p><p>  2.程序流程: 首先初始化MFC模塊,創(chuàng)建可視化界面對(duì)界面的內(nèi)容進(jìn)行設(shè)定,然后設(shè)計(jì)相應(yīng)的函數(shù)執(zhí)行之,最后在工程中調(diào)用各個(gè)模塊,實(shí)現(xiàn)功能。</p><p>  5.3詳細(xì)設(shè)計(jì)及編碼</p><p>  void CCalculatorDlg::OnButton1() </p&g

95、t;<p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  if(cat==1)</p><p><b>  ;<

96、/b></p><p>  else if(m_edit1=="0.")</p><p>  m_edit1="";</p><p>  m_edit1+='1';</p><p>  UpdateData(false);</p><p><b>

97、  }</b></p><p><b>  運(yùn)算符:</b></p><p><b>  乘號(hào):</b></p><p>  void CCalculatorDlg::OnBUTTONcen() </p><p><b>  {</b></p><

98、;p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  cs1=m_edit1;</p><p>  m_edit1="";</p><p><b>  sos=3;<

99、;/b></p><p>  UpdateData(false);</p><p><b>  } </b></p><p><b>  求?!?”:</b></p><p>  void CCalculatorDlg::OnButton10() </p><p>&l

100、t;b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  cs1=m_edit1;</p><p>  m_edit1="";</p

101、><p><b>  sos=6;</b></p><p>  UpdateData(false);</p><p><b>  }</b></p><p>  開(kāi)根號(hào)“sqrt”:</p><p>  void CCalculatorDlg::OnButton11() <

102、;/p><p><b>  {</b></p><p>  UpdateData();</p><p>  double f1,f3;</p><p>  cs1=m_edit1;</p><p>  f1=atof(cs1);</p><p><b>  if(f1

103、<0)</b></p><p>  MessageBox("負(fù)數(shù)沒(méi)有平方根!");</p><p><b>  else</b></p><p><b>  {</b></p><p>  f3=sqrt(f1);</p><p>  m

104、_edit1.Format("%f",f3);}</p><p>  UpdateData(false);</p><p><b>  清空鍵“AC”:</b></p><p>  void CCalculatorDlg::OnBUTTONcls() </p><p><b>  {<

105、/b></p><p>  UpdateData();</p><p>  m_edit1="";</p><p><b>  sos=0;</b></p><p>  UpdateData(false);</p><p><b>  }</b>&l

106、t;/p><p><b>  等號(hào)鍵“=”:</b></p><p>  void CCalculatorDlg::OnBUTTONcalc() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler c

107、ode here</p><p>  double f1,f2,f3;</p><p>  switch (sos)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  UpdateData();</p>

108、<p>  cs2=m_edit1;</p><p>  if(cs1.Left(1)!='-') </p><p>  f1=atof(cs1); </p><p>  if(cs1.Left(1)=='-')</p><p><b>  {</b></p>

109、<p>  cs1=cs1.Right(cs1.GetLength()-1); </p><p>  f1=(-1)*(atof(cs1));</p><p><b>  }</b></p><p>  f2=atof(cs2);</p><p><b>  f3=f1+f2;</b>&

110、lt;/p><p>  m_edit1.Format("%f",f3);</p><p>  UpdateData(false); </p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  U

111、pdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p><b>  f3=f1-f2;</b></p><p>  m_edit1.Format("%f&quo

112、t;,f3);</p><p>  UpdateData(false); </p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  UpdateData();</p><p>  cs2=m_edit1;<

113、;/p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p><b>  f3=f1*f2;</b></p><p>  m_edit1.Format("%f",f3);</p><p>  UpdateData(false);&l

114、t;/p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  UpdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p&

115、gt;  f2=atof(cs2);</p><p><b>  if(f2==0)</b></p><p>  MessageBox("被除數(shù)不能為零!");</p><p><b>  else{</b></p><p><b>  f3=f1/f2;</b&

116、gt;</p><p>  m_edit1.Format("%f",f3);}</p><p>  UpdateData(false);</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>

117、  UpdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p>  f3=int(f1)%int(f2);</p><p>  m_edit1.Format("%f",f3)

118、;</p><p>  UpdateData(false);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  正負(fù)號(hào)“+/-”:<

119、;/b></p><p>  void CCalculatorDlg::OnBUTTONfu() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData(

120、);</p><p>  //cs1=m_edit1;</p><p>  //m_edit1="";</p><p>  if(m_edit1.Left(1)=='-') //截取m_edit1左邊第一個(gè)字符'-'</p><p>  m_edit1=m_edit1.Right(m_ed

121、it1.GetLength()-1); </p><p><b>  else</b></p><p>  m_edit1='-'+m_edit1;</p><p><b>  sos=5;</b></p><p>  UpdateData(false);</p>&

122、lt;p><b>  }</b></p><p><b>  5.4調(diào)試分析</b></p><p>  在制作計(jì)算器的過(guò)程中,因?yàn)槌绦蛑杏泻芏囝^文件,所以在寫(xiě)程序時(shí)很多時(shí)候都出現(xiàn)了不能運(yùn)行,提示頭文件缺失等等問(wèn)題,所以我們要注意函數(shù)的連接,再者</p><p>  文件中有很多函數(shù)要用,編寫(xiě)功能函數(shù)時(shí)經(jīng)常因?yàn)榫帉?xiě)錯(cuò)

123、誤而不能運(yùn)行該功能。</p><p><b>  5.5用戶(hù)使用說(shuō)明</b></p><p>  用戶(hù)打開(kāi)程序時(shí),屏幕上會(huì)自動(dòng)顯示出科學(xué)計(jì)算器的界面,使用鼠標(biāo),點(diǎn)擊要輸入的數(shù)字后運(yùn)算符號(hào),點(diǎn)擊后該數(shù)字后符號(hào)就會(huì)在顯示屏上顯示出來(lái)。當(dāng)輸入完成后顯示屏?xí)詣?dòng)顯示出用戶(hù)剛剛輸入的表達(dá)式的值,按“AC”鍵清空顯示屏上的數(shù)字。若要繼續(xù)計(jì)算則按上述步驟繼續(xù),若要退出則按界面右上方

124、的退出圖標(biāo),或右擊MFC圖標(biāo),選擇退出后即可退出程序。</p><p><b>  5.6程序編寫(xiě)心得</b></p><p>  通過(guò)這次程序的編寫(xiě)和修改,我初步學(xué)會(huì)了如何利用visual c++ 6.0 提供的MFC可視化編程來(lái)實(shí)現(xiàn)可視化程序,在這個(gè)過(guò)程中我深刻地體會(huì)到了C++在程序設(shè)計(jì)中的強(qiáng)大功能,為今后的學(xué)習(xí)打下了良好的基礎(chǔ),通過(guò)程序的編寫(xiě)我更加深刻的體會(huì)的各

125、個(gè)函數(shù),各個(gè)頭文件的作用,更深刻的明白的頭文件的作用原理。 </p><p><b>  第四階段、數(shù)據(jù)結(jié)構(gòu)</b></p><p>  6.用鏈表和數(shù)組兩種方式分別實(shí)現(xiàn)棧的出棧、入棧、取棧頂元素、判空、查找等操作。</p><p><b>  6.1需求分析</b></p><p>  分別通過(guò)數(shù)

126、組和鏈表實(shí)現(xiàn)棧的各項(xiàng)功能,程序自動(dòng)生成一個(gè)棧,用戶(hù)根據(jù)提示進(jìn)行操作。</p><p><b>  6.2概要設(shè)計(jì)</b></p><p>  本程序主要通過(guò)數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)的先進(jìn)后出作用,來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)操作的各種功能,進(jìn)棧、出棧、獲取棧頂元素 、判空 、查找等。主要利用兩種不同的方法進(jìn)行設(shè)計(jì),第一種利用數(shù)組順序儲(chǔ)存,第二種利用定義的新結(jié)點(diǎn),指針形成鏈表儲(chǔ)存。</p

127、><p><b>  6.3</b></p><p><b>  詳細(xì)設(shè)計(jì)及代碼</b></p><p>  6.3.1利用數(shù)組順序儲(chǔ)存</p><p>  #include<iostream.h></p><p>  #include<stdlib.h>

128、</p><p>  #define STACK_INIT_SIZE 100//存儲(chǔ)空間初始分配量</p><p>  typedef int ElemType;</p><p>  typedef struct{</p><p>  ElemType data[STACK_INIT_SIZE];</p><p&

129、gt;<b>  int top;</b></p><p>  }SeqStack;</p><p>  void InitStack(SeqStack &S)</p><p>  {//構(gòu)造一個(gè)新的棧</p><p><b>  S.top=-1;</b></p><p

130、><b>  }</b></p><p>  void GetTop(SeqStack S)</p><p><b>  {//取棧頂元素</b></p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl

131、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"棧頂元素為:"<< S.data[S.top]<<endl;</p><p><b>  }</b>

132、;</p><p><b>  }</b></p><p>  void Push(SeqStack &S,ElemType e)</p><p><b>  {//入棧</b></p><p>  if(S.top==STACK_INIT_SIZE-1)</p><p&

133、gt;  cout<<"棧滿"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p><b>  S.top++;</b></p><p>  S.data[S.top]=

134、e;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Pop(SeqStack &S)</p><p><b>  {//出棧</b></p><p>  ElemType x;<

135、;/p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  x=S.data[S.t

136、op];</p><p><b>  S.top--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void StackEmpty(SeqStack &S)</p><p><

137、b>  {//判空</b></p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl;</p><p><b>  else</b></p><p>  cout<<"棧不為空"&l

138、t;<endl;</p><p><b>  }</b></p><p>  ElemType VisitStack(SeqStack &S,ElemType &e)</p><p><b>  {//查找</b></p><p><b>  int i=0;<

139、/b></p><p>  while(i<=S.top&&S.data[i]!=e)</p><p><b>  i++;</b></p><p>  if(i<=S.top)</p><p>  return i+1;</p><p><b>  e

140、lse</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  ElemType x,y,

141、z;</p><p>  SeqStack s;</p><p><b>  int k;</b></p><p>  InitStack(s);</p><p><b>  do{</b></p><p>  cout<<"**************

142、***************程序功能表********************************"<<endl;</p><p>  cout<<"1.獲得棧頂元素 2.壓棧 3.刪除棧頂元素 4.判斷棧是否為空 5.查找 0.退出"<<endl;</p><p>  cout<<"*****

143、*************************請(qǐng)你選擇*********************************"<<endl;</p><p><b>  cin>>k;</b></p><p><b>  switch(k)</b></p><p><b>  {

144、case 0:</b></p><p>  cout<<"退出"<<endl;</p><p><b>  exit(0);</b></p><p><b>  case 1:</b></p><p>  GetTop(s);break;<

溫馨提示

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

評(píng)論

0/150

提交評(píng)論