首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

表達式求值科學計算器:支援混合進制、寬鬆語法與 16 位精度

     編輯:關於VC++

區別於常見計算器,本實現聚焦表達式解析引擎:16 位有效數字、容忍缺漏括號/隱式乘法 (如 cos23*sin34)、單一表達式內混合二/八/十/十六進制 (十六進制標識 xh、支援小數如 12d.3axh)、完善的歷史記錄與鍵鼠跟隨介面。

核心演算法:遞歸去括號 + 分層求值

CString CCalculation::MainPro(CString strExp) {
  if(strExp.IsEmpty()) return "表達式不能為空";
  Macro(&strExp); strExp.MakeLower();
  strExp.Insert(0,"("); strExp+=")"; // 保護括號
  // 括號平衡檢查、空格清理、進制轉十進制
  Oct2Dec(&strExp); Hex2Dec(&strExp); Bin2Dec(&strExp);
  while(!IsDigital(strExp)) {
    DelBracket(&strExp); // 找最內層括號對
    if(!SynRes(&strExp)) return strExp; // 語法/運算錯誤檢查
  }
  if(!SynRes(&strExp)) return strExp;
  return ModiResult(strExp); // 科學記數法格式化
}

關鍵點:

  • Macro 替換常數符號 (π, e 等)
  • 首尾加保護括號,將全局表達式統一為「去括號→求值」迴圈
  • DelBracket 由內而外、由左而右提取最內層括號內表達式
  • 括號內先算一元運算 (sin, cos, sqrt...),再算二元運算 (+, -, *, /, ^...)
  • SynRes 檢測 ERROR 標記 (除零、語法錯誤等)
  • 字串↔數值轉換用 strtod / _ecvt,輔以錯誤狀態控制

進制混合運算實現

Oct2Dec/Hex2Dec/Bin2Dec 掃描表達式,識別進制標識 (d 十進制、o 八進制、h/xh 十六進制、b 二進制),將數值部分轉為十進制字串回填,後續統一按十進制運算。

版本迭代修正

早期版本未妥善處理連續正負號 (1++++1, --+-+-+1),重寫 MultiE 解決;應網友建議新增結果向二/八/十六進制轉換輸出功能。

介面亮點

鍵盤/滑鼠雙模操作、視窗跟隨模式、計算歷史查看、科學記數法自動切換,細節打磨較充分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved