2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  C++課程設(shè)計(jì)報(bào)告</b></p><p><b> ?。ㄔO(shè)計(jì)題目:)</b></p><p>  姓 名: **** </p><p>  學(xué) 號: ********* </p><p>  專 業(yè): ****

2、****** </p><p>  班 級: ******* </p><p>  指導(dǎo)老師: ***** </p><p><b>  200 年 月</b></p><p><b>  目錄</b></p><

3、;p>  課程設(shè)計(jì)目的……………………………………………………</p><p>  項(xiàng)目要求與簡介…………………………………………………</p><p>  系統(tǒng)分析…………………………………………………………</p><p>  3.1 系統(tǒng)功能結(jié)構(gòu)與模塊劃分………………………………….</p><p>  3.2 系統(tǒng)模塊圖…………

4、………………………………………….</p><p>  3.3 系統(tǒng)采用的關(guān)鍵(難點(diǎn))技術(shù)…………………………….</p><p>  3.4 主要類說明………………………………………………….</p><p>  測試運(yùn)行的結(jié)果………………………………………………….</p><p>  心得體會………………………………….……………………

5、…</p><p><b>  程序代碼清單</b></p><p>  參考書目…………………………………………………………</p><p><b>  1 課程設(shè)計(jì)目的</b></p><p>  目標(biāo)是使學(xué)生了解可視化程序設(shè)計(jì)語言的基礎(chǔ)知識,掌握面向?qū)ο缶幊痰姆治鲈O(shè)計(jì)方法,以及與面向?qū)ο蠹夹g(shù)相

6、關(guān)的一些軟件開發(fā)技術(shù),掌握在 VisualC++6環(huán)境下進(jìn)行可視化程序設(shè)計(jì)技術(shù)。通過實(shí)踐具體的項(xiàng)目,為他們進(jìn)一步開展相關(guān)領(lǐng)域的學(xué)習(xí)和科研打下良好的基礎(chǔ)。</p><p><b>  2 項(xiàng)目要求與簡介</b></p><p>  1、二進(jìn)制、八進(jìn)制、十進(jìn)制及十六進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡單計(jì)算</p><p>  2、科學(xué)計(jì)算函數(shù),

7、包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運(yùn)行</p><p>  4、具備歷史計(jì)算的記憶功能</p><p>  5、對不正確的表達(dá)式能指出其錯(cuò)誤原因</p><p>  6、整理上機(jī)步驟、完成實(shí)驗(yàn)報(bào)告、提交可運(yùn)行的程序,給出實(shí)驗(yàn)數(shù)據(jù)和實(shí)驗(yàn)結(jié)果。</p><p><b>  3 系統(tǒng)實(shí)現(xiàn)</b>

8、;</p><p>  3.1 系統(tǒng)功能結(jié)構(gòu)與模塊劃分</p><p> ?。ㄏ到y(tǒng)總體結(jié)構(gòu)與功能模塊的劃分,并對各個(gè)模塊進(jìn)行說明)</p><p><b>  (1)。初始設(shè)計(jì)</b></p><p>  設(shè)立tag1和tag2作為角度,弧度轉(zhuǎn)換標(biāo)志和進(jìn)制轉(zhuǎn)換標(biāo)志,輸入框添加m_exp控件變量,輸出框添加m_error控

9、件變量,歷史紀(jì)錄添加m_history控件變量</p><p><b> ?。?)。運(yùn)算函數(shù):</b></p><p><b>  數(shù)字判斷:</b></p><p>  int IsNumber(char c)</p><p>  { //數(shù)字判斷</p><p>  

10、if(c>='0'&&c<='9'||c>='A'&&c<='F')return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p><b>  操作符判斷

11、:</b></p><p>  int IsOperator(char c)</p><p>  { //操作符判斷</p><p>  if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^')return 1;</p><

12、p>  else return 0;</p><p><b>  }</b></p><p><b>  優(yōu)先級判斷:</b></p><p>  char Precede(char x,char y)</p><p>  { //優(yōu)先級判斷</p><p>  i

13、f(x=='('&&y==')')return '=';</p><p>  else if(x=='('||y=='(')return '<';</p><p>  else if(x>='a'&&x<='t')

14、return '>';</p><p>  else if(y>='a'&&x<='t')return '<';</p><p>  else if(x=='^'||y=='+'||y=='-'||y==')')return

15、 '>';</p><p>  else if((x=='*'||x=='/')&&y!='^')return '>';</p><p>  else return '<';</p><p><b>  }</b>&

16、lt;/p><p><b>  二目運(yùn)算:</b></p><p>  double Operate2(double a,double b,char theta)</p><p>  { //二目運(yùn)算</p><p>  double result;</p><p>  switch(theta)

17、</p><p>  { case '+' :result=a+b;break;</p><p>  case '-' :result=a-b;break;</p><p>  case '*' :result=a*b;break;</p><p>  case '/'

18、 :</p><p>  if(b==0){result=0;break;}</p><p>  else {result=a/b;break;}</p><p>  case '^' :</p><p>  if(a==0&&b<=0){result=0;break;}</p><p

19、>  else {result=pow(a,b);break;}</p><p>  default :result=0;</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></p><p>

20、<b>  函數(shù)運(yùn)算:</b></p><p>  double Operate1(double a,char theta)</p><p>  { //函數(shù)運(yùn)算</p><p>  double result;</p><p>  switch(theta)</p><p><b>

21、;  {</b></p><p>  case 'i' :if(tag1)a=a/57.295779513;result=sin(a);break;</p><p>  case 's' :if(a>=-1&&a<=1){result=asin(a);if(tag1)result*=57.295779513;}<

22、/p><p>  else result=0;break;</p><p>  case 'o' :if(tag1)a=a/57.295779513;result=cos(a);break;</p><p>  case 'c' :if(a>=-1&&a<=1){result=acos(a);if(tag1)r

23、esult*=57.295779513;}</p><p>  else result=0;break;</p><p>  case 'a' :if(tag1)a=a/57.295779513;result=tan(a);break;</p><p>  case 't' :result=atan(a);if(tag1)result

24、*=57.295779513;break;</p><p>  case 'p' :if(tag1)a=a/57.295779513;result=1/tan(a);break;</p><p>  case 'd' :result=atan(1/a);if(tag1)result*=57.295779513;break;</p><p&

25、gt;  case 'q' :result=sqrt(a);break;</p><p>  case 'b' :result=fabs(a);break;</p><p>  default :result=0;</p><p><b>  }</b></p><p>  return

26、 result;</p><p><b>  }</b></p><p><b>  (3)??丶瘮?shù):</b></p><p>  數(shù)字鍵盤數(shù)字分別用m_exp=m_exp+'n'處理,n=0,1,……,8,9。</p><p>  十六進(jìn)制字母分別用m_exp=m_exp+

27、9;K'處理,K=A,B,C,D,E,F。</p><p>  運(yùn)算符號分別用m_exp=m_exp+'a'處理,a=+,-,*,/,^。</p><p>  輔助符號分別用m_exp=m_exp+'b'處理,b=.,(,)。</p><p>  函數(shù)運(yùn)算符號分別用m_exp=m_exp+'c'處理,</

28、p><p>  c=sin(,cos(,tan(,cot(,sqr(,asin(,acos(,atan(,acot(,abs(。</p><p><b>  輸出結(jié)果函數(shù):</b></p><p>  void CCalculatorDlg::OnBUTTONresult() </p><p><b>  {<

29、;/b></p><p>  CString temp;</p><p>  m_error="";</p><p>  UpdateData(1);</p><p>  m_error=Error(m_exp);</p><p>  if(m_error==""){<

30、;/p><p>  temp=m_exp;</p><p>  m_error=evaluate(m_exp);</p><p>  m_history.InsertString(0,temp+'='+m_error);</p><p><b>  }</b></p><p>  Up

31、dateData(0);</p><p><b>  }</b></p><p>  清空用m_exp="";m_error="";處理。</p><p><b>  退格鍵函數(shù):</b></p><p>  void CCalculatorDlg::OnB

32、UTTONbackspace() </p><p><b>  {</b></p><p>  CString temp;</p><p>  UpdateData(1);</p><p>  if(m_exp.Right(1)=='(')</p><p><b>  {

33、</b></p><p>  if(m_exp.GetLength()>=5)</p><p><b>  {</b></p><p>  temp=m_exp.Right(5);</p><p>  temp=temp.Left(4);</p><p><b>  }

34、</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  temp=m_exp.Right(4);</p><p>  temp=temp.Left(3);</p><p><b>  }<

35、;/b></p><p>  if(temp.Right(1)>='a'&&temp.Right(1)<='z')</p><p><b>  {</b></p><p>  if(temp.Left(1)=='a')m_exp=m_exp.Left(m_exp.

36、GetLength()-5);</p><p>  else m_exp=m_exp.Left(m_exp.GetLength()-4);</p><p><b>  }</b></p><p>  else m_exp=m_exp.Left(m_exp.GetLength()-1);</p><p><b>

37、  }</b></p><p><b>  else</b></p><p>  m_exp=m_exp.Left(m_exp.GetLength()-1);</p><p>  UpdateData(0);</p><p><b>  }</b></p><p>

38、;<b>  3.2 數(shù)據(jù)流圖</b></p><p> ?。ㄏ到y(tǒng)的數(shù)據(jù)流程圖,并進(jìn)行說明)</p><p>  以一個(gè)編緝框接受用戶輸入的表達(dá)式,輸入須用軟件提供的軟鍵盤。</p><p>  從輸入到計(jì)算的過程由一個(gè)按鍵觸發(fā),如“=”。</p><p>  出錯(cuò)處理只分析表達(dá)式出錯(cuò)。</p><p

39、>  歷史記錄中保存運(yùn)算的表達(dá)式和其結(jié)果。</p><p>  3.3 系統(tǒng)采用的關(guān)鍵(難點(diǎn))技術(shù)</p><p>  (對開發(fā)過程采用的關(guān)鍵技術(shù)進(jìn)行說明,自己創(chuàng)新的地方也在此作詳細(xì)的說明)</p><p>  進(jìn)制變化根據(jù)進(jìn)制標(biāo)志tag2使用控件切換,并且鎖定不符合進(jìn)制輸入的控件。</p><p>  在初始化中加入CheckRadi

40、oButton(IDC_RADIO3,IDC_RADIO6,IDC_RADIO5);使得開啟計(jì)算器是默認(rèn)使用十進(jìn)制。</p><p>  清楚歷史紀(jì)錄用m_history.ResetContent();實(shí)現(xiàn)。</p><p><b>  3.4 源程序清單</b></p><p> ?。谐鲈创a,注意格式要規(guī)范。代碼中有適當(dāng)?shù)淖⑨專?lt;/

41、p><p>  // CalculatorDlg.cpp : implementation file</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "Calculator.h"</p&g

42、t;<p>  #include "CalculatorDlg.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = _

43、_FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CAboutDlg dialog used for App About<

44、;/p><p>  class CAboutDlg : public CDialog</p><p><b>  {</b></p><p><b>  public:</b></p><p>  CAboutDlg();</p><p>  // Dialog Data<

45、/p><p>  //{{AFX_DATA(CAboutDlg)</p><p>  enum { IDD = IDD_ABOUTBOX };</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtual function overrides</p><p&

46、gt;  //{{AFX_VIRTUAL(CAboutDlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX_VIRTUAL</p><p>  //

47、 Implementation</p><p>  protected:</p><p>  //{{AFX_MSG(CAboutDlg)</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></

48、p><p>  CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CAboutDlg)</p><p>  //}}AFX_DATA_INIT</p><p>

49、;<b>  }</b></p><p>  void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AF

50、X_DATA_MAP(CAboutDlg)</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CAboutDlg)</p&g

51、t;<p>  // No message handlers</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////////////</

52、p><p>  // CCalculatorDlg dialog</p><p>  CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CCalculatorDlg::IDD, pParent)</p><p><b>  {</

53、b></p><p>  //{{AFX_DATA_INIT(CCalculatorDlg)</p><p>  m_exp = _T("");</p><p>  m_error = _T("");</p><p>  //}}AFX_DATA_INIT</p><p>

54、  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b>  }</b></p><p>  void CC

55、alculatorDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CCalculatorDlg)</p><p> 

56、 DDX_Control(pDX, IDC_COMBO1, m_history);</p><p>  DDX_Text(pDX, IDC_EDIT1, m_exp);</p><p>  DDV_MaxChars(pDX, m_exp, 500);</p><p>  DDX_Text(pDX, IDC_EDIT3, m_error);</p>&l

57、t;p>  DDV_MaxChars(pDX, m_error, 500);</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)</p><p>  //{{AFX_M

58、SG_MAP(CCalculatorDlg)</p><p>  ON_WM_SYSCOMMAND()</p><p>  ON_WM_PAINT()</p><p>  ON_WM_QUERYDRAGICON()</p><p>  ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)</p><

59、p>  ON_BN_CLICKED(IDC_BUTTON_0, OnButton0)</p><p>  ON_BN_CLICKED(IDC_BUTTON_1, OnButton1)</p><p>  ON_BN_CLICKED(IDC_BUTTON_2, OnButton2)</p><p>  ON_BN_CLICKED(IDC_BUTTON_3, On

60、Button3)</p><p>  ON_BN_CLICKED(IDC_BUTTON_4, OnButton4)</p><p>  ON_BN_CLICKED(IDC_BUTTON_5, OnButton5)</p><p>  ON_BN_CLICKED(IDC_BUTTON_6, OnButton6)</p><p>  ON_BN_

61、CLICKED(IDC_BUTTON_7, OnButton7)</p><p>  ON_BN_CLICKED(IDC_BUTTON_8, OnButton8)</p><p>  ON_BN_CLICKED(IDC_BUTTON_9, OnButton9)</p><p>  ON_BN_CLICKED(IDC_BUTTON_A, OnBUTTONa)</

62、p><p>  ON_BN_CLICKED(IDC_BUTTON_B, OnBUTTONb)</p><p>  ON_BN_CLICKED(IDC_BUTTON_C, OnBUTTONc)</p><p>  ON_BN_CLICKED(IDC_BUTTON_D, OnBUTTONd)</p><p>  ON_BN_CLICKED(IDC_B

63、UTTON_E, OnBUTTONe)</p><p>  ON_BN_CLICKED(IDC_BUTTON_F, OnBUTTONf)</p><p>  ON_BN_CLICKED(IDC_BUTTONadd, OnBUTTONadd)</p><p>  ON_BN_CLICKED(IDC_BUTTONsub, OnBUTTONsub)</p>

64、<p>  ON_BN_CLICKED(IDC_BUTTONmul, OnBUTTONmul)</p><p>  ON_BN_CLICKED(IDC_BUTTONdiv, OnBUTTONdiv)</p><p>  ON_BN_CLICKED(IDC_BUTTONpower, OnBUTTONpower)</p><p>  ON_BN_CLICKED

65、(IDC_BUTTONpoint, OnBUTTONpoint)</p><p>  ON_BN_CLICKED(IDC_BUTTONleft, OnBUTTONleft)</p><p>  ON_BN_CLICKED(IDC_BUTTONright, OnBUTTONright)</p><p>  ON_BN_CLICKED(IDC_BUTTONresult,

66、 OnBUTTONresult)</p><p>  ON_BN_CLICKED(IDC_BUTTONce, OnBUTTONce)</p><p>  ON_BN_CLICKED(IDC_BUTTONbackspace, OnBUTTONbackspace)</p><p>  ON_BN_CLICKED(IDC_BUTTONsin, OnBUTTONsin)&l

67、t;/p><p>  ON_BN_CLICKED(IDC_BUTTONasin, OnBUTTONasin)</p><p>  ON_BN_CLICKED(IDC_BUTTONcos, OnBUTTONcos)</p><p>  ON_BN_CLICKED(IDC_BUTTONacos, OnBUTTONacos)</p><p>  ON_

68、BN_CLICKED(IDC_BUTTONtan, OnBUTTONtan)</p><p>  ON_BN_CLICKED(IDC_BUTTONatan, OnBUTTONatan)</p><p>  ON_BN_CLICKED(IDC_BUTTONcot, OnBUTTONcot)</p><p>  ON_BN_CLICKED(IDC_BUTTONacot,

69、 OnBUTTONacot)</p><p>  ON_BN_CLICKED(IDC_BUTTONsqr, OnBUTTONsqr)</p><p>  ON_BN_CLICKED(IDC_BUTTONabs, OnBUTTONabs)</p><p>  ON_BN_CLICKED(IDC_RADIO1, OnRadio1)</p><p>

70、;  ON_BN_CLICKED(IDC_RADIO2, OnRadio2)</p><p>  ON_BN_CLICKED(IDC_RADIO3, OnRadio3)</p><p>  ON_BN_CLICKED(IDC_RADIO4, OnRadio4)</p><p>  ON_BN_CLICKED(IDC_RADIO5, OnRadio5)</p&g

71、t;<p>  ON_BN_CLICKED(IDC_RADIO6, OnRadio6)</p><p>  ON_BN_CLICKED(IDC_BUTTONcle, OnBUTTONcle)</p><p>  ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)</p><p>  //}}AFX_MSG_MAP</p&

72、gt;<p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CCalculatorDlg message handlers</p><p>  BOOL CC

73、alculatorDlg::OnInitDialog()</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system menu.</p><p>  //

74、IDM_ABOUTBOX must be in the system command range.</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu =

75、 GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p

76、><p>  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,

77、 strAboutMenu);</p><p><b>  }</b></p><p><b>  }</b></p><p>  // Set the icon for this dialog. The framework does this automatically</p><p>  //

78、 when the application's main window is not a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  // TODO: Ad

79、d extra initialization here</p><p>  CheckRadioButton(IDC_RADIO3,IDC_RADIO6,IDC_RADIO5);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>

80、;  }</b></p><p>  void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)</p><p><b>  {</b></p><p>  if ((nID & 0xFFF0) == IDM_ABOUTBOX)</p><p>

81、;<b>  {</b></p><p>  CAboutDlg dlgAbout;</p><p>  dlgAbout.DoModal();</p><p><b>  }</b></p><p><b>  else</b></p><p><

82、;b>  {</b></p><p>  CDialog::OnSysCommand(nID, lParam);</p><p><b>  }</b></p><p><b>  }</b></p><p>  // If you add a minimize button to

83、 your dialog, you will need the code below</p><p>  // to draw the icon. For MFC applications using the document/view model,</p><p>  // this is automatically done for you by the framework.&l

84、t;/p><p>  void CCalculatorDlg::OnPaint() </p><p><b>  {</b></p><p>  if (IsIconic())</p><p><b>  {</b></p><p>  CPaintDC dc(this); //

85、 device context for painting</p><p>  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</p><p>  // Center icon in client rectangle</p><p>  int cxIcon = GetSystemMetrics

86、(SM_CXICON);</p><p>  int cyIcon = GetSystemMetrics(SM_CYICON);</p><p>  CRect rect;</p><p>  GetClientRect(&rect);</p><p>  int x = (rect.Width() - cxIcon + 1) / 2

87、;</p><p>  int y = (rect.Height() - cyIcon + 1) / 2;</p><p>  // Draw the icon</p><p>  dc.DrawIcon(x, y, m_hIcon);</p><p><b>  }</b></p><p>&l

88、t;b>  else</b></p><p><b>  {</b></p><p>  CDialog::OnPaint();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //

89、The system calls this to obtain the cursor to display while the user drags</p><p>  // the minimized window.</p><p>  HCURSOR CCalculatorDlg::OnQueryDragIcon()</p><p><b>  {&

90、lt;/b></p><p>  return (HCURSOR) m_hIcon;</p><p><b>  }</b></p><p>  //以下為表達(dá)式求值算法</p><p>  #include "math.h"</p><p>  int tag2=10;

91、</p><p>  bool tag1=0;</p><p>  int IsNumber(char c)</p><p>  { //數(shù)字判斷</p><p>  if(c>='0'&&c<='9'||c>='A'&&c<='

92、;F')return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p>  int IsOperator(char c)</p><p>  { //操作符判斷</p><p>  if(c=='+'||c=

93、='-'||c=='*'||c=='/'||c=='^')return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p>  char Precede(char x,char y)</p><p>

94、;  { //優(yōu)先級判斷</p><p>  if(x=='('&&y==')')return '=';</p><p>  else if(x=='('||y=='(')return '<';</p><p>  else if(x>=&

95、#39;a'&&x<='t')return '>';</p><p>  else if(y>='a'&&x<='t')return '<';</p><p>  else if(x=='^'||y=='+'|

96、|y=='-'||y==')')return '>';</p><p>  else if((x=='*'||x=='/')&&y!='^')return '>';</p><p>  else return '<';</p

97、><p><b>  }</b></p><p>  double Operate2(double a,double b,char theta)</p><p>  { //二目運(yùn)算</p><p>  double result;</p><p>  switch(theta)</p>

98、;<p>  { case '+' :result=a+b;break;</p><p>  case '-' :result=a-b;break;</p><p>  case '*' :result=a*b;break;</p><p>  case '/' :</p&

99、gt;<p>  if(b==0){result=0;break;}</p><p>  else {result=a/b;break;}</p><p>  case '^' :</p><p>  if(a==0&&b<=0){result=0;break;}</p><p>  els

100、e {result=pow(a,b);break;}</p><p>  default :result=0;</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></p><p>  double

101、Operate1(double a,char theta)</p><p>  { //函數(shù)運(yùn)算</p><p>  double result;</p><p>  switch(theta)</p><p><b>  {</b></p><p>  case 'i' :i

102、f(tag1)a=a/57.295779513;result=sin(a);break;</p><p>  case 's' :if(a>=-1&&a<=1){result=asin(a);if(tag1)result*=57.295779513;}</p><p>  else result=0;break;</p><p

103、>  case 'o' :if(tag1)a=a/57.295779513;result=cos(a);break;</p><p>  case 'c' :if(a>=-1&&a<=1){result=acos(a);if(tag1)result*=57.295779513;}</p><p>  else result=

104、0;break;</p><p>  case 'a' :if(tag1)a=a/57.295779513;result=tan(a);break;</p><p>  case 't' :result=atan(a);if(tag1)result*=57.295779513;break;</p><p>  case 'p&

105、#39; :if(tag1)a=a/57.295779513;result=1/tan(a);break;</p><p>  case 'd' :result=atan(1/a);if(tag1)result*=57.295779513;break;</p><p>  case 'q' :result=sqrt(a);break;</p>

106、<p>  case 'b' :result=fabs(a);break;</p><p>  default :result=0;</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></

107、p><p>  CString evaluate(CString exp)</p><p>  { //表達(dá)式求值主函數(shù)</p><p>  CString t,f;</p><p>  char optr[40]={0};</p><p>  char expression[80],theta,temp,c;<

108、/p><p>  double opnd[40]={0};</p><p>  int i=0,optr_i=0,opnd_i=0,j,zpart,k;</p><p>  double operand,weight,a,b,xpart; </p><p>  strcpy(expression,exp);</p>&

109、lt;p>  expression[exp.GetLength()]='\0';</p><p>  while(expression[i]!='\0'||optr_i!=0)</p><p>  { operand=0;</p><p>  weight=(double)tag2;</p><p>

110、  if(IsNumber(expression[i]))</p><p>  { while(IsNumber(expression[i]))</p><p>  { if(expression[i]>='A'&&expression[i]<='F')</p><p>  expression[

111、i]-=7;</p><p>  operand=operand*weight+(int)expression[i]-48;</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  if(expression[i]=='.')<

112、/p><p><b>  { i++;</b></p><p>  while(IsNumber(expression[i]))</p><p>  { if(expression[i]>='A'&&expression[i]<='F')expression[i]-=7;<

113、;/p><p>  operand=operand+((int)expression[i]-48)/weight;</p><p>  weight*=tag2;</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b&g

114、t;  }</b></p><p>  opnd[opnd_i++]=operand;</p><p><b>  }</b></p><p>  else if(expression[i]=='-'&&IsNumber(expression[i+1])&&(i==0||express

115、ion[i-1]=='('))</p><p><b>  { i++;</b></p><p>  while(IsNumber(expression[i]))</p><p>  { operand=operand*weight+(int)expression[i]-48;</p><p>

116、;<b>  i++;</b></p><p><b>  }</b></p><p>  if(expression[i]=='.')</p><p><b>  { i++;</b></p><p>  while(IsNumber(expressio

117、n[i]))</p><p>  { operand=operand+((int)expression[i]-48)/weight;</p><p>  weight*=tag2;</p><p><b>  i++;</b></p><p><b>  }</b></p>&l

118、t;p><b>  }</b></p><p>  opnd[opnd_i++]=0-operand;</p><p><b>  }</b></p><p>  else if(optr_i==0)</p><p>  { f.Format("%c%c%c%c"

119、;,expression[i],expression[i+1],expression[i+2],expression[i+3]);</p><p>  if(f=="sin("){optr[optr_i++]='i';optr[optr_i++]='(';i=i+4;}</p><p>  else if(f=="asin&qu

120、ot;){optr[optr_i++]='s';optr[optr_i++]='(';i=i+5;}</p><p>  else if(f=="cos("){optr[optr_i++]='o';optr[optr_i++]='(';i=i+4;}</p><p>  else if(f=="a

121、cos"){optr[optr_i++]='c';optr[optr_i++]='(';i=i+5;}</p><p>  else if(f=="tan("){optr[optr_i++]='a';optr[optr_i++]='(';i=i+4;}</p><p>  else if(f==&

122、quot;atan"){optr[optr_i++]='t';optr[optr_i++]='(';i=i+5;}</p><p>  else if(f=="cot("){optr[optr_i++]='p';optr[optr_i++]='(';i=i+4;}</p><p>  else i

123、f(f=="acot"){optr[optr_i++]='d';optr[optr_i++]='(';i=i+5;}</p><p>  else if(f=="sqr("){optr[optr_i++]='q';optr[optr_i++]='(';i=i+4;}</p><p>  

124、else if(f=="abs("){optr[optr_i++]='b';optr[optr_i++]='(';i=i+4;}</p><p><b>  else </b></p><p><b>  {</b></p><p>  optr[optr_i++]=ex

125、pression[i];</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(expression[i]=='\0')</p><p

126、>  { theta=optr[--optr_i];</p><p>  if(theta>='a'&&theta<='t')</p><p>  { a=opnd[--opnd_i];</p><p>  opnd[opnd_i++]=Operate1(a,theta);</p&g

127、t;<p><b>  }</b></p><p>  else { b=opnd[--opnd_i];</p><p>  a=opnd[--opnd_i];</p><p>  opnd[opnd_i++]=Operate2(a,b,theta);</p><p><b>  }<

128、/b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  f.Format("%c%c%c%c",expression[i],expression[i+1],expression[i+2],expression[i+3]);</p&g

129、t;<p>  if(f=="sin("){temp='i';j=3;}</p><p>  else if(f=="asin"){temp='s';j=4;}</p><p>  else if(f=="cos("){temp='o';j=3;}</p>

130、<p>  else if(f=="acos"){temp='c';j=4;}</p><p>  else if(f=="tan("){temp='a';j=3;}</p><p>  else if(f=="atan"){temp='t';j=4;}</p>

131、;<p>  else if(f=="cot("){temp='p';j=3;}</p><p>  else if(f=="acot"){temp='d';j=4;}</p><p>  else if(f=="sqr("){temp='q';j=3;}</p&

132、gt;<p>  else if(f=="abs("){temp='b';j=3;}</p><p>  else {temp=expression[i];j=1;}</p><p>  switch(Precede(optr[optr_i-1],temp))</p><p><b>  {</b&g

133、t;</p><p>  case '<' :</p><p>  optr[optr_i++]=temp;</p><p><b>  i+=j;</b></p><p><b>  break;</b></p><p>  case '=&#

134、39; :</p><p><b>  --optr_i;</b></p><p><b>  i++;</b></p><p><b>  break;</b></p><p>  case '>' :</p><p>  the

135、ta=optr[--optr_i];</p><p>  if(theta>='a'&&theta<='t')</p><p><b>  {</b></p><p>  a=opnd[--opnd_i];</p><p>  opnd[opnd_i++]=Op

136、erate1(a,theta);</p><p><b>  }</b></p><p>  else{ b=opnd[--opnd_i];</p><p>  a=opnd[--opnd_i];</p><p>  opnd[opnd_i++]=Operate2(a,b,theta);</p><

137、p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

溫馨提示

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

評論

0/150

提交評論