中易网

用c程编写一个程序 可以从键盘输入一个公式,回车后得到结果

答案:3  悬赏:40  
解决时间 2021-02-22 22:08
比如:2+44*0-7/7回车得1
最佳答案
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include <conio.h>

char token[61];
int n=0;
void error(void)
{
printf("ERROR!\n");
exit(1);
}
void match(char expected)
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void);
double factor(void);
double exp(void)
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0)
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.')
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
getch();
}
全部回答
把一般的表达式捋成逆波兰式然后计算 ... 之前写过一个类似的程序 ... 吃饭先 ... 回来如果还没人答我给你写出来 ...
不介意的话你的代码应写成 #include "stdio.h" #define n 6 void main ( ) {char c [n]; int i=0; for (; icdef时有 c[0]=a、c[1]=b、c[2]=、c[3]=c、c[4]=、c[5]=d 所以e、f没有存储到数组中去,最后一个为输入的结束标志 因此结果为 ab c d
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
品质差一些的茶叶在口感上要差,在对人的保健
数据结构-链表-集合的合并
万福岭村地址在什么地方,想过去办事
油泵的继电器
祝他期中考试成功,怎么用动听的语言说
铜豉坡怎么去啊,有知道地址的么
命中属土的人家中可以养鱼吗
旧溪这个地址在什么地方,我要处理点事
办理餐饮服务许可证有哪些申请条件?
日产卡罗拉有五坐的车吗?
为什么红警3小日本太强? 一次我是苏联 和日本
很想考空乘,但身高不够怎么办?
射极输出器的电压放大倍数?
旺业陶瓷店怎么去啊,有知道地址的么
时尚芭芘专业美发机构地址在什么地方,我要处
推荐资讯
04年的本田cbr600打不燃火,
宝商家美佳超市千阳店在哪里啊,我有事要去这
火柴象征什么?
在职考博,是不是要辞职
织布豁边是什么意思
美琴窗帘在哪里啊,我有事要去这个地方
电脑小白有关台式电脑的问题
有知情人能告诉我江苏省交通工程集团 到底咋
南湖雅苑地址在哪,我要去那里办事
火柴人联盟手机版买阿狸要多少个钻石,?
狗狗吃饭时·有时在地上蹭鼻子是怎么回事?
万宝海鲜舫劳动公园店地址在什么地方,想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?