天天看點

課程作業六

課程作業六

題目描述

  • 本次作業要求将四則運算的核心部分采取棧的知識進行解決。即表達式生成的合法性檢驗、表達式結果計算。
  • 學習C++界面程式設計,可以學QT、MFC或者VS,選擇其一即可,用部落格記錄學習到的知識以及心得體會。

作業要求

  • 本次作業要求實作核心算法,請将表達式生成的代碼及相關的檢驗、計算表達式結果的代碼貼在部落格中,并對代碼進行必要的解釋。
  • 發表一篇部落格,部落格内容為:提供本次作業的github連結,本次程式運作的截圖,對界面程式設計的探索。

對于前幾點要求,我在設計電腦的時候就用棧進行了實作。下面是我的思路和代碼連結。

  • 出題的思路

先由最基本的兩個數運算開始,設定兩個string變量number1,number2來存儲随機數,一個string變量operator來存儲随機運算符。由随機生成函數随機生成兩個數字和一個随機運算符,比如生成了“a”,“b”和“+”。那麼就組合成了“a+b”,在進行随機判斷是否添加括号。如果判斷為true那麼算式就變成了“(a+b)”。把這個新生成的算式指派給number1.在如此循環,用number1和新的number2,operator結合。獲得新的算式之後指派給number1。如此下去将最後的number1+‘=’,就得到了随機題目。

  • 計算的思路

用3個變量,分别記錄操作數1,操作數2和運算符。一個循環從左向右讀取字元。當讀到第一個操作符時,意味着操作數1已經讀取完畢,記錄下讀到的這個操作符,設定往後讀的是操作數2的内容。當讀到第二個操作符時,意味着操作數2已經讀取完畢,這時滿足了之前運算符的計算條件:已經有了操作數1,運算符,操作符2。進行計算,并且把計算的結果賦予操作數1變量。從此後,操作數1變量就永遠隻是存放計算結果了,隻有操作數2是從表達式中讀取的,不斷循環反複,最終計算出表達式的值。

  • 先定義運算符比較優先級:
  • 加減比較時,左邊的運算符優先級高。
  •   乘除比較時,左邊的運算符優先級高。
  •   乘除優先級高于加減。
  •   “(“左括号的優先級高于乘除,是最高優先級的運算符。
  •   “)”右括号的優先級低于加減,是最低優先級的運算符。
  •   “(”和“)”優先級相等。相等的含義是,括号被消除。

代碼實作

程式實作截圖

課程作業六

C++界面程式設計

因為QT沒有釋出QTforVS2017,是以我選擇了MFC界面程式設計,

部落格學習連結

看了部落格教學之後對四則運算器添加一個能看得過去的界面。

課程作業六

貼上代碼

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	srand(time(0));
	UpdateData();
	for (int i = 0; i < 50; i++)
	{
		pr[i] = '\0';
	}
	msuanshi = " ";
	creatmachine cr;
	problem = cr.generateExpression();
	for (int i = 0; i < problem.length(); i++)
	{
		pr[i] = problem[i];
	}
	msuanshi += pr;
	UpdateData(FALSE);
}

void CMFCApplication1Dlg::OnBnClickedButton2()
{
	UpdateData();
	calculator cr;
	mresult = cr.calculateResult(problem);
	if (manswer == mresult)
	{
		cright++;
	}
	else
	{
		cwrong++;
	}
	UpdateData(FALSE);
}
           

遇到的問題

  • 建立MFC項目的時候找不到MFC選項。

原因是VS2017沒有安裝與MFC相關的元件。

課程作業六
  • 建立mfc應用程式的時候,出現 “無法找到資源編譯器dll,請確定路徑正确”。

解決方法

  • 最最最最最需要注意的就是要在你的頭檔案中加上
#include“stdafx.h”
           

而且必須要加在第一個!!!否則會報錯。

本次作業心得

  • 通過兩張程式實作圖的對比,就可以看出來,有了界面的程式,更加直覺和友善使用(終于能寫出一個能給别人用的程式了)雖然學習了很久,但是能寫出這個四則運算器還是很開心。
  • 同時也要感謝周政演同學的幫助!在學習終于到問題,一點點的解決,不懂的和同學一起讨論,享受解決問題的快樂。
  • 雖然對MFC程式設計隻是粗淺的了解,但是在今後的部落格作業中,我會對界面進行美化。
  • 在對按鈕函數進行程式設計時,發現沒有主函數的存在。每個按鈕都是一個獨立的函數,通過互相的聯系輸出算式并顯示結果,也展現了面向對象的思想。