学习!!!
善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
#include <stdio.h> main() { static float sum; float x; char k; scanf("%f",&sum); while(520) { scanf("%c",&k); if(k=='\n') break; scanf("%f",&x); switch(k) { case '+': sum+=x;break; case '-': sum-=x;break; case '*': sum*=x;break; case '/': sum/=x;break; } } printf("%.6f\n",sum); }
# include<stdio.h> # include<string.h> # include<ctype.h> # include<stdlib.h> # include<math.h> int main(void) { //变量名取得挺无奈的,大家就将就一下 char i[256]; char j[30]; char o = 0; unsigned int a = 0; unsigned int b = 0; size_t c = 0; unsigned int d = 0; double m = 0.0; double n = 0.0; printf("请输入计算:\n"); while(strcmp(fgets(i, 256, stdin), "quit\n") != 0) //如果输入quit则退出计算 { c = strlen(i); i[--c] = '\0'; //覆盖换行符 for(b = 0, a = 0; a <= c; a++) if(*(i + a) != ' ') *(i + b++) = *(i + a); //去掉空格并将字符存回本身 c = strlen(i); //重新计算字符长度 a = 0; if(i[a] == '=') //检查开头是不是=号,如果是,就把上次的结果当作左操作数 a++; else { d = 0; if(i[a] == '+' || i[a] == '-') *(j + d++) = *(i + a++); //把正负号都复制到j for( ; isdigit(*(i + a)); a++) *(j + d++) = *(i + a); //把正负号后面的数字复制到j if(*(i + a) == '.') //有小数刚把小数点和后面的数字都复制到j { *(j + d++) = *(i + a++); for( ; isdigit(*(i + a)); a++) *(j + d++) = *(i + a); } *(j + d) = '\0'; //复制完第一个操作数的字符串 if(d > 0) m = atof(j); //把第一个操作数转换成double类型 } for(; a < c; ) { o = *(i + a++); //运算符都存在o里面 d = 0; if(i[a] == '+' || i[a] == '-') //上面的是左操作数,这是右操作数,同上一样 *(j + d++) = *(i + a++); for( ; isdigit(*(i + a)); a++) *(j + d++) = *(i + a); if(*(i + a) == '.') *(j + d++) = *(i + a++); for( ; isdigit(*(i + a)); a++) *(j + d++) = *(i + a); *(j + d) = '\0'; //复制完第二个操作数的字符串 n = atof(j); //转换成double类型 switch(o) { case '+': m = m + n; break; case '-': m = m - n; break; case '*': m = m*n; break; case '/': if(n == 0) printf("除数不能为0!\n"); else m = m/n; break; case '%': if(n == 0) printf("除数不能为0!\n"); else m =(double)((long)m % (long)n); break; case '^': m = pow(m, n); break; default: printf("你输入错误!\n"); break; } } printf("= %f\n", m); } return 0; }