你这个就是用c语言玩玩,
#include
#include
void main()
{
double a,b;//a是输出结果,b是临时输入数据
char x;//x是标点符号输入
scanf(%lf,&a);//先输入第一个数
while(1)//由于不知道运算式一共多长,所以用一个死循环不断读取
{
scanf("%c",&c);//输入运算符
if(x=='=')//'='特殊处理,输出结果
{
printf(”%c“,&a);
break;//退出循环,跳到return 0;
}
else//如果是运算符就输入下一个数
{
scanf(%lf,&b);/判断符号类型,并进行相应计算
switch(x)
{
case '+':a+=b;break;//每个case后面必须加break;否则将后面所有运算式全走一遍
case '-':a-=b;break;
case '*':a*=b;break;
case '/':a/=b;break;
}
}
}
return 0;
} 把第一个改成c语言的,,会么?
运行结果:
12
+
34
-5
=
41
思路:
保存最后一次的算符(lastOperator, +或-),保存上一次读入的数字(lastNumber)。
如果当前算符operator的优先级低(+或-), 更新数据(data = data +或- lastNumber)
如果当前算符operator的优先级高(*或/), 更新数字(lastNumber = lastNumber *或/ number).
当前表达式为:
data lastOperator(+或-) lastNumber operator(+,-,* 或/) number
C语言代码(不是C++代码,保存为.c编译):
#include
#include
void clearLine()
{
int ch;
while(((ch = getchar())!='\n')&&(ch != EOF));
}
double getNumber()
{
double f;
int n;
while((n = scanf("%lf", &f))!=1){
if(n == EOF) exit(1);
printf("请输入一个数\n");
clearLine();
}
clearLine();
return f;
}
char getOperator()
{
int c;
while((c = getchar())!=EOF){
clearLine();
switch(c){
case '+':
case '-':
case '*':
case '/':
case '=':
return c;
default:
printf("请输入+-*/\n");
break;
}
}
exit(1);
}
double calc(double data, char operator, double number)
{
switch(operator){
case '+':
data += number;
break;
case '-':
data -= number;
break;
case '=':
data += 0;
break;
default:
abort();
break;
}
return data;
}
int main()
{
int lastOperator = '+';
int operator = '+';
double lastNumber = 0;
double number = 0;
double data = 0;
/* data lastOperator(+-) lastNumber operator number ... */
while(1){
number = getNumber();
/* update lastOperator, lastNumber */
switch(operator){
case '+':
case '-':
data = calc(data, lastOperator, lastNumber);
lastOperator = operator;
lastNumber = number;
break;
case '*':
lastNumber *= number;
/* keep lastOperator */
break;
case '/':
lastNumber /= number;
/* keep lastOperator */
break;
default:
abort();
break;
}
operator = getOperator();
if(operator == '='){
switch(lastOperator){
case '+':
data += lastNumber;
break;
case '-':
data -= lastNumber;
break;
default:
abort();
}
printf("%.15g\n", data);
printf("输入回车退出\n");
getchar();
break;
}
}
return 0;
}