输入一个由两个数据和一个算术运算符组成的表达式 根据运算符完成相应的运算,并将结果输出。

如题所述

第1个回答  2010-11-11
#include <stdio.h>
#include <math.h>
enum state
{BEGIN = 0, P1,P2,P3,P4,P5,P6, P7,P8,END,ERROR};
int ctoi( char c){return c - '1' + 1;}
bool isNum( char a){return a >= '0'&& a <= '9';}
bool isOp(char op)
{
switch(op)
{
case '+':
return true;
break;
case '-':
return true;
break;
case '*':
return true;
break;
case '/':
return true;
break;
default:
return false;
break;
}
}
bool isDot(char dot){return dot == '.';}
int checkString( char str[], double *a, double * b, char* op, int num)
{
enum state s = BEGIN;
int a_i = 0;
int b_i = 0;

double num1 = 0;
double num2 = 0;
int pointNum = 0;
for( int i = 0; i < num; ++i)
{
if(str[i] == ' ')continue;
switch(s)
{
case BEGIN:
if(isNum(str[i]))
{num1 = num1 * 10 + ctoi(str[i]);s = P2;}
elses = ERROR;
break;
case P2:
if(isNum(str[i]))
{num1 = num1 * 10 + ctoi(str[i]);s = P2;}
else if(isDot(str[i]))
{
s = P3;
}
else if(isOp(str[i]))
{
*op = str[i];
s = P5;
}
else
s = ERROR;
break;
case P3:
if(isNum(str[i]))
{
num1 = num1 + ctoi(str[i]) * pow(0.1, ++pointNum) ;
s = P4;
}
else
s = ERROR;
break;
case P4:
if(isNum(str[i]))
{
num1 = num1 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P4;
}
else if(isOp(str[i]))
{
*op = str[i];
s = P5;
}
else
s = ERROR;
break;
case P5:
if(isNum(str[i]))
{
num2 = num2 * 10 + ctoi(str[i]);
s = P6;
}
else
s = ERROR;
break;
case P6:
pointNum = 0;
if(isNum(str[i]))
{
num2 = num2 * 10 + ctoi(str[i]);
s = P6;
}
else if(isDot(str[i]))
{
s = P7;
}
else
s = END;
break;
case P7:
if(isNum(str[i]))
{
num2 = num2 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P8;
}
else
s = END;
break;
case 8:
if(isNum(str[i]))
{
num2 = num2 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P8;
}
else if(isOp(str[i]))
{
s = END;
}
else
s = END;
break;
case ERROR:
printf("express error. \n");
break;
}
if (s == END || s == ERROR)
break;
}
if(s==END){*a = num1;*b = num2;return 0;}
else {return -1;}
}
int main()
{
char op;
double a;
double b;

char string[128] = {0};
scanf("%s", &string);
printf("the expression you input is : %s. \n", string);
getchar();

if (-1 == checkString(string, &a, &b, &op, 128))
{
printf("error occur while checking expression. Be sure no space in your expression when input\n");
getchar();
return 0;
}

double result;
switch(op)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if(b != 0)
result = a / b;
else
{
printf(" error! %d/%d", a, b);
return -1;
}
break;
default:
printf("undefined expression.\n");
break;
}

printf("%f %c %f = %f\n", a, op, b, result);
return 0;
}本回答被提问者采纳

...*)组成的表达式,根据运算符完成相应的运算,并将结果输出。_百度知 ...
}

输入两个数值(均不为零)及一个算术运算符,输出其运算的结果(保留两位小 ...
'\/':s:=a\/b;writeln(s:0:2);end.

...分别输入两个整数和一个算术运算符,输出运算结果
代码根据你题意,输入2个整数,再输入一个运算符号(+–*\/),输出运算结果。输入有验证,必须输入数字和运算符。num1=None num2=None while(True):print("---")while(True):try:num1=int(input("请输入第一个数:"))except:print("必须是数字!重新输入")pass if type(num1)==int:break ...

C语言,在键盘输入一个算术的运算式子,输出运算结果。包括加减乘数乘方...
键盘输入一个算术的运算式子,输出运算结果。这里规定可以接收五个算术运算的符号:+、-、*、\/、^(乘方)。输入这五个符号以外的运算符号则提醒出错。 请将变量定义为double类型 本程序需要从键盘接收一个表达式,根据表达式中的运算符号实现相应的运... 展开 匿名 2018-10-11 | 浏览12 次 C语言编程语言数学 ...

...及一个运算符(op),计算表达式data1 op data2的值
int main(){ char op;double data1,data2,r;printf("请输入算术式如3*15\\n");scanf("%lf%c%lf",&data1,&op,&data2);switch(op){ case '+':r=data1+data2;break;case '-':r=data1-data2;break;case '*':r=data1*data2;break;case '\/':r=data1\/data2;break;} printf("...

(C++) 输入一个由数字、+、-、*、\/及括号组成的自述表达式,求其值。
char Pop_ch(SqStack_ch &S,char &e){ \/* 若栈不空,则删除运算符栈S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR *\/ if(S.top==S.base)return ERROR;e=*--S.top;return e;} ...calculator.cpp...include"stack.h" \/\/自己定义的栈的头文件 include <stdio.h> \/\/getchar(...

输入一个算术表达式,可以实现求两个整数的加、减、乘、整除和取余运算...
printf("输入运算公式(形如 1+2 )");scanf("%d%c%d",&a,&c,&b);switch(c){ case '+':printf("%d+%d=%d\\n",a,b,a+b);break;case '-':printf("%d-%d=%d\\n",a,b,a-b);break;case '*':printf("%d*%d=%d\\n",a,b,a*b);break;case '\/':{ if ( b == 0 ){...

如何用C语言输入两个整数并求余数?
t=a%b; \/\/最核心的就是这一步,求余数。printf("%d",t);return(0);这样输出的t就是余数了。C语言中的运算符:1 算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(\/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算符 用于比较运算。包括大于(>)...

2018年3月计算机二级考试JAVA入门知识点:运算符和表达式
运算符指明对操作数所进行的运算。按操作数的数目来分,可以有一元运算符(如++、--),二元运算符(如+、>)和三元运算符(如?:),它们分别对应于一个、两个和三个操作数。对于一元运算符来说,可以有前缀表达式(如++i)和后缀表达式(如i++),对于二元运算符来说则采用中缀表达式(如a+b)。按照运算符功能来分,基...

计算机C语言必学知识(运算符和表达式)详解以及示例代码
表达式是由运算符和操作数组成,分为多种类型。赋值表达式用于将一个值赋给变量,如`int a = 5;`。算术表达式执行算术运算,如`int b = a + 3;`。关系表达式用于比较两个值,形式如`if (a > b) {...}`。逻辑表达式执行逻辑操作,如`if (a && b) {...}`。条件表达式根据条件选择执行...

相似回答