// main.c
// 計算器
// created by qianfeng on 14-7-15.
//iphone自帶計算器不夠好,由於你技術出眾,你被安排去開發一款ios新式計算器。
/*專案經理認為計算器第一版要支援表示式求值,所以要求如下:
輸入任意表示式 求出他的值(支援負數,不支援小數)
這裡支援6種表示式
()優先順序最高, * /優先順序其次 + -優先順序最低
比如輸入任意表示式:
(100+2)*2
輸出在比如:
輸入任意表示式:
(-100-2)*(10-2)/(100-22)
輸出-10
不考慮除法小數的情況.
#include
#include
#include
int weishu(int c);
void yiwei( int *a, int b, int c);
void chyiwei(char *a,int b,int c);
int arr[100]={};
char ch[100] , *p , *p1 ,*p3 ,*p4 = null , *p5 =null;
int k = 0,k1 = 0, k2 = 1;
fgets(buff, 256, stdin);
unsigned long bu_len = strlen(buff)-1;
buff[bu_len] = '\0';
int i , j ;
for ( i = 0 ; i < bu_len; i ++) else if (buff[i] == ')')
ch[k1] =')';
k1 ++;
else if ( buff[i] == 43)
ch[k1] = 43;
k1 ++;
else if (buff[i] == 45)
if ( i != 0)
ch[k1]=45;
k1 ++;
}else//接受在陣列裡邊
int count = 0;
for ( i = 0; k1 >0;)
p4 = strstr( ch, "(");
p3 = strstr(ch,")");
if ( p4 || p5 == p4 )//此迴圈是 判斷括號內是否是計算完成,當沒完成的時候繼續完成。
if ( p4 == p5)
p = strstr(p4, "*");
p1 = strstr(p4, "/");//判斷是否有乘法和除法
if (p < p3 || p1 < p3 )
if (p || p1)//查詢乘法和除法
if (p1 && p)
if ((p1 - p )>0 && p i = (int)(p -ch);
else if ((p1-p)<0 && p1 i = (int)(p1 - ch);
else if (p1)//不能為null
i = (int)(p1 - ch );
else if (p){
i = (int)(p - ch);//不能為null
else
i = (int)(p4-ch+1);//沒有* /從括號出開始從左向右計算
else///沒有乘除除的情況
i = (int)(p4-ch+1);//從括號後邊開始
else if (p4)//判斷是否是前半個括號
p5 = p4;
i = (int)(p4 - ch);
//k2 =3;
else//沒有括號的情況下查詢 乘法和除法
p = strstr(ch, "*");
p1 = strstr(ch, "/");//判斷是否有乘法和除法
if (p || p1)
if (p1 && p)
if ((p1 - p )>0)
i = (int)(p -ch);
else if ((p1-p)<0)
i = (int)(p1 - ch);
else if (p1)
i = (int)(p1 - ch);
else if (p){
i = (int)(p - ch);
else
i = 0;
k2 = 2;
if (ch[i] == '(' && count %2 == 0 )
count %= 2;
count ++;
i++;
k2 = 0;
else if ( ch[i] == '+')
arr[i-count] += arr[i - count+1];
yiwei(arr, i+1-count, k --);
chyiwei(ch, i, k1--);
if (count %2 == 1 && (ch[i-1] =='(' &&ch[i] == ')') )
k2 = 1;
chyiwei(ch, i - 1, k1--);
chyiwei(ch, i-1, k1--);
count = 0;
else if ( ch[i] == '-')
arr[i -count] -= arr[i-count+1];
yiwei(arr, i+1-count, k --);
chyiwei(ch, i, k1--);
if (count %2 == 1 && (ch[i-1] =='(' &&ch[i] == ')') )
k2 = 1;
chyiwei(ch, i - 1, k1--);
chyiwei(ch, i - 1, k1--);
count = 0;
else if ( ch[i] == '*')
arr[i -count] *= arr[i - count +1];
yiwei(arr, i+1-count, k --);
chyiwei(ch, i, k1--);
if (count %2 == 1 && (ch[i-1] =='(' &&ch[i] == ')') )
k2 = 1;
chyiwei(ch, i - 1, k1--);
chyiwei(ch, i - 1, k1--);
count = 0;
else if (ch[i] == '/')
arr[i -count] /= arr[i - count+1];
yiwei(arr, i+1-count, k --);//計算後將資料覆蓋
chyiwei(ch, i, k1--);//計算後將操作符覆蓋
if (count %2 == 1 && (ch[i-1] =='(' &&ch[i] == ')') )
k2 = 1;//若是括號,則刪除括號,操作符前移
chyiwei(ch, i - 1, k1--);
chyiwei(ch, i - 1, k1--);
count = 0;
else if ( ch[i] == ')')
count ++ ;//
i++;
//chyiwei(ch, i, k1--);
for ( j = 0; j < k ; j ++)
printf("%d\t",arr[j]);//shuchu 輸出 存的 資料
for ( j = 0; j < k1; j ++) {
printf("%c\t",ch[j]); //c操作字元的 輸出 要是成功的話字元為空
return 0;
c 語言簡單計算器原始碼
main.c 計算器 created by qianfeng on 14 7 15.iphone自帶計算器不夠好,由於你技術出眾,你被安排去開發一款ios新式計算器。專案經理認為計算器第一版要支援表示式求值,所以要求如下 輸入任意表示式 求出他的值 支援負數,不支援小數 這裡支援6種表示式 優先順序...
以計算器簡單應用的C語言函式呼叫原始碼
include include void tips 定義tips int jiafa int x,int y 宣告加法 intjianfa int x,int y 宣告減法 intchengfa int x,int y 宣告乘法 intchufa int x,int y 宣告除法 void real...
C語言 逆波蘭演算法實現計算器(原始碼)
三 逆波蘭演算法的c語言實現 概念 1.字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。如 3 4 5 6 2.中綴表示式就是常見的運算表示式,如 3 4 5 6 3.字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後。如 3 4 5 6 逆波蘭式的特點在於運算物件順序不...