学习!!!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
程序代码:#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;
}