在vc环境下用c语言编一个简单计算器能完成基本的加、减、乘、除计算,界面不要求

2025-04-15 11:49:03
推荐回答(3个)
回答1:

#include
#include
#include

double jisuan(char a[])
{
int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;
char nibo[50],zhan2[50];
double x,n,l,z=0,zhan3[20];
typedef struct
{
double d1;
int d2;
}dd;
typedef struct
{
dd data[50];
int top;
}zhan1;
zhan1 shu;

shu.top=0;
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9')
{
z=0;
j=i+1;
while(a[j]>='0'&&a[j]<='9')
{j++;}
j--;
for(k=i;k<=j;k++)
{
z=z*10+a[k]-'0';
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]>='0'&&a[j]<='9')
{j++;}
j--;
for(k=i;k<=j;k++)
{
n=pow(0.1,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
else i=j;
shu.data[++shu.top].d1=x;
shu.data[shu.top].d2=++cnt;
nibo[++t1]='0'+shu.data[shu.top].d2;
nibo[t1+1]='\0';
}
else if(a[i]=='(')
{
zhan2[++t2]=a[i];
i++;
}
else if(a[i]==')')
{
j=t2;
while(zhan2[j]!='(')
{
nibo[++t1]=zhan2[j];
nibo[t1+1]='\0';
j--;
}
t2=j-1;
i++;
}
else if(a[i]=='+')
{
while(t2>0&&zhan2[t2]!='(')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
else if(a[i]=='-')
{
if(a[i-1]=='$')
{
a[0]='0';
i=0;
}
else if(a[i-1]=='(')
{
a[i-1]='0';
a[i-2]='(';
i=i-2;\
}
else
{
while(t2>0&&zhan2[t2]!='(')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
else if(a[i]=='*'||a[i]=='/')
{
while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='@')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
else if(a[i]=='^'||a[i]=='@')
{
while(zhan2[t2]=='^'||zhan2[t2]=='@')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
while(t2>0)
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
t1=1;
while(nibo[t1]!='\0')
{
if(nibo[t1]>='0'&&nibo[t1]<='9')
{
for(i=0;i<=shu.top;i++)
{
if(nibo[t1]-'0'==shu.data[i].d2)
{
m=i;
break;
}
}
zhan3[++t3]=shu.data[m].d1;

}
else if(nibo[t1]=='+')
{
zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];
t3--;
}
else if(nibo[t1]=='-')
{
zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];
t3--;
}
else if(nibo[t1]=='*')
{
zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];
t3--;
}
else if(nibo[t1]=='/')
{
zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];
t3--;
}
else if(nibo[t1]=='^')
{
zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);
t3--;
}
else if(nibo[t1]=='@')
{
zhan3[t3]=sqrt(zhan3[t3]);
}
t1++;
}
return zhan3[1];
}
void main()
{
for(;;)
{
char x,a[50];
double jieguo;
int i=0;
a[0]='$';
printf("@表示开方,^表示乘方\n");
printf("请输入表达式,退出请输入q:\n\n");
scanf("%c",&x);
if(x=='q') break;
while(x!='\n')
{
a[++i]=x;
scanf("%c",&x);
}
a[i+1]='\0';
jieguo=jisuan(a);
printf("\n");
printf("结果为:%lf",jieguo);
printf("\n\n");
}
}

回答2:

#include
#include
main(){
double data1,data2; //把他们设成double就可以做浮点运算了
char op;
do{
printf("please enter the expression:");
scanf("%lf %c %lf",&data1,&op,&data2); //在他们之间加空格就可以打无限空格了

switch(op){
case'+':printf("%.2lf+%.2lf=%.2lf\n",data1,data2,data1+data2);break;
case'-':printf("%.2lf-%.2lf=%.2lf\n",data1,data2,data1-data2);break;
case'*':printf("%.2lf*%.2lf=%.2lf\n",data1,data2,data1*data2);break;
case'/':if(!data2)printf("division by zsro!\n");
else printf("%.2lf/%.2lf=%.2lf\n",data1,data2,data1/data2);break;
default:printf("Unkown operator!\n");
}

printf("Do you want to continue(Y/N or y/n)");
fflush(stdin);//这是清掉之前的回车键用的
}while(toupper(getchar())=='Y');//你的底这样好这个应该没有问题了吧。
}

回答3:

# include
void main()
{ float a,b,c;
char d;
printf("please select<+,-,*,/,>");
d=getche();
while(d!='+'&&d!='-'&&d!='*'&&d!='/')
{
printf("\n输入错误,please select<+,-,*,/>");
d=getche();
switch(d)
{ case '+':printf("请输入两个数a,b: ");
scanf("%f,%f",&a,&b);
c=a+b;
printf("a+b=%f\n",c);break;
case '-':printf("请输入两个数a,b: ");
scanf("%f,%f",&a,&b);
c=a-b;
printf("a-b=%f\n",c);break;

case '*':printf("请输入两个数a,b: ");
scanf("%f,%f",&a,&b);
c=a*b;
printf("a*b=%f\n",c);break;
case '/':printf("请输入两个数a,b: ");
scanf("%f,%f",&a,&b);
if (b==0)
{
printf("输入错误,请重新输入a,b:");
scanf("%f,%f",&a,&b);
c=a/b;
printf("a/b=%f\n",c);break;
}
else

c=a/b;
printf("a/b=%f\n",c);
}
}