題目:輸入乙個無符號的一位整數的四則運算表示式,輸出其結果。例如輸入:1+3*6-2,則輸出:17
分析:因為不涉及到括號,只是簡單的四則運算,我的想法是如果有乘除法先計算,沒有的話就按照加減法從左到右的順序進行計算。在開始的時候,首先檢查是否有乘除法運算子,有的話就取出前後兩個運算元進行計算,將結果儲存起來。沒有的話就將加減運算子先存起來。
主要過程:
1、輸入的是乙個四則運算的表示式,在計算機中按照字串的形式儲存。資料和運算子需要分開處理。
2、引入乙個整型的陣列,其大小為字串長度加一,加一是為了方便整型陣列判斷結束。
3、對表示式字串迴圈進行字元判斷,如果是數字,則將陣列存入引入的整型陣列,如果不是則分兩種情況:(1)是乘法或者是除法運算子,那就將整型陣列中當前的最新資料取出,將表示式字串當前位置的下乙個位置的數字取出,進行乘法計算,將計算所得的存放到整型陣列當前位置。(即覆蓋掉第乙個運算元的位置)。(2)是加法或者是減法,分陣列和運算子分別存入到整型陣列中。
4、第3步完成以後,整型陣列中存放的只是關於加減法運算的表示式。此時就可以從到右進行運算。取出操作符,通過操作符的位置取出兩個運算元,保證每次計算後的結果存放到整型陣列的第乙個位置處。整個計算結果後,整型陣列第乙個位置是最終的計算結果。
完整的c語言程式如下所示:
1 #include 2 #include程式測試結果如下:3 #include 4
#define len 100 //
假設表示式的最大長度為1005//
計算表示式的函式宣告
6int caculate(char*exp);
7int
main()817
//釋放記憶體空間
18free(expression);
19return0;
20}21int caculate(char*exp)
2248
else
4955 p++;56}
57//
此時只做加減法,每次將計算的結果儲存在datas的第乙個位置處
58for( ptemp=datas;ptemp!=pnext;++ptemp)
5972}73
//最終的計算結果儲存在datas的第乙個位置
74 result = *datas;
75//
釋放記憶體空間
76free(datas);
77return
result;
78 }

C語言位操作 判斷整數的符號
關於衡量計算操作的方法 當為演算法統計操作的數量的時候,所有的c運算子被認為是一樣的操作。中間過程不被寫入隨機儲存器 ram 而不被計算,當然,這種運算元的計算方法,只是作為那些接近機器指令和cpu執行時間的服務。所有的操作被假設成花相同的執行時間,事實上是不正確的。有很多不同的因素決定乙個系統能多...
C語言 輸出乙個整數的每一位。
此題的解決思路為 使用函式的遞迴呼叫來實現。例如 我們要列印1234的每一位,我們可以將此問題化小,定義乙個print函式。第一步在print函式裡列印123 4,第二步列印12 3 4,第三步列印1 2 3 4,不斷的遞迴呼叫,直到這個數不在大於9。並且利用if函式判斷,若大於9則將1234除以1...
(C語言)順序逆序輸出整數的每一位並列印整數字數
問題描述 輸入乙個整數,順序逆序輸出輸出整數的每一位,並輸出整數的位數。實現 本 用的都是最基本的c語言知識,適合初學者 includeint main 讓輸入的數先模10,再整除10,同時記錄位數,如123 一次迴圈後模10輸出個位3,除以10得到12,count 1 二次迴圈後模10輸出十位2,...