c语言中ch的作用,C语言中IN(ch,OP)是什么意思
表达式求值,说起来很复杂,我有源代码,你自己研究研究
#include
#include
#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 != -1&&op.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;
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试
c语言中ch的作用,C语言中IN(ch,OP)是什么意思相关推荐
- c语言中 amp 的作用,c语言中“amp;amp;”什么意思
c语言中"&&"什么意思 在c语言中,"&&"是"与"."并且"的意思.它是逻辑运算符, ...
- C语言中fscanf的作用,C语言中fgets和fscanf区别详解
搜索热词 C语言中fgets和fscanf区别详解 一.作用上的大概区别: ①fgets:从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往 ...
- c语言中argc的作用,C语言中main函数的参数argc和argv
参考资料: C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* arg ...
- c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用
现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...
- c语言中fopen的作用,c语言中fopen的用法
在C语言中,fopen也是一个打开文件的函数.在C语言的命令窗口中输入doc fopen或者help fopen就可以获得该函数的帮助信息.下面小编就跟你们详细介绍下c语言中fopen的用法,希望对你 ...
- c语言中rand()的作用,c语言中的rand()函数用法
rand() rand()函数作用:用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的. rand()函数返回:返回一个范围在 ...
- c语言中exit函数作用,c语言中exit函数 c语言中exit与break区别
C语言中exit();怎么用? exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束. return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进 ...
- 在c语言中 auto的作用,c语言中auto是什么意思
说起auto相信很多人都不知道是什么意思,下面php中文网就带领大家学习一下c语言中auto是什么意思. auto是C语言的一个关键字,关键字主要用于声明变量的生存期为自动,即将不在任何类.结构.枚举 ...
- c语言中funx的作用,c语言中fun用法详解
C语言中fun用法详解 fun函数是自定义的C/C++语言函数,函数功能多样.该函数名为"函数"英文function的简写,一般在示例和试题中使用,通常在主函数中被调用. C/C+ ...
最新文章
- 力扣算法题—073矩阵置零
- [转载]Word直接发布新浪博客(以Word 2013为例)
- FTP同步的另类解决办法——NetDrive
- MATLAB图像取点操作
- 微信小程序_wxml学习
- python创建函数、可以接受任意多个整数参数并求和_pythonxlwt:求和函数最大参数限制?...
- 小米空调来了,意外的是还一起来了一个马桶盖
- 2015.5.21 Core Java Volume 1
- Linux Kettle 闪退问题解决方案
- 建立一个成功的OpenStack组
- qt执行linux sudo命令语句,linux命令_sudo
- PHP自动加载下——PSR4
- c++ Static理解
- 线性代数中一组基向量的标准正交化原理通熟易懂理解
- GD32库中常用的位操作REGIDX_BIT(regidx, bitpos)
- Android OTA releasekey 替换
- 动漫主题的聊天室(html+css+js)(聊天室下篇)
- 苹果手机Java在那_iPhone8描述文件在哪?iPhone描述文件不见了如何解决?
- AFPM100/B消防电源在南京基地模检具业务搬迁改造项目的应用
- compareTo的用法