計算器軟件設計和計算機軟件設計區別,求一個模擬計算器程序

# include

# include

# include

# include

# define MAX_OPERATOR_NUM 100//運算符棧數組長度

# define MAX_DATA_NUM 100//運算數棧數組長度

typedef struct OPStack//定義運算符棧

{

char opStack[MAX_OPERATOR_NUM];

int top;

}OPStack, *pOPStack;

typedef struct DATAStack//定義操作數棧

{

double stack[MAX_DATA_NUM];

int top;

}DATAStack, *pDATAStack;

void InitpOPStack(pOPStack &pOStack)//初始化運算符棧

{

if( !(pOStack = (pOPStack)malloc(sizeof(OPStack))))//為運算符棧分配空間

{

printf("分配內存空間失敗!\n");

exit(-1);

}

pOStack->top = -1;

}

void InitpDATAStack(pDATAStack &pDStack)//初始化運算數棧

{

if( !(pDStack = (pDATAStack)malloc(sizeof(DATAStack))))//為運算數棧分配空間

{

printf("分配內存空間失敗!\n");

exit(-1);

}

pDStack->top = -1;

}

void PushOPStack(pOPStack &pOStack, char ch)//運算符進棧

{

pOStack->opStack[++(pOStack->top)] = ch;

}

void PopOPStack(pOPStack &pOStack, char &ch)//運算符出棧

{

ch = pOStack->opStack[pOStack->top];

pOStack->top--;

}

void PushDATAStack(pDATAStack &pDStack, double d)//運算數進棧

{

++(pDStack->top);

pDStack->stack[pDStack->top] = d;

}

void PopDATAStack(pDATAStack &pDStack, double &d)//運算數出棧

{

d = pDStack->stack[pDStack->top];

pDStack->top--;

}

void ClearpOPStack(pOPStack &pOStack)//清空運算符棧

{

pOStack->top = -1;

}

void ClearpDATAStack(pDATAStack &pDStack)//清空運算數棧

{

pDStack->top = -1;

}

char GetToppOPStack(pOPStack &pOStack)//獲取運算符棧頂元素

{

return pOStack->opStack[pOStack->top];

}

double GetToppDATAStack(pDATAStack &pDStack)//獲取運算數棧頂元素

{

return pDStack->stack[pDStack->top];

}

bool IsOP(char &ch)//區分 運算符 和 運算數 的函數,是運算符時返回true,否則返回false

{//判斷是否為符號

if ( (ch == '+') || (ch == '-') || (ch == '*') || (ch == '/') || (ch == '=') || (ch == 'A') || (ch == 'S') || (ch == 'a') || (ch == 's') || (ch == '(') || (ch == ')') )

return true;

else

return false;

}

char Precede(char op1, char op2) //參考《數據結構》(C語言版)第53頁 3。

2。5表達式求值 表 3。1

{

char tab[9][10];//定義字符串的二維數組來存放運算符優先級的關系

strcpy( tab[0], ">>" );

strcpy( tab[1], ">>" );

strcpy( tab[2], ">>>><>" );

strcpy( tab[3], ">>>><>" );

strcpy( tab[4], ">>>E>>>>" );

strcpy( tab[6], ">>>><>>>>" );

strcpy( tab[7], ">>>><>>>>" );

strcpy( tab[8], "= 0)//判斷被開方數是否為0,若為0,退出程序

{

s = sqrt(b);//調用SQRT()函數

break;

}

else

{

printf("\n#### 求負數的平方根是非法運算。

程序終止! ####\n");

exit_E();//打印結束菜單

exit(-1);

}

}

return s;

}

char ChangeChar(char &c)//通過ChangeChar函數來把a、s的小寫字母改為大寫的

{

if( c == 'a' )

c = 'A';

else if( c == 's' )

c = 'S';

return c;

}

//參考《數據結構》(C語言版)第53頁 3。

2。5表達式求值 算法3。4EvaluateExpression()函數

void EvaluateExpression()//計算函數:讀入表達式,并計算結果

{

pOPStack pOStack;//聲明運算符棧

pDATAStack pDStack;//聲明運算數棧

double result;//存運算的結果

char x, theta, c;//c存放讀取的字符,x、theta存放運算符棧的棧頂元素

int flag, data;//標識符,用來讀入連續的數字

double s;

double getd;//存放GetTop***的結果

double a, b, cc;//a,b存放數據棧出棧的棧頂元素, c存放運算結果

flag = 0;//初始化標識符,用來判斷字符串中的連續數字

data = 0;//

InitpOPStack(pOStack);//初始化運算符棧

InitpDATAStack(pDStack);//初始化運算數棧

PushOPStack(pOStack, '=');//在運算符棧底放入'='

printf("&請輸入表達式以'='結束:");

c = getchar();//讀入字符

ChangeChar(c);//通過調用函數來實現把小寫的a、s改為大寫的A、S

while( c != '=' || GetToppOPStack(pOStack) != '=')

{

if( !IsOP(c) )//不是運算符進棧

{

s = c - '0';//把字符轉化為數字

if ( flag == 1 )

{

PopDATAStack(pDStack, getd);

s = getd*10 + s;

}

PushDATAStack(pDStack, s);

flag = 1;

c = getchar();

ChangeChar(c);

}

else

{

flag = 0;

switch( Precede(GetToppOPStack(pOStack), c) )//輸入元素和運算符棧頂元素比較

{

case ''://退棧并將運算結果進棧

PopOPStack(pOStack, theta);

PopDATAStack(pDStack, b);

PopDATAStack(pDStack, a);

cc = Operate(a, theta, b);

PushDATAStack(pDStack, cc);

break;

}//switch

}//else

}//while

result = GetToppDATAStack(pDStack);//運算結束時,運算數棧的棧底元素就是計算結果

ClearpOPStack(pOStack);//清空運算符棧

ClearpDATAStack(pDStack);//清空運算數棧

printf("->計算結果為:%。

2f\n\n", result);//輸出運算結果

return ;

}

void print_user()//歡迎界面

{

printf("\n歡迎使用C語言版模擬計算器\n\n");

printf("************************************************************************\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|模擬計算器使用說明|\n\n");

printf("| 作者:謝先斌|\n\n");

printf("|本程序包括對'+'、'-'、'*'、'/'、'()'的運算|\n");

printf("|本程序中ABS()算用A()替代、SQRT()運算用S()代替|\n");

printf("|本程序中的一切字母均不區分大小寫|\n");

printf("正確的表達式如:1+A(7-8)+S(9*8)=\n");

printf("|輸入'='表示表達式輸入結束!!|\n\n");

printf("| 歡迎使用!!!-->--> |\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("************************************************************************\n\n");

}

int main()//主函數

{

char in;

bool b;//標識符,用來標識是否結束程序

b = true;//初始化,不結束

print_user();//打印歡迎界面

printf("*請確認使用計算器Y/N:");

while(1)

{

scanf("%c", &in);//確認是否繼續操作

getchar();//吃掉會車,避免干擾

switch(in)

{

case 'Y':

case 'y':

{

EvaluateExpression();//進入計算函數:讀入表達式,并計算結果

break;

}

case 'N':

case 'n':

{

exit_E();

b = false;

break;

}

//default:

//printf("**輸入錯誤,請重新輸入Y/N:");

//break;

}

if(b==false)//如果 b==false ,退出整個程序

break;

printf("*您確定要繼續使用計算機Y/N:");

getchar();//用getchar吃掉回車,避免對后續輸入中in的干擾

}

return 0;

}

全部

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中print語句

學習鏈接1 學習鏈接2 1. 如果print語句后面什么符號都沒有是個換行語句&#xff0c;也就是是要另起一行。 2. 分號表示下次輸出是緊挨著這個光標位置輸出. 3. 而逗號是下次輸出與這次輸出有一定的空格之后接著輸出. namekk salutationMr. greetingHello, print greeting,sa…

計算機應用基礎論壇貼子怎么發,網絡課程論壇中長尾現象的應對策略——以《計算機應用基礎》網絡課程為例...

摘要&#xff1a;進入21世紀以來,互聯網就備受關注.由于我國信息設施資源建設穩步推進,互聯網的基礎更為堅實,發展更為迅速.據權威數據統計,中國至2009年約擁有130萬個BBS論壇,數量為全球第一,然而,作為分享和參與類應用的典型代表(更新博客,發帖/回帖)的使用率仍然偏低.筆者在…

解析Json需要設置Mime

IIS6.0 1.打開IIS添加Mime項 關聯擴展名&#xff1a;*.json內容類型(MIME)&#xff1a;application/x-javascript 2.添加映射&#xff1a; 位置在IIS對應站點右鍵屬性&#xff1a;”主目錄”-”應用程序設置”-”配置”-”映射”-”添加”&#xff0c;會打開”添加/編輯應用程序…

Using the Transient Fault Handling Application Block

http://msdn.microsoft.com/en-us/library/dn440719(vpandp.60).aspx轉載于:https://www.cnblogs.com/fengye87626/p/3772555.html

讓python腳本像普通程序一樣運行

有些時候像運行其他程序一樣運行python程序&#xff08;也叫做腳本&#xff09;&#xff0c;而不是顯式使用python解釋器。在UNIX中有個標準的實現方法&#xff1a;在腳本首行前面加上#&#xff01;&#xff08;叫做pound bang或者shebang&#xff09;&#xff0c;在其后加上用…

Function類型(JS高程3)—— JS學習筆記2015-6-29(第70天)

Function 類型 函數是對象 具有屬性和方法&#xff0c;函數名實際上是一個指向函數對象的指針 沒有重載&#xff1b; 函數聲明和函數表達式 函數聲明&#xff1a; function sum (num1, num2){ return num1 num2; } 函數表達式&#xff1a; var sum function(num1, num2){ ret…

PS圖片刪除需要計算機管理權限,如何使用PsTools工具執行本地/遠程PC管理任務

大多數剛入門的管理員都習慣使用 RDP 或其它類似的工具連接到遠程 Windows 中進行圖形化管理。而 PowerShell 及 PsTools 等工具可以幫助我們在命令行中執行相當多的管理任務&#xff0c;更主要的是可以將其寫成腳本來執行周期性重復任務或在管理大批量服務器時提高效率。在企業…

LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 打印螺旋矩陣 逐個環…

TCP為什么需要三次握手和四次揮手

網上已經有很多解釋了&#xff0c;就不瞎說了&#xff0c;Mark一些鏈接作為自己的學習筆記吧。 學習參考鏈接1 學習參考鏈接2 學習參考鏈接3 學習參考鏈接4 為什么要3次握手 防止已過期的連接請求報文突然又傳送到服務器&#xff0c;因而產生錯誤。 Client發生一個請求連…

不屬于個人計算機范圍的是,計算機應用基礎模擬試卷2

一、1.單項選擇題單項選擇題每小題1分。在每小題列出的四個備選項中只有一個是符合題目要求的&#xff0c;請將其選出并將“答題卡”的相應代碼涂黑。未涂、錯涂或多涂均無分。0. 個人計算機屬于A&#xff0e;小巨型機B&#xff0e;小型計算機C&#xff0e;微型計算機D&#xf…

Python實驗:關燈游戲

文章目錄 前言一、設計表二、關鍵代碼三、運行結果小地圖&#xff0c;容易難度&#xff1a;中地圖&#xff0c;中等難度&#xff1a;大地圖&#xff0c;困難難度&#xff1a; 四、完整代碼鏈接總結 前言 這是一個Python實驗作業&#xff0c;內容如下&#xff1a; 題目要求&am…

解決Ubuntu14.04在外接顯示器不能指定問題的最佳分辨率

通常這種情況發生。在System Settings -> display 你會發現多出了一個 unknown display。這往往是因為你使用質量低劣的視頻電纜&#xff0c;例如&#xff0c;幾美元VGA線。解決方案有&#xff12;&#xff0c;質量好的一個改變鋼帶&#xff08;有磁場干擾&#xff09;VGA線…

基礎練習 - 數值交換

題目 1 聲明兩個變量&#xff1a;int n1 10,n2 20,要求將兩個變量叫喚&#xff0c;最后輸出n1為20,n2為10. (擴展*: 不使用第三個變量如何交換) 解決方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python計算圓的面積

用Python創建一個腳本&#xff0c;要求&#xff1a; 能計算半徑為2的圓的面積保留10位小數可以直接執行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))計算圓的面積要用到pi&#xff0c;所以我們引用模塊math

Visual Studio 配色方案

字體&#xff1a;Fixedsys Excelsior 字體大小&#xff1a;12 配色方案&#xff1a;http://studiostyles.info 導入步驟&#xff1a; 工具->導入和導出設置->導入選定的環境設置->否&#xff0c;僅導入新設置->“瀏覽”->下載的vssetings文件->完成。 轉載于…

昆明學院計算機專業在哪個校區,昆明學院有幾個校區及校區地址

昆明學院有幾個校區及校區地址2017-06-19 11:15:56文/韓競儀最近有很多考生和家長咨詢小編&#xff0c;昆明學院有幾個校區&#xff0c;今年新生會被分配到哪個校區?哪個校區好?等相關問題&#xff0c;下面小編統一回復一下考生們的問題。昆明學院有3個校區&#xff0c;分別是…

python列表總結

列表方法append()&#xff1a;在列表末尾添加元素列表方法insert()&#xff1a;在列表任意位置插入元素&#xff0c;a.insert(0,1)&#xff0c;在列表的0號位置插入元素1.列表方法count(s)&#xff1a;返回s在列表中出現的次數列表方法remove(s)&#xff1a;移除列表中的第一個…

Swift基本語法

Swift基本語法 原文:Swift基本語法Swift基本語法 簡介 1.什么是Swift Swift是蘋果于2014年WWDC&#xff08;蘋果開發者大會&#xff09;發布的全新編程語言 Swift在天朝譯為“雨燕” 跟Objective-C一樣&#xff0c;可以用于開發iOS、Mac應用程序 蘋果從2010年7月開始設計Swift語…

2018華工計算機應用基礎作業,計算機應用基礎平時作業2019

計算機應用基礎平時作業2019Tag內容描述&#xff1a;1、1.簡述啟動控制面板的常用方法。(至少列出三種) 答&#xff1a;常用打開控制面板的方法&#xff1a;1)點開始&#xff0c;選擇控制面板打開&#xff1b;2)打開我的電腦&#xff0c;選擇控制面板&#xff1b;3)點開始運行&…

計算機系統組織結構,第4章 操作系統計算機組織結構.ppt

第4章 操作系統計算機組織結構第4章 計算機組織結構 前言 操作系統提供了抽象以簡化對硬件的使用&#xff0c;單線程是馮?諾依曼計算機的操作抽象&#xff0c;如果理解了一個馮?諾依曼計算機是如何執行程序的&#xff0c;就能理解進程背后的知識&#xff0c;對操作系統的深入…