【文件属性】:
文件名称:C语言的四则运算问题(不含括号)
文件大小:2KB
文件格式:TXT
更新时间:2013-11-10 17:35:03
链表
#include
#include
struct four
{
double a;
struct four *next; //定义结构体,作为链表的节点.
};
void main()
{
double sum(void); //函数声明. 该函数返回等式的计算结果. 有优先级的运算符号在函数内部先进行计算。
double sum1;
printf("请输入等式,以 '=' 结束, 例如“ 2*2*3-2/2= ” 结果将自动保留六位有效数字\n");
sum1=sum();
printf("该等式的结果为:\t%f\n\n",sum1);
}
double sum(void)
{
struct four *head,*pnew,*ptail,*p,*q; //结构体成员.
char ah;
double s=0,last; //last作为 pnew->a 的前一个数值.
int j=1;
q=(struct four *)malloc(sizeof(struct four));
scanf("%lf%c",&q->a,&ah);
last=q->a;
while(j==1 && ah!='=') //头节点的建立.
{
switch(ah) //对运算符号的优先级进行选择,优先级高的先进行计算.
{
case '+':
j=0;
continue;
break;
case '-':
j=0;
continue;
break;
case '*':
q=(struct four *)malloc(sizeof(struct four));
scanf("%lf",&q->a);
q->a=last*q->a;
break;
case '/':
q=(struct four *)malloc(sizeof(struct four));
scanf("%lf",&q->a);
q->a=last/q->a;
break;
default:
printf("Error!\n"); //当运算符号出错时的处理.
exit(0);
}
last=q->a;
scanf("%c",&ah);
}
pnew=(struct four *)malloc(sizeof(struct four));
pnew->a=q->a; //将头节点的信息传递给 head 和 ptail.
head=ptail=pnew;
while(ah!='=') //接下来节点的建立.
{
pnew=(struct four *)malloc(sizeof(struct four));
scanf("%lf",&pnew->a);
switch(ah)
{
case '*':
pnew->a=last*pnew->a;
break;
case '/':
pnew->a=last/pnew->a;
break;
case '+':
break;
case '-':
pnew->a=-pnew->a;break;
default:
printf("Error!\n"); //当运算符号出错时的处理.
exit(0);
}
scanf("%c",&ah);
if(ah=='-' || ah=='+'|| ah=='=') //将值进行传递 ptail->next=pnew.
{
ptail->next=pnew;
ptail=pnew;
}
last=pnew->a;
}
ptail->next=NULL;
p=head;
while(p!=NULL) //各个节点数值相加的结果,有优先级符号的已经先计算了.
{
s=s+(p->a);
p=p->next;
}
return s; //返回运算结果.
}