代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
递归实现:表达式计算器(运算顺序处理)
作者:
DDT
/ 发布于
2012/5/26
/
823
递归实现:表达式计算器(运算顺序处理) 程序运行流程: 1、读取用户输入的表达式 2、使用zuan函数将char数组转存于int数组中, 数字:翻译成int型存入,这里得注意某些数字可能不止一位,对应着多个char型 运算符号:保存成一个特殊的int型 3、进行计算,jie函数依次扫描括号、乘方、乘法、加减符号 如果是括号,那么就把括号中的内容提取出来,递归调用jie函数
#include <stdio.h> #include <math.h></div> <div>int newshi[20],shizi[50];</div> <div>void zuan(char *input) { int wei_char=0,wei_int=0; for(;input[wei_char]!='\0';) { if(input[wei_char]=='+') shizi[wei_int]=-'+'; else if(input[wei_char]=='-') shizi[wei_int]=-'-'; else if(input[wei_char]=='*') shizi[wei_int]=-'*'; else if(input[wei_char]=='/') shizi[wei_int]=-'/'; else if(input[wei_char]=='(') shizi[wei_int]=-'('; else if(input[wei_char]==')') shizi[wei_int]=-')'; else if(input[wei_char]=='^') shizi[wei_int]=-'^'; else //num { int weisu=1,su=0; for(;input[wei_char+1]>='0'&&input[wei_char+1]<='9';wei_char++) weisu++; for(int i=1;i<=weisu;i++) su+=(input[wei_char-i+1]-'0')*pow(10,i-1); shizi[wei_int]=su; } wei_int++; wei_char++; } shizi[wei_int]=-1; //shizi end. } <div>void print(int *shizi) //translate int[] { printf("\n"); for(int i=0;shizi[i]!=-1;i++) { if(shizi[i]==NULL) continue; else if(shizi[i]==-'('||shizi[i]==-')'||shizi[i]==-'+'||shizi[i]==-'-'||shizi[i]==-'*'||shizi[i]==-'^') printf("%c",-shizi[i]); else { //if(shizi[i]>=0) printf("%d",shizi[i]); //else //printf("(%d)",shizi[i]); } } } <div>int jie(int *shizi) { for(int i=0;shizi[i]!=-1;i++) if(shizi[i]==-'(') //jie:() { int n,wei_you,num_zuo=1; for(wei_you=i+1;1;wei_you++) { if(shizi[wei_you]==-'(') num_zuo++; else if(shizi[wei_you]==-')') { if(num_zuo==1) break; else num_zuo--; } } for(n=1;i+n!=wei_you;n++) newshi[n-1]=shizi[i+n]; newshi[n-1]=-1; int da=jie(newshi); shizi[i]=da; for(n=1;i+n!=wei_you+1;n++) shizi[i+n]=NULL; } for(int i=0;shizi[i]!=-1;i++) if(shizi[i]==-'^') //jie:^ { int qian,hou; for(qian=1;shizi[i-qian]==NULL;qian++) ; for(hou=1;shizi[i+hou]==NULL;hou++) ; shizi[i]=pow(shizi[i-qian],shizi[i+hou]); shizi[i-qian]=NULL; shizi[i+hou]=NULL; } for(int i=0;shizi[i]!=-1;i++) if(shizi[i]==-'*') //jie:* { int qian,hou; for(qian=1;shizi[i-qian]==NULL;qian++) ; for(hou=1;shizi[i+hou]==NULL;hou++) ; shizi[i]=shizi[i-qian]*shizi[i+hou]; shizi[i-qian]=NULL; shizi[i+hou]=NULL; } for(int i=0;shizi[i]!=-1;i++) { if(shizi[i]==-'+') //jie:+ { int qian,hou; for(qian=1;shizi[i-qian]==NULL;qian++) ; for(hou=1;shizi[i+hou]==NULL;hou++) ; shizi[i]=shizi[i-qian]+shizi[i+hou]; shizi[i-qian]=NULL; shizi[i+hou]=NULL; } else if(shizi[i]==-'-') //jie:- { int qian,hou; for(qian=1;shizi[i-qian]==NULL;qian++) ; for(hou=1;shizi[i+hou]==NULL;hou++) ; shizi[i]=shizi[i-qian]-shizi[i+hou]; shizi[i-qian]=NULL; shizi[i+hou]=NULL; } } for(int i=0;shizi[i]!=-1;i++) //find out if(shizi[i]!=NULL) return shizi[i]; } <div>main() { printf("程序来自胡中元,欢迎使用!\n\n这个计算器支持多层括号,\n以及加+、减-、乘*、乘方^四种运算符\n\n举例:32-(3-(65-4*10)*2)^3程序会自动识别运算顺序并算出答案!"); char input[50]; while(1) { printf("\n\n==============================================\n请输入你的表达式:\n"); gets(input); zuan(input);</div> <div>printf("\n原式= %d",jie(shizi)); } }
试试其它关键字
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
DDT
贡献的其它代码
(
160
)
.
Oracle统计表的数据行和数据块信息
.
html标签闭合检测与修复
.
Powershell日期计算
.
Powershell的Base64编解码
.
Powershell并行循环
.
Powershell目录中搜索文本
.
Powershell枚举远程机器上的本地权限组
.
VBScript解析csv文件
.
快速排序之Powershell
.
批处理输出格式化时间字符串
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3