四則混合運算程式碼:
#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();
return temp;
double term(void)
double div;
double temp=factor();
while((token[n]=="*")||(token[n]=="/"))
case"*":match("*");
temp*=factor();
case"/":match("/");
div=factor();
if(div==0) /*處理除數為零的情況*/
printf("The divisor is zero!\n");
temp/=div;
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);
main()
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
return 0;
result=exp();
if(token[n]=="\n")
token[n]="\0";
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
fclose(data);
getch();
四則混合運算程式碼:
#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();
}