c 語言簡單計算器原始碼

2021-07-03 19:46:39 字數 3813 閱讀 7877

//  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 逆波蘭式的特點在於運算物件順序不...