★50分★求助C语言编程题〓注释详细再加分!!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:42:05
很重要的,解答尽量详细点啊,用分数感谢你!!!
题目:

从键盘读入一个实数(整数和小数)表达式,检查表达式的合法性。对合法的表达式计算结果值,并将结果输出到屏幕上:对不合法的表达式提示输出第一个具体错误。表达式遵循先乘除后加减的运算规则,运算顺序从左向右,没有正负号,但允许有括号和单目运算。(要求:刚学完C,所以别用c++等太高级的知识解答哦)
100分!!!要代码的

我以前写过的一个程序,可以对实数表达式做四则运算,包括括号,(我不知道你的“单目运算符”指的是什么),能避免除以0的错误,能检查表达式的合法性
#include <stdio.h>
#include <string.h>
char s1[100];
float s2[100];
int n2;
void cal(int x){
switch(x){
case 1:s2[n2-2]+=s2[n2-1];break;
case 2:s2[n2-2]-=s2[n2-1];break;
case 3:s2[n2-2]*=s2[n2-1];break;
case 4:if(s2[n2-1])s2[n2-2]/=s2[n2-1];else throw 0;
}
n2--;
}
float calall(){
int stack[100],ns=0;
int n1=strlen(s1);
bool numberend=0;int nbracket=0;
for(int i=0;i<n1;){
if(s1[i]>47&&s1[i]<58){
if(numberend)throw 1;numberend=1;
sscanf(s1+i,"%f",&s2[n2++]);
while(s1[i]>47&&s1[i]<58||s1[i]=='.')i++;
}
char* sop="(+-*/)";
int op=strchr(sop,s1[i++])-sop;
if(op<0 || op>6)throw 3;
if(op==0){if(numberend)throw 1;nbracket++;}
if(op==5){if(nbracket<=0)throw 2;nbracket--;}
if(op>