10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
#include #define TRUE 1
#define FALSE 0
#define LEN 10//输入数字不得超过10位
#define MAXSIZE 40//数字和运算符总个数不得超过40个
typedef struct
{
char data[MAXSIZE][LEN];//栈区为二维数组
int top;
}seqstack;
seqstack *initseqstack();
void push(seqstack *s, char *x);
char *pop(seqstack *s);
int optr(char *z);
int priority(char *a, char *b);
void process(char arrOne[][LEN], char arrTwo[][LEN]);
double calc(char *a, char *b, char *ch);
void express(char (*arrTwo)[LEN]);
seqstack *s = NULL;//声明全局变量
seqstack *initseqstack()//初始化栈顶指针
{
seqstack *s = (seqstack *) malloc (sizeof(seqstack));
s->top = -1;
return s;
}
void push(seqstack *s, char *x)//入栈
{
if (MAXSIZE-1 == s->top)
{
printf("overflow\n");
exit(0);
}
strcpy(s->data[++s->top], x);
}
char *pop(seqstack *s)//出栈
{
char *y = (char *) malloc (LEN * sizeof(char));
strcpy(y, s->data[s->top--]);
return y;
}
int optr(char *z)//判断是否为运算符,是返回TRUE
{
int i;
char *optr1[6] = {"+", "-", "*", "/", "(", ")"};
for (i=0; i<6; i++)
{
if (0 == strcmp(optr1[i], z))
{
return TRUE;
}
}
return FALSE;
}
int priority(char *a, char *b)//比较优先级
{
int i, j;
char *array[5] = {"(", "+", "-", "*", "/"};//优先级列表,由小到大
for (i=0; i<5; i++)
{
if (0 == strcmp(array[i], a))
{
break;
}
}
for (j=0; j<5; j++)
{
if (0 == strcmp(array[j], b))
{
break;
}
}
switch (i)
{
case 0: i = 0; break;
case 1:
case 2: i = 1; break;
case 3:
case 4: i = 2; break;
}
switch (j)
{
case 0: j = 0; break;
case 1:
case 2: j = 1; break;
case 3:
case 4: j = 2; break;
}
if (i >= j)
{
return TRUE;
}
else
{
return FALSE;
}
}
void process(char (*arrOne)[LEN], char (*arrTwo)[LEN])//将中缀式处理成后缀式(运算符入栈处理)
{
int i, j = 0;
s = initseqstack();//初始化
for (i=0; 0!=strcmp(arrOne[i], "\0"); i++)
{
if (1 < strlen(arrOne[i]) || (TRUE != optr(arrOne[i])))//arrOne[i][LEN]为数字时
{
strcpy(arrTwo[j++], arrOne[i]);//将数字拷贝到arrTwo
}
else if (0 == strcmp(arrOne[i], "("))
{
push(s, arrOne[i]);//入栈
}
else if (0 == strcmp(arrOne[i], ")"))
{
while ((-1 != s->top) && (0 != strcmp(s->data[s->top], "(")))
{
strcpy(arrTwo[j++], pop(s));//出栈
}
pop(s);//将"("弹出
}
else//此时arrOne的内容只可能是"+", "-", "*", "/"
{
if (-1 == s->top)
{
push(s, arrOne[i]);
}
else
{
while (-1 != s->top)
{
if (TRUE == priority(s->data[s->top], arrOne[i]))//与栈顶元素进行优先级比较
{
strcpy(arrTwo[j++], pop(s));
}
else
{
push(s, arrOne[i]);
break;
}
}
if (-1 == s->top)
{
push(s, arrOne[i]);
}
}
}
}
while (-1 != s->top)
{
strcpy(arrTwo[j++], pop(s));
}
}
double calc(char *a, char *b, char *ch)//运算,返回double类型
{
double num;
double numOne, numTwo;
numOne = atof(a);
numTwo = atof(b);//将字符串转化为double类型(atof是库函数)
switch(*ch)
{
case '+': num = numOne + numTwo; break;
case '-': num = numOne - numTwo; break;
case '*': num = numOne * numTwo; break;
case '/':
if ((0.000001 >= numTwo) && (-0.000001 <= numTwo))
{
printf("error!\n");
}
else
{
num = numOne / numTwo;
}
break;
default:
exit(0);
}
return num;
}
void express(char (*arrTwo)[LEN])//后缀式入栈运算
{
int i;
double num;
char result[LEN];
char numOne[LEN], numTwo[LEN];
s = initseqstack();//初始化
for (i=0; 0!=strcmp(arrTwo[i], "\0"); i++)
{
if (TRUE != optr(arrTwo[i]))//假如是数,则入栈
{
push(s, arrTwo[i]);
}
else
{
strcpy(numTwo, pop(s));
strcpy(numOne, pop(s));//将顶上两数字弹出
num = calc(numOne, numTwo, arrTwo[i]);//运算
gcvt(num, LEN, result);//将double转换成字符串(gcvt是库函数)
push(s, result);//入栈
}
}
printf(" %s\n\n", result);//输出最终结果
}
void Menu(void)
{
printf("注意:\n");
printf("1.本程序有一定误差,误差范围大约是-0.001到+0.001\n");
printf("2.本程序只能处理正确的表达形式.\n");
printf("3.避免计算结果越界.\n");
printf("4.输入方式:如输入表达式(-1+2)*3\n");
printf(" 输入:\n");
printf(" (空格-1空格+空格2空格)空格*空格3空格=回车\n");
}
void main(void)
{
int i = 0;
char arr[MAXSIZE][LEN]; //输入字符串
char arrOne[MAXSIZE][LEN] = { "\0" }; //保存中缀式
char arrTwo[MAXSIZE][LEN] = { "\0" }; //保存后缀式
Menu();
printf("\n\n\n请输入表达式:\n");
while (scanf("%s", arr[i]))
{
if (0 == strcmp(arr[i], "="))
{
break;
}
strcpy(arrOne[i], arr[i]);
i++;
}
process(arrOne, arrTwo); //调用
express(arrTwo); //调用
}
10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写相关推荐
- c语言中写出int变量x为奇数,求C语言好的同学
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.(单选题) 执行以下程序段后, x, y和z的值分别是___B___.(5分) int x=10,y=20,z=30; if(x>y) z=x; ...
- 数学狂想曲(三)——统计杂谈, PID算法, 20世纪10大算法, 矩阵向量的积
http://antkillerfarm.github.io/ 统计杂谈 统计模拟 统计模拟是数理统计中非常有用的工具之一, 它是利用计算机产生某概率模型的随机数,再通过这些随机数来模拟真实模型. 这 ...
- C语言 | 自由落地,求第10次落地共经过多少米
例57:一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹.C语言编程求它在第10次落地时,共经过多少米,第10次反弹多高. 解析:读者看着道题的时候应该很容易看懂,做这样的题 ...
- C语言编程>第二周 ⑥ 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
例题:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 代码如下: /*程序分析:利用for循环语句求解*/ #include& ...
- C语言 一个球从100米高度下落,每次下落反弹原来高度的一半,如此反复,求第10次落地时共经历了多少米?第10次反弹多高?
C语言 一个球从100米高度下落,每次下落反弹原来高度的一半,如此反复,求第10次落地时共经历了多少米?第10次反弹多高? 代码: #include <stdio.h> void main ...
- 10万字C语言入门手册,历时三个月,详细的C语言教程终于出炉了,给你全新C语言入门体验
C语言是一种非常流行的编程语言,它是许多现代编程语言的基础. 什么是计算机? 计算机是一种用于存储.处理.和输出数据的电子设备.它通过程序控制和数学算法来实现数据处理.计算机通过输入设备(如键盘.鼠标 ...
- c语言考试编程题万能公式,C语言程序设计历年统考试题集10套含答案(可编辑)
<C语言程序设计历年统考试题集10套含答案(可编辑)>由会员分享,可在线阅读,更多相关<C语言程序设计历年统考试题集10套含答案(可编辑)(39页珍藏版)>请在人人文库网上搜索 ...
- c语言程序中的算数表达式X Y-Z,C语言程序设计实验教程习题1~10.docx
C语言程序设计实验教程习题1~10 第一章一.选择题1.最早开发C语言是为了编写下面那一种操作系统( C) A .Windows B.DOS C.UNIX D.Linux2.下面哪一项不属于C语言的特 ...
- 8b 10b c语言编码,2012年计算机等级二级C语言章节习题及答案(10)
第10章 指针 同步练习二 一.选择题(在下列各题的A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上.)10.1b 下列关于指针变量赋空值的说法错误的是 A) ...
- 寻找最大公约数c语言,C语言程序设计100例之(10):最大公约数
例10 最大公约数 问题描述 有三个正整数a,b,c(0 输入数据 第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,b. 输出格式 输出对应的c,每组测试数据占 ...
最新文章
- Python3使用tkinter编写GUI程序
- java基础-泛型举例详解
- 1.6解不等式 1.6.1 平方根不等式
- 常用知识总结——模板Template
- Tomcat BIO . NIO . ARP 配置
- R语言-数据整形之简介
- python 读取excel表格的数据
- android textview 添加阴影效果:Paint.setShadowLayer is not supported
- 共阳极管的代码_《手把手教你学FPGA》第三章设计实例
- linux下ant安装和使用教程,ant安装与简单应用
- SQL编程题练习题(基础)
- 精确率、准确率、召回率、ROC、AUC的概念,计算方式和代码实现
- EasyOCR,识别图片中的文字真的so easy
- 初中数学知识点总结_初中数学知识点
- html点击出现对勾,css伪类右下角点击出现对号角标表示选中的代码
- Python金融学-风险中性测度
- 廊坊通岭计算机学校校长,计算机科学与技术S021-S024班校友荣归母校为母校捐赠文化石...
- route和bridge是什么意思_vue-router中router和route的区别
- 运营精益创业组织的柔术
- 计算机图形学研究背景及意义,虚拟现实技术研究背景目的意义与国内外现状.doc...
热门文章
- 教你如何用 Python 三行代码做动图!
- 长沙 · 中国1024程序员节盛况空前,500 万程序员线上线下引爆星城
- 入行 AI,如何选个脚踏实地的高薪岗位?
- 都在说 AI 与云计算融合,AI 在云中的作用真有那么大吗?
- 三大运营商将上线 5G 消息;苹果谷歌联手,追踪 30 亿用户;jQuery 3.5.0 发布 | 极客头条...
- 软件开发需要学好数学吗?
- 腾讯 Angel 升级:加入图算法,支持十亿节点、千亿边规模!
- 杭州趣链张帅:趣链拥有大厂都没有的优势
- 英特尔“宠坏”程序员!
- 漫画:如何给女朋友解释什么是“锟斤拷”?