求大神给我解释以下C语言代码(最好每一句都解释一下,专业点)
visual吧
全部回复
仅看楼主
level 6
用C语言设计一个简单的计算器,要求能够对输入的数1.进行+,-,*,/,运算2.可以带括号( );3.不限定运算式的输入长度。以下是代码:
#include<stdio.h>
#include<stdlib.h>
int n,i;
float val[100];
char c[1000],fu[100];
float digui()
{
float he=0,ji=0;
char hefu='+';
for(;fu[i]!=')'&&fu[i]!='=';i++)
{
switch(fu[i])
{
case '(':
i++;
digui();
break;
case '+':
if(hefu=='+') {val[n] = he + val[n];he = val[n];}
else {val[n] = he - val[n];he = val[n];}
hefu = '+';
n++;
break;
case '-':
if(hefu=='+') {val[n] = he + val[n];he = val[n];}
else {val[n] = he - val[n];he = val[n];}
hefu = '-';
n++;
break;
case '*':
{
ji=val[n];
while(1)
{
if(fu[i] == '*')
{
if(fu[i+1] == '(')
{
i+=2;n++;
ji = ji * digui();
}
else
{
ji = ji*val[n+1];
i++;n++;
}
}
else if(fu[i] == '/')
{
if(fu[i+1] == '(')
{
i+=2;n++;
ji = ji / digui();
}
else
{
ji = ji/val[n+1];
i++;n++;
}
}
else break;
}
val[n] = ji;
if(fu[i]=='+'||fu[i]=='-'||fu[i]=='=')
i--;
break;
}
case '/':
{
ji = val[n];
while(1)
{
if(fu[i] == '*')
{
if(fu[i+1] == '(')
{
i+=2;n++;
ji = ji * digui();
}
else
{
ji = ji*val[n+1];
i++;n++;
}
}
else if(fu[i] == '/')
{
if(fu[i+1] == '(')
{
i+=2;n++;
ji = ji / digui();
}
else
{
ji = ji/val[n+1];
i++;n++;
}
}
else break;
}
}
val[n] = ji;
if(fu[i]=='+'||fu[i]=='-'||fu[i]=='=')
i--;
break;
}
}
if(hefu == '+') val[n] = he + val[n];
else val[n] = he - val[n];
return val[n];
}
int main()
{
int a=0,j=0;float b=0,d=0,g=10;
gets(c);
for(i=0;c[i]!=0&&i<1000;i++)
{
if(c[i]>='0'&&c[i]<='9')
{
while(c[i]>='0'&&c[i]<='9')
{
b=(c[i]-'0')+b*10;
i++;
}
if(c[i]=='.')
{
i++;
while(c[i]>='0'&&c[i]<='9')
{
d=d+(c[i]-'0')/g;
g*=10;
i++;
}
}
val[n]=b+d;
n++;
}
b=0;d=0;g=10;
}
for(i=0;c[i]!=0;i++)
{
if(c[i] < '0' || c[i] > '9')
fu[j++]=c[i];
}
j=n;
i=0;
n=0;
printf("=%5.2f\n", digui());
system("pause");
}
2015年04月16日 14点04分 1
1