⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 --

📁 很实用的程序,也很容易懂,你们可以
💻
字号:

哪个大虾帮我编写个带优先的四则运算计算器,比如1+2*3-4/2结果=5 
先乘除后加减。不带优先的就算了!

#include<stdio.h> 
#include<ctype.h> 
#include<stdlib.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); 
return 0; 
getch(); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -