重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
创新互联自2013年创立以来,先为拜城等服务建站,拜城等地企业,进行企业商务咨询服务。为拜城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
#inlcudestdlib.h
void main()
{
char str[20][201],*p0,*p1;
int t,i,s,f,loop;
scanf("%d",t); if ( t20 ) t=20;
for ( i=0;it;i++ ) scanf("%s",str[i]);
for ( i=0;it;i++ )
{ p0=p1=str[i]; s=0; f=1; loop=1;
while ( loop )
{ while ( (*p1)='0' (*p1)='9' ) p1++;
s+=(f*atoi(p0));
switch ( (*p1) )
{ case 0: loop=0; break;
case '+': f=1; break;
case '-': f=(-1); break;
default: loop=0; break;
}
p1++; p0=p1;
}
printf("\nCase %d:\n",i+1);
printf("%s=%d\n",str[i],s);
}
}
#includestdio.h
#includestdlib.h
#define MaxSize 99
void translate(char str[],char exp[]) /*将算术表达式转换成后缀表达式*/
{
struct
{
char data[MaxSize];
int top; /*top为栈顶*/
}op; /*定义一个含data和top的结构体*/
char ch;
int i = 0,t = 0;
op.top = -1;
ch = str[i]; /*将str的每一个数转换成ch*/
i++;
while(ch != '\0') /*ch对应不同的符号的时候对应的转换情况*/
{
switch(ch)
{
case '(': /*当是(的时候,将此括号存入栈op*/
op.top++;op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '(') /*括号内的转换优先级最高,故先提取表达式*/
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case '+':
case '-':
while(op.top != -1op.data[op.top] != '(')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++; /*恢复可插入位置*/
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '/'||op.top == '*') /*优先级*/
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case ' ': /*忽略空格,排除误操作*/
break;
default:
while(ch = '0'ch = '9')
{
exp[t] = ch;t++;
ch = str[i];i++;
}
i--;
exp[t] = '#'; /*分隔操作数,为了美观,也为了以后好分隔操作数,呵呵*/
t++;
}
ch = str[i];
i++;
}
while(op.top != -1) /*得到剩下的部分*/
{
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0'; /*表达式结束*/
}
float cal_value(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st; /*操作数栈*/
float d;
char ch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;
while(ch != '\0')
{
switch(ch) /*运算主体*/
{
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{
printf("\n\t除0是错误的");
}
st.top--;
break;
default:
d=0;
while(ch = '0'ch = '9') /*从后缀表达式中获取操作数,#作用在此体现*/
{
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
return st.data[st.top];
}
int main() /*可以提到前面去*/
{
char str[MaxSize],exp[MaxSize]; /*str为算术表达式,exps为后缀表达式*/
printf("请输入一个求值表达式\n");
printf("表达式:");
gets(str); /*输入一个算术表达式*/
printf("原表达式是:%s\n",str);
translate(str,exp); /*将算术表达式转换成后追表达式*/
printf("后缀表达式:%s\n",exp);
printf("计算结果:%g\n",cal_value(exp));/*通过后缀表达式来求值*/
system("pause");
return 0;
}
此式即等同于 (4!=3)(2)(4+15)
1代表真,0代表非,则原式即 110 所以值为0。
例如:
-12/5 = -2 只为这个是整数运算,结果只取整数部分。
62 1*(6+7) + 7 *(6+1) = 13 +49 62
3.2 *(6+7+1) = 44.8
扩展资料:
一个表达式的赋值和算符的定义以及数值的定义域是有关联的。
两个表达式若被说是等值的,表示对于自由变量任意的定值,两个表达式都会有相同的输出,即它们代表同一个函数。
一个表达式必须是合式的。亦即,其每个算符都必须有正确的输入数量,在正确的地方。如表达式2+3便是合式的;而表达式*2+则不是合式的,至少不是算术的一般标记方式。
表达式和其赋值曾在20世纪30年代由阿隆佐·邱奇和Stephen Kleene在其λ演算中被公式化。λ演算对现代数学和电脑编程语言的发展都曾有过重大的影响。
参考资料来源:百度百科-表达式