流程图(函数有点多)
核心算法:
先上代码为敬,之后详细拆分每个函数
#include <stdio.h>
#include <stdlib.h>
void calculator_run(); //管理运行,输入,计算相关
int input_and_legal(char []); //输入并验证字符合法
int legal(char); //验证字符合法
void compute_and_output(char []); //相关处理,输出结果
double str_to_double(char [],int *); //字符串转浮点型
int priority(char,char); //优先级验证
int sign_to_num(char); //符号转数字,协助优先级验证
int compute_and_legal(double *,double *,char *,char *); //计算并验证等式有效
int bracket_and_legal(char [],int *); //验证括号
int main()
{
char judge;
printf("输入s开始,输入e退出\n");
scanf(" %c",&judge);
if(judge=='s') calculator_run();
else if(judge!='e') printf("输入错误\n");
return 0;
}
void calculator_run()
{
char text[1000],judge=1; //text储存输入文本
do{
if(input_and_legal(text)) //如果输入合法
{
compute_and_output(text); //计算并输出
}
printf("输入c清除,输入e退出\n");
scanf(" %c",&judge);
}while(judge!='e');
}
int input_and_legal(char text[1000])
{
printf("请输入不超过999个字符\n");
int i=0,ret=1;
do{
scanf(" %c",&text[i]);
if(!legal(text[i])) //如果字符非法
{
printf("输入%c有误!\n",text[i]);
ret=0;
}
}while(i<999 && text[i++]!='=');
text[i]='\0';
return ret;
}
int legal(char ch)
{
if(ch>'9' || ch<'0')
{
if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='(' || ch==')' || ch=='.' || ch=='=')
{
return 1;
}
else return 0;
}
return 1;
}
void compute_and_output(char text[1000])
{
double number[500]; //储存数字
char sign[500]; //储存符号
int n_i=0,s_i=0,t_i=0; //n_i为number索引,s_i为sign索引,t_i为text索引
while(text[t_i]!='\0')
{
if((text[t_i]<='9') && (text[t_i]>='0'))
number[n_i++]=str_to_double(text,&t_i); //储存相关数字
if((text[t_i]