C编程之计算器程序设计
来源:互联网 发布:淘宝客服培训资料大全 编辑:程序博客网 时间:2024/05/09 06:46
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
#define OK 0
#define ERROR -1
typedef int DATATYPE;
typedef struct
{
int data[STACK_SIZE]; // 栈数组
int top; // 栈顶下标
}SeqStack;
int InitStack (SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
s->top = -1;
return OK;
}
int lv(char a)//优先级判断
{
switch (a)
{
case '(':
{
return 3;
}
case '*':
{
return 2;
}
case '/':
{
return 2;
}
case '+':
{
return 1;
}
case '-':
{
return 1;
}
default:
{
return ERROR;
}
}
}
// 判断满栈
int StackFull(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
return s->top == STACK_SIZE-1;
}
// 判断空栈
int StackEmpty(SeqStack *s)
{
if (s == NULL)
{
return ERROR; // 错误返回-1
}
return s->top == -1; // 相等返回1 不相等返回0
}
// 压栈
int Push(SeqStack *s, int data)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否满栈
if (StackFull(s))
{
return ERROR;
}
/* s->top++;
s->data[s->top] = data; */
s->data[++s->top] = data;
return OK;
}
// 出栈
int Pop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
DATATYPE data = s->data[s->top--];
return data;
}
// 获取栈顶元素
int GetTop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
return s->data[s->top];;
}
int count1()//四则运算
{
SeqStack num; // 栈结构体变量
SeqStack opt;
if (InitStack(&num) != OK)
{
return -1;
}
if (InitStack(&opt) != OK)
{
return -1;
}
if ((InitStack(&num) && InitStack(&opt)) != OK)
{
return -1;
}
int i = 0;
int t = 0;
int m = 0;
char a[100];
printf("Input:\t");
scanf("%s",a);
if(a[i] == 'B')
{
return 0;
}
if(a[i] == 'A')
{
return 1;
}
while(!StackEmpty(&opt) || '\0' != a[i])//start
{
//a[i]为数字,进栈
if(a[i] >= '0' && a[i] <= '9')
{
t = t*10 + (int)(a[i++]-48);
if(a[i] < '0' || a[i] > '9')
{
Push(&num,t);
t = 0;
}
continue;
}
//a[i]为运算符
else
{
if('(' == GetTop(&opt) && ')' == a[i])
{
Pop(&opt);
i++;
continue;
}
if(StackEmpty(&opt) && '\0' != a[i] || '(' == GetTop(&opt) && a[i] != ')')
{
Push(&opt,(int)a[i++]);
continue;
}
if( ')' == a[i] || '\0' == a[i] || lv(a[i]) <= lv(GetTop(&opt)) )
{
switch(Pop(&opt))//出栈计算 再入栈
{
case '*':
{
Push(&num,Pop(&num)*Pop(&num));
break;
}
case '/':
{
m=Pop(&num);
Push(&num,Pop(&num)/m);
break;
}
case '+':
{
Push(&num,Pop(&num)+Pop(&num));
break;
}
case '-':
{
m = Pop(&num);
Push(&num,Pop(&num)-m);
break;
}
default:
{
break;
}
}
continue;
}
if(lv(a[i]) >= lv(GetTop(&opt)))
{
Push(&opt,(int)a[i++]);
continue;
}
}
}
printf("\t%s = %d\n",a,Pop(&num));
return 1;
}
int main()
{
int flag = 1;
while(flag)
{
printf("\n\tczh的计算器 \n");
printf("\t功能选择:\n");
printf("\t默认功能 四则运算器\n\t A.科学计算\n\t B.退出程序 \n");
flag = count1();
}
return 0;
}
#include <stdlib.h>
#define STACK_SIZE 100
#define OK 0
#define ERROR -1
typedef int DATATYPE;
typedef struct
{
int data[STACK_SIZE]; // 栈数组
int top; // 栈顶下标
}SeqStack;
int InitStack (SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
s->top = -1;
return OK;
}
int lv(char a)//优先级判断
{
switch (a)
{
case '(':
{
return 3;
}
case '*':
{
return 2;
}
case '/':
{
return 2;
}
case '+':
{
return 1;
}
case '-':
{
return 1;
}
default:
{
return ERROR;
}
}
}
// 判断满栈
int StackFull(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
return s->top == STACK_SIZE-1;
}
// 判断空栈
int StackEmpty(SeqStack *s)
{
if (s == NULL)
{
return ERROR; // 错误返回-1
}
return s->top == -1; // 相等返回1 不相等返回0
}
// 压栈
int Push(SeqStack *s, int data)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否满栈
if (StackFull(s))
{
return ERROR;
}
/* s->top++;
s->data[s->top] = data; */
s->data[++s->top] = data;
return OK;
}
// 出栈
int Pop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
DATATYPE data = s->data[s->top--];
return data;
}
// 获取栈顶元素
int GetTop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
return s->data[s->top];;
}
int count1()//四则运算
{
SeqStack num; // 栈结构体变量
SeqStack opt;
if (InitStack(&num) != OK)
{
return -1;
}
if (InitStack(&opt) != OK)
{
return -1;
}
if ((InitStack(&num) && InitStack(&opt)) != OK)
{
return -1;
}
int i = 0;
int t = 0;
int m = 0;
char a[100];
printf("Input:\t");
scanf("%s",a);
if(a[i] == 'B')
{
return 0;
}
if(a[i] == 'A')
{
return 1;
}
while(!StackEmpty(&opt) || '\0' != a[i])//start
{
//a[i]为数字,进栈
if(a[i] >= '0' && a[i] <= '9')
{
t = t*10 + (int)(a[i++]-48);
if(a[i] < '0' || a[i] > '9')
{
Push(&num,t);
t = 0;
}
continue;
}
//a[i]为运算符
else
{
if('(' == GetTop(&opt) && ')' == a[i])
{
Pop(&opt);
i++;
continue;
}
if(StackEmpty(&opt) && '\0' != a[i] || '(' == GetTop(&opt) && a[i] != ')')
{
Push(&opt,(int)a[i++]);
continue;
}
if( ')' == a[i] || '\0' == a[i] || lv(a[i]) <= lv(GetTop(&opt)) )
{
switch(Pop(&opt))//出栈计算 再入栈
{
case '*':
{
Push(&num,Pop(&num)*Pop(&num));
break;
}
case '/':
{
m=Pop(&num);
Push(&num,Pop(&num)/m);
break;
}
case '+':
{
Push(&num,Pop(&num)+Pop(&num));
break;
}
case '-':
{
m = Pop(&num);
Push(&num,Pop(&num)-m);
break;
}
default:
{
break;
}
}
continue;
}
if(lv(a[i]) >= lv(GetTop(&opt)))
{
Push(&opt,(int)a[i++]);
continue;
}
}
}
printf("\t%s = %d\n",a,Pop(&num));
return 1;
}
int main()
{
int flag = 1;
while(flag)
{
printf("\n\tczh的计算器 \n");
printf("\t功能选择:\n");
printf("\t默认功能 四则运算器\n\t A.科学计算\n\t B.退出程序 \n");
flag = count1();
}
return 0;
}
1 0
- C编程之计算器程序设计
- C语言简单程序设计,计算器的设计
- 《C语言及程序设计》实践参考——个税计算器之码数分离
- Python图形界面编程之计算器
- 《编程之道 -- C /C++程序设计入门》[ISO]下载地址!
- C语言之简单计算器
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之四书五经
- C程序设计之指针
- 急求一用C编程实现多功能计算器
- 简单到死的计算器C编程
- objective-C编程 程序设计摘要
- 《Java程序设计》第一次作业:简单的JAVA源代码之计算器
- (六)C#之WinForm程序设计-简单计算器
- Struts2编程练习之简易计算器
- 欢迎使用CSDN-markdown编辑器
- Debian系linux系统常用配置软件源
- 每日一结,MySQL多表操作
- LeeCode刷题笔记--1
- JavaScript的内置对象
- C编程之计算器程序设计
- 51nod 1284 2 3 5 7的倍数(容斥)
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 使用python进行收据搜集示例之python_regular_expression
- Qt5操作Excel2013
- 欢迎使用CSDN-markdown编辑器
- TODO:搭建Laravel VueJS SemanticUI
- 第四章-GPIO编程