问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问怎么用C语言编写四则运算的程序呢?

发布网友 发布时间:2022-04-23 00:32

我来回答

2个回答

热心网友 时间:2023-10-09 08:36

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define size 20

typedef float NUM;

typedef struct
{
NUM data[size];
int top;
}*Space,Lnode;

void begin();
void initialize(Space x,Space y);
void input(Space x,Space y);
int is_operator(char a_operator);
int pushf(Space s,float x);
int pushc(Space s,char x);
int empty(Space s);
int priority(char o);
int popf(Space s,float *x);
int popc(Space s,int *x);
float result(int a_operator,float operand1,float operand2);

main()
{
begin();
system("pause");
}

void begin()
{
Lnode operand,a_operator;//定义两个指向结构体的指针
Space s_operand=&operand,s_operator=&a_operator;
initialize(s_operand,s_operator);//初始化
input(s_operand,s_operator);//开始
}

void initialize(Space s,Space t)//初始化数据栈、运算符栈
{
s->top=0;
t->top=0;
}

void input(Space x,Space y)
{
int i,j,position=0,op=0;
float operand1=0,operand2=0,evaluate=0;//用来储存两个计算数 和 一个结果
char string[50];//所输入的表达式
char temp[50];//用来临时存放小数

printf("请输入表达式: ");
gets(string);

while(string[position]!='\0'&&string[position]!='\n')
{
i=0;
strcpy(temp,"0");

if(is_operator(string[position]))//判断是否为运算符
{
if(!empty(y))
{
while(!empty(y)&&priority(string[position])<=priority(y->data[y->top-1]))//判断优先级
{
popf(x,&operand1);
popf(x,&operand2);
popc(y,&op);
pushf(x,result(op,operand1,operand2));//计算结果
}
}
pushc(y,string[position]);//运算符入栈
position++;
}

while((string[position]!='\0'&&string[position]!='\n')&&(!is_operator(string[position])))//数据存入temp数组
{
temp[i]=string[position];

i++;
position++;
}
pushf(x,atof(temp));//将数组强制转换为浮点型 然后进行入栈操作 x为指向数据栈的指针 atof函数即使强制转换类型
}

while(!empty(y))
{
popc(y,&op);
popf(x,&operand1);
popf(x,&operand2);

pushf(x,result(op,operand1,operand2));
}
popf(x,&evaluate);

printf("结果是 : %f",evaluate);
}

int pushf(Space s,float x)//数据入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}

int pushc(Space s,char x)//运算符入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}

int popf(Space s,float *x)//数据出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
*x=s->data[s->top];
return 1;
}
}

int popc(Space s,int *x)//运算符出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
*x=s->data[s->top];
return 1;
}
}

int empty(Space s)//判断栈空
{
if(s->top==0)
return 1;
else
return 0;
}

int is_operator(char Operator) //判断是否为运算符
{
switch(Operator)
{
case '+':
case '-':
case '*':
case '/':
return 1;
default:
return 0;
}
}

int priority(char o) //判断运算符的优先级别
{
switch(o)
{
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}

float result(int a_operator,float operand1,float operand2)//计算结果
{
switch(a_operator)
{
case '+':
return operand2+operand1;
case '-':
return operand2-operand1;
case '*':
return operand2*operand1;
case '/':
return operand2/operand1;
}
}

这是用栈写的 没有写输入错误的判断 你自己添加一下吧
我是因为刚好有一个现成的程序

热心网友 时间:2023-10-09 08:36

这个,如果你想自己写的话。我告诉你 所有的运算都可以使用加法运算模拟
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 有没有什么病言病句? 有没有什么病言病句? 如何防止景区的猕猴伤人?杀猴儆猴有用么? c语言用switch编写一个简单的四则运算程序 这些红领巾举着什么吹着什么一起去什么他们的心情什么 这些红领巾举着什么吹着什么一起去什么他们的心情什么 猕猴如何睡觉 输入两个整数,进行加减乘除四则运算的c语言程序怎么写啊,拜托了~ 少先队队旗的象征意义是什么? 少先队队旗的象征意义是什么? 野生猕猴性情如何? 扫墓的作文 少先队 扫墓的作文 少先队 广东可以种植猕猴桃吗? 徒步队活动怎么举旗帜 徒步队活动怎么举旗帜 贵阳黔灵山猕猴一年伤人5811次,园方是如何管理的? 少先队建队节在队旗下要宣誓什么? 少先队建队节在队旗下要宣誓什么? 喝完牛奶能吃猕猴桃吗 少先队员高举队旗出发了中的举是什么意思 少先队员高举队旗出发了中的举是什么意思 c语言四则运算 用“红领巾、队旗、铜号”三个词造句 用“红领巾、队旗、铜号”三个词造句 c语言编四则运算器程序 中国少年先锋队队旗的含义 中国少年先锋队队旗的含义 求c语言编写四则运算程序 怎样拿队旗 怎样拿队旗 c语言编写四则运算法则的程序 C语言编程问题。实现普通四则运算 古代人打仗为什么要举那么多旗子? 古代人打仗为什么要举那么多旗子? 用c语言编四则运算 如何编写一个C语言程序,让计算机自动出四则运算计算 C语言 四则运算程序 c语言编一个四则运算程序,如(a+b)*(a-b)+c&#47;d 然后由我随机输入四个字符 计算机就可进行运算 C语言问题——“四则运算”程序