题目 http://codevs.cn/problem/1015/
热身题,很直接的写法,直观易理解,代码结构可以自己整理一下
基本思想
一旦遇到运算符就一定将缓冲区的数据转储
一旦遇到等号,则正负号相反对待
一旦遇到字母,就认为当前缓冲区的数是一次项的系数
一次项和零次项系数分开存储
/* 作者:FUNCO_小风 题目:p1015 计算器的改良 */ #include<stdio.h> #include<string.h> int main() { // 系数 整数 负号标识 int coe=0, cnt=0, minus=0, i=0; char in=0,tmp=0,left=1, none=0; char s[100] = {0}; scanf("%s", s); for (i=0; i<strlen(s)+1; i++) { in = s[i]; if (in == '-') { if (minus) { cnt -= tmp; } else { cnt += tmp; } minus = left ? 1 : 0;tmp = 0; } else if (in == '+') { if (minus) { cnt -= tmp; } else { cnt += tmp; } minus = left ? 0 : 1;tmp = 0; } else if (in == '=' || in == 0) { if (minus) { cnt -= tmp; } else { cnt += tmp; } minus = 1; left = 0;tmp = 0; } else if (in>='0' && in<='9') { tmp = tmp*10+(in-'0'); } else if (in>='a' && in<='z') { if (minus) { coe -= tmp > 0 ? tmp : 1;tmp = 0; } else { coe += tmp > 0 ? tmp : 1;tmp = 0; } none = in; } if (in == 0) { break; } } printf("%c=%.3f\n", none, (-1.0*cnt)/coe); return 0; }