C语言四则运算多项运算先输入式子再输出结果需分优先级
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/03 03:42:30
C语言四则运算多项运算先输入式子再输出结果需分优先级
输入一个式子,例如:1+3*6+6/3遇等号输出结果21
输入一个式子,例如:1+3*6+6/3遇等号输出结果21
给你个完整代码,支持整数的四则运算,不支持括号,不支持浮点,可以扩展
#include <stdio.h>
#include <string.h>
#define N 3
struct stack {
union {
int data[N]; // 保存数字
char op[N]; // 保存操作符
};
int top;
};
// 操作数的栈操作
int pushint(struct stack *s, int number)
{
if(s->top >= N-1)
return -1;
s->data[++s->top] = number;
return number;
}
int popint(struct stack *s)
{
int n;
if(s->top == -1)
return -1;
n = s->data[s->top--];
return(n);
}
// 操作符的栈操作
int pushchar(struct stack *s, char c)
{
if(s->top >= N-1)
return -1;
s->op[++s->top] = c;
return c;
}
char popchar(struct stack *s)
{
if(s->top == -1)
return -1;
return(s->op[s->top--]);
}
char topchar(struct stack *s)
{
if(s->top == -1)
return '\0';
return s->op[s->top];
}
// 计算加减乘除运算
int calc(int n1, int n2, char op)
{
switch(op) {
case '+': return n1 + n2;
case '-': return n1 - n2;
case '*': return n1 * n2;
case '/': return n1 / n2;
}
}
// 获得字符串中的数字
int getnumber(char *expression, int *n)
{
int i=0, flag=0;
*n = 0;
while(expression[i] == ' ' || expression[i] == '\t')
i++;
while(expression[i] >= '0' && expression[i]<='9') {
*n = *n * 10 + expression[i] - '0';
i ++;
flag = 1;
}
if(flag == 0)
return 0;
return i;
}
// 获得字符串中的操作符
int getop(char *expression, char *op)
{
int i = 0;
while(expression[i] == ' ' || expression[i] == '\t')
i++;
if(expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/')
*op = expression[i++];
else
return 0;
return i;
}
// 获得操作符的优先级
int get_priority(char op)
{
switch(op) {
case '+': return 1;
case '-': return 1;
case '*': return 2;
case '/': return 2;
}
}
// 比较操作符的优先级
int compare_priority(struct stack op, char op2)
{
if(op.top == -1)
return 0;
if(get_priority(topchar(&op)) >= get_priority(op2))
return 1;
return 0;
}
main()
{
struct stack number, op;
char expression[100], c;
int index, len, n, result;
number.top = -1;
op.top = -1;
gets(expression);
index = getnumber(expression, &n);
if(index == 0) {
printf("表达式错误\n");
return 0;
}
pushint(&number, n);
do {
len = getop(expression+index, &c);
if(len == 0) {
printf("表达式错误\n");
return 0;
}
index += j;
len = getnumber(expression+index, &n);
if(len == 0) {
printf("表达式错误\n");
return 0;
}
index += len;
while(compare_priority(op, c) > 0) {
result = calc(popint(&number), popint(&number), popchar(&op));
pushint(&number, result);
}
pushint(&number, n);
pushchar(&op, c);
} while(expression[index] != '\0');
do {
result = calc(popint(&number), popint(&number), popchar(&op));
if(topchar(&op) != 0)
pushint(&number, result);
} while(topchar(&op) != 0);
printf("\n%s = %d", expression, result);
}
#include <stdio.h>
#include <string.h>
#define N 3
struct stack {
union {
int data[N]; // 保存数字
char op[N]; // 保存操作符
};
int top;
};
// 操作数的栈操作
int pushint(struct stack *s, int number)
{
if(s->top >= N-1)
return -1;
s->data[++s->top] = number;
return number;
}
int popint(struct stack *s)
{
int n;
if(s->top == -1)
return -1;
n = s->data[s->top--];
return(n);
}
// 操作符的栈操作
int pushchar(struct stack *s, char c)
{
if(s->top >= N-1)
return -1;
s->op[++s->top] = c;
return c;
}
char popchar(struct stack *s)
{
if(s->top == -1)
return -1;
return(s->op[s->top--]);
}
char topchar(struct stack *s)
{
if(s->top == -1)
return '\0';
return s->op[s->top];
}
// 计算加减乘除运算
int calc(int n1, int n2, char op)
{
switch(op) {
case '+': return n1 + n2;
case '-': return n1 - n2;
case '*': return n1 * n2;
case '/': return n1 / n2;
}
}
// 获得字符串中的数字
int getnumber(char *expression, int *n)
{
int i=0, flag=0;
*n = 0;
while(expression[i] == ' ' || expression[i] == '\t')
i++;
while(expression[i] >= '0' && expression[i]<='9') {
*n = *n * 10 + expression[i] - '0';
i ++;
flag = 1;
}
if(flag == 0)
return 0;
return i;
}
// 获得字符串中的操作符
int getop(char *expression, char *op)
{
int i = 0;
while(expression[i] == ' ' || expression[i] == '\t')
i++;
if(expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/')
*op = expression[i++];
else
return 0;
return i;
}
// 获得操作符的优先级
int get_priority(char op)
{
switch(op) {
case '+': return 1;
case '-': return 1;
case '*': return 2;
case '/': return 2;
}
}
// 比较操作符的优先级
int compare_priority(struct stack op, char op2)
{
if(op.top == -1)
return 0;
if(get_priority(topchar(&op)) >= get_priority(op2))
return 1;
return 0;
}
main()
{
struct stack number, op;
char expression[100], c;
int index, len, n, result;
number.top = -1;
op.top = -1;
gets(expression);
index = getnumber(expression, &n);
if(index == 0) {
printf("表达式错误\n");
return 0;
}
pushint(&number, n);
do {
len = getop(expression+index, &c);
if(len == 0) {
printf("表达式错误\n");
return 0;
}
index += j;
len = getnumber(expression+index, &n);
if(len == 0) {
printf("表达式错误\n");
return 0;
}
index += len;
while(compare_priority(op, c) > 0) {
result = calc(popint(&number), popint(&number), popchar(&op));
pushint(&number, result);
}
pushint(&number, n);
pushchar(&op, c);
} while(expression[index] != '\0');
do {
result = calc(popint(&number), popint(&number), popchar(&op));
if(topchar(&op) != 0)
pushint(&number, result);
} while(topchar(&op) != 0);
printf("\n%s = %d", expression, result);
}
C语言四则运算多项运算先输入式子再输出结果需分优先级
C语言计算器问题解决,要实现简单的四则运算,输入一个式子,可以返回运算结果
c语言运算优先级以及逻辑运算的结果,新手
C语言 四则运算程序接受用户输入的一个四则运算表达式,输出其结果.例如用户输入表达式(5-1/5)*5,则输出结果 24
C语言运算优先级别的问题
用VB写 计算器程序,用户输入运算数和四则运算符号,输出计算结果
C语言 编写程序,输入3个实数,求其平均值并取两位小数后进行四舍五入,最后输出运算结果
用C++编写一个计算器程序.用户输入两个运算数和四则运算符,输出计算结果.
用C++语言设计一个简单计算器.用户输入四则运算表达式,程序输出正确结果(有追加)
C语言程序 算24点输入任意4个1-10之间的整数,输出用加减乘除运算这4个数得到24的式子
编写一个进行加减乘除四则运算的程序,要求输入2个数,然后输入个运算符,输出两个数运算的结果,控制台应
C#题编写一个进行加减乘除四则运算的程序,要求;输出2个单精度数,然后输入一个运算符号,输出结果