五则运算c语言程序,我写的一个五则计算器程序, 支持括号。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

case '/' : symbol[s_cnt++] = '/'; break;

case '%' : symbol[s_cnt++] = '%'; break;

case '(' : symbol[s_cnt++] = '('; sign = 1; break;

case ')' : symbol[s_cnt++] = ')'; sign = 0; break;

default : return -1; //既不是数字也不是符号那一定是错了, 尽可能快的停止

}

}

}

digit[n_cnt++] = sum;

digit[n_cnt] = symbol[s_cnt] = '\0';

return n_cnt;

}

/*

开始想的是处理一次如括号乘除等运算就将位置清零,

后来发现需要太多的分析语句并且分析括号后位置无法准确计算,

最终选择每处理一次就将剩余的重新存入数组

*/

int init_digit(double digit[], double dig[], int sz)

{

int i, cnt = 0;

for (i = 0; i < sz; ++i) {

if (digit[i] != '\0')

dig[cnt++] = digit[i];

digit[i] = '\0';

}

dig[cnt] = '\0';

return cnt;

}

int init_symbol(char symbol[], char sym[], int sz)

{

int i, cnt = 0;

for (i = 0; i < sz; ++i) {

if (symbol[i] != '\0')

sym[cnt++] = symbol[i];

symbol[i] = '\0';

}

sym[cnt] = '\0';

return cnt;

}

int process_pracket(double digit[], char symbol[], double dig[], char sym[], int s_sz, int sz)

{

int i, j;

for (i = 0; i < s_sz; ++i) {

if (symbol[i] == '(') {

for (j = i + 1; symbol[j] != ')'; ++j) {

switch(symbol[j]) {

case '*' : digit[j] = digit[j - 1] * digit[j];

digit[j - 1] = symbol[j] = '\0'; break;

case '/' : digit[j] = digit[j - 1] / digit[j];

digit[j - 1] = symbol[j] = '\0'; break;

case '%' : digit[j] = (int)digit[j - 1] % (int)digit[j];

digit[j - 1] = symbol[j] = '\0'; break;

}

}

sz = init_digit(digit, dig, sz);

s_sz = init_symbol(symbol, sym, s_sz);;

for (j = i + 1; sym[j] != ')'; ++j)

if (sym[j] == '+') {

dig[j] = dig[j - 1] + dig[j];

dig[j - 1] = sym[j] = '\0';

}

else if (sym[j] == '-') {

dig[j] = dig[j - 1] - dig[j];

dig[j - 1] = sym[j] = '\0';

}

sym[i] = sym[j] = '\0';

i = j - 1;

sz = init_digit(dig, digit, sz);

s_sz = init_symbol(sym, symbol, s_sz);

}

}

return sz;

}

double figure(double digit[], char symbol[], int n_sz)

{

int s_sz, i, j, cnt, sz, sign = 0;

double sum = 0.0, dig[SIZE] = {0};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值