我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 21:37:01
我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)

我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)
我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)

我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)
/*在TC2 和 VC6下都可以顺利运行.
做了一个下午.一定要用我这个噢.
有简单的输入错误检测.有完整的说明和
注释*/
#include /*库文件包含*/
#include /*用于字符串操作*/
#include /*用于exit函数*/
//
double good(char *c) /*可递归函数*/
{ /*取得数值字符串,并调用convnum转换成double*/
char g[100],number[30]; /*g,保存当前的表达式串,number保存一个数的所有字符*/
char f[80]; /*保存所有的符号的堆栈*/
int fi=0; /*保存符号的位置指针*/
double s[80]; /*保存当前所有的数的一个堆栈*/
int si=0; /*保存数字位置指针*/
int k=0; /* 若k=1则表示有一对括号*/
int num=0,i=0; /*num保存新括号内的字符数,i 保存number里的字符位置*/
int cc=0; /*乘除符号数量*/
int jj=0; /*加减符号数量*/
while(*c!='\0')/*当p==1 和k==0时,表示已经把括号里的内容全部复制到g[100]中了*/
{
k=0;
num=0;
switch(*c)
{
case '+':/*当前字符为+-乘除时则表示*/
case '-':
case '*':
case'/':
f[fi++]=*c;
if(*c=='*' || *c=='/')
cc++;
else
jj++;
if(*(c-1)!=')')
{
number[i]='\0';
i=0;/*完成一个数字的复制,其位置指针i=0*/
s[si++]=convnum(number);
}
break;
case'(':/*有括号,则将当前括号作用范围内的全部字符保存,作为*/
k++; /*一个新的字符表达式进行递归调用good函数计算.*/
while(k>0)
{
c++;
g[num]=*c;
num++;
if(*c==')')
{
k--;
}
else if(*c=='(')
{
k++;
}
}
g[num-1]='\0';
num=0;/*完成一个括号内容的复制,其位置指针num=0*/
s[si++]=good(g);
break;
default:
number[i++]=*c;
if(*(c+1)=='\0')
{ number[i]='\0';
s[si++]=convnum(number);
}
break;
}
c++;
}
f[fi]='\0';
i=0;
while(cc>0)
{
switch(f[i])
{
case '*':cc--;
s[i+1]=s[i]*s[i+1];
move(f,s,i);
break;
case '/':cc--;
s[i+1]=s[i]/(float)s[i+1];
move(f,s,i);
break;
default:
i++;
break;
}
}
i=0;
while(jj>0)
{
switch(f[i])
{
case '+':s[i+1]=s[i]+s[i+1];
jj--;
move(f,s,i);
break;
case '-':s[i+1]=s[i]-s[i+1];
jj--;
move(f,s,i);
break;
default:
printf("operator error!");
break;
}
}
return s[0];
}
void main()
{
char str[100];
double sum=0;
int p=1;
while(1)
{
printf("enter expression:enter 'exit' end of program\n");
scanf("%s",str);
p=strcmp(str,"exit");
if(p==0)
break;
p=check(str);
if(p==0)
continue;
sum=good(str);
printf("%s=%f",str,sum);
printf("\n");
}
printf("good bye!\n");
}
例:
enter expression:enter 'exit' end of program
3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6(输入)
3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6=384.266667
enter expression:enter 'exit' end of program
china(输入)
input error,there have the char not the math expression char!
enter expression:enter 'exit' end of program
exit(输入)
good bye!

我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识) 算术表达式求值 高手,求助!问题描述:设计一个程序,演示用栈实现算术表达式求值的过程 基本要求: (1)以字符形式输入语法正确,不含变量的常规实数表达式; (2)判断表达式是否合法 C语言表达式求值程序和程序注释 用C语言数据结构算法编写程序!算术表达式求值:以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,并演示 算术表达式求值算法?用C语言版 编写一个表达式求值演算的 算法程序 要求:使用栈,需要将算法的过程显示出来 ,输入一连串算术值 如:2*(3+2)# 然后 显示出算术过程 和结果!先将输入的 算术表达式求值 C语言算术表达式求值(1)用户可通过键盘输入四则运算的表达式(2)判断表达式是否正确(3)对正确的表达式,计算该表达式的值 算术表达式求值 【问题描述】 表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子.设计一个程序,演示符优先法对算术表达式求值的过程【基本要求】以字符序列 求一程序:用C语言编写,要求如下:实验内容:(1) 判断一个算术表达式中开括号和闭括号是否配对.(2) 假设算术表达式仅由加减乘除运算符组成,编写一个函数对用后缀表达式表示的算 试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.功能要求及说明:(1) 任意输入一个算术表达式;(2) 利用栈,判断表达式中出现的 我用C语言编了一个程序,从键盘输入一个表达式,经过运算,会在屏幕上输出结果 怎么给这个程序做一个最简我现在就要做一个这样的程序, 编写一个程序实现求解任意算术表达式的值 C语言表达式的计算练习掌握算术表达式、逗号表达式、赋值表达式的计算练习 关于算术表达式求值问题如何判断一个算术表达式是否合法 只考虑加减乘除括号给个思路 用栈的知识和算符优先法对算术表达式求值一、实验目的:熟练掌握栈的基本操作,进一步理解栈的应用.二、实验内容:设计一个程序,用算符优先法对算术表达式求值.三、基本要求:以字符 算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为整数,运算符只包括+,-,*,/,可包含小括号();(2)计算算术 C语言的表达式求值该怎么写?用后缀写,目前学了数据结构只会写压栈出栈遍历,怎么才能用栈写一个表达式求值的代码?还希望给一个代码参考下要求如下:•1、能进行+、-、*、/四则运算&# c#算术表达式 求值 C语言 从键盘输入一个简单的数学表达式,计算并显示该表达式的值 求算法和程序