帮忙看看我的代码,教下我如何计算1+2+sin30这样的
#include<stdio.h>#include<math.h>
#include<ctype.h>
#define pi 3.1415926
#include<stdlib.h>
void function2(float x,char name[3]); /*用于计算三角函数*/
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;
char choise1,choise2;
char name[3];
float num;
x:
printf("计算包含三角函数吗?(y/n)\n");
scanf("%c",&choise1);
getchar();
if(choise1=='n'||choise1=='N')
{do
{
printf("请输入普通四则运算:\n");
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();
printf("继续?(y/n)\n");
scanf("%c",&choise2);
getchar();
fclose(data);
}while(choise2=='y'||choise2=='Y');}
else if(choise1=='y'||choise1=='Y')
{
printf("请输入需要计算的三角函数名与度数(中间以空格隔开):\n");
scanf("%s%f",name,&num);
getchar();
printf("输入的角度为:%f\n",num);
printf("输入的三角函数为:%s\n",name);
function2(num,name);
}
else
{ printf("输入错误,请重新输入!\n");
printf("\n");
goto x;
}
printf("谢谢使用!\n");
return 0;
getchar();
}
void function2(float x,char name[3])/*计算三角函数*/
{
float m,n,i,j;
m=(x*pi)/180;
printf("此度数的所有三角函数结果为:\n");
n=sin(m);
printf("sin %.2f=%.2f\n",x,n);
i=cos(m);
printf("cos %.2f=%.2f\n",x,i);
if(i!=0)
{
j=n/i;
printf("tan %.2f=%.2f\n",x,j);
printf("\n\n");
}
else
{
printf("tan的值不存在\n");
printf("\n\n");
}
}