求数据结构C语言:利用栈实现计算器程序(可运行的)、
3个回答
展开全部
没有进制转化,自己弄吧,只有四则运算,有优先级
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
double part_take1(char a[],int b,int c);
double multiply(char h[]);
void part_take2(char d[],char *e,int f,int g);
int main(void)
{
int i;
int j;
int k;
int length;
char ch2[100];
char express[100];
char reset;
double part1;
double result=0;
k=-1;
puts("请输入计算式");
gets(express);
length=strlen(express);
for(i=0;i<strlen(express);i++)
{
if(express[i]=='+'||express[i]=='-')
{
part_take2(express,ch2,k+1,i-1);
part1=multiply(ch2);
if(k==-1)
{
result=result+part1;
}
if(express[k]=='+'&&k>0)
{
result=result+part1;
}
if(express[k]=='-'&&k>0)
{
result=result-part1;
}
ch2[0]='\0';
k=i;
}
}
part_take2(express,ch2,k+1,length-1);
part1=multiply(ch2);
if(k==-1||express[k]=='+')
{
result=result+part1;
}
else
{
result=result-part1;
}
printf("%f",result);
system("pause");
return 0;
}
double part_take1(char a[],int b,int c)
{
char ch1[100];
int j;
int h;
double result;
for(h=b,j=0;h<=c;h++,j++)
{
ch1[j]=a[h];
}
result=atof(ch1);
return(result);
}
double multiply(char h[])
{
int k=-1;
int i;
double part=1;
double num;
int s=strlen(h);
for(i=0;i<s;i++)
{
if(h[i]=='*'||h[i]=='/')
{
num=part_take1(h,k+1,i-1);
if(k<0)
{
part=part*num;
}
if(h[k]=='*'&&k>0)
{
part=part*num;
}
if(h[k]=='/'&&k>0)
{
part=part/num;
}
k=i;
}
}
num=part_take1(h,k+1,s-1);
if(h[k]=='*'||k==-1)
{
part=part*num;
}
else
{
part=part/num;
}
return(part);
}
void part_take2(char d[],char *e,int f,int g)
{
int i;
int j;
for(i=f,j=0;i<=g;i++,j++)
{
e[j]=d[i];
}
e[j]='\0';
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
double part_take1(char a[],int b,int c);
double multiply(char h[]);
void part_take2(char d[],char *e,int f,int g);
int main(void)
{
int i;
int j;
int k;
int length;
char ch2[100];
char express[100];
char reset;
double part1;
double result=0;
k=-1;
puts("请输入计算式");
gets(express);
length=strlen(express);
for(i=0;i<strlen(express);i++)
{
if(express[i]=='+'||express[i]=='-')
{
part_take2(express,ch2,k+1,i-1);
part1=multiply(ch2);
if(k==-1)
{
result=result+part1;
}
if(express[k]=='+'&&k>0)
{
result=result+part1;
}
if(express[k]=='-'&&k>0)
{
result=result-part1;
}
ch2[0]='\0';
k=i;
}
}
part_take2(express,ch2,k+1,length-1);
part1=multiply(ch2);
if(k==-1||express[k]=='+')
{
result=result+part1;
}
else
{
result=result-part1;
}
printf("%f",result);
system("pause");
return 0;
}
double part_take1(char a[],int b,int c)
{
char ch1[100];
int j;
int h;
double result;
for(h=b,j=0;h<=c;h++,j++)
{
ch1[j]=a[h];
}
result=atof(ch1);
return(result);
}
double multiply(char h[])
{
int k=-1;
int i;
double part=1;
double num;
int s=strlen(h);
for(i=0;i<s;i++)
{
if(h[i]=='*'||h[i]=='/')
{
num=part_take1(h,k+1,i-1);
if(k<0)
{
part=part*num;
}
if(h[k]=='*'&&k>0)
{
part=part*num;
}
if(h[k]=='/'&&k>0)
{
part=part/num;
}
k=i;
}
}
num=part_take1(h,k+1,s-1);
if(h[k]=='*'||k==-1)
{
part=part*num;
}
else
{
part=part/num;
}
return(part);
}
void part_take2(char d[],char *e,int f,int g)
{
int i;
int j;
for(i=f,j=0;i<=g;i++,j++)
{
e[j]=d[i];
}
e[j]='\0';
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<ctype.h>
#include<math.h>
void system(char index[]);
long int A(int n,int k);
long int C(int n,int k);
void main()
{
char fh[80*80];
float di[80*80],r=0,temp;
int n=0,i,k;
system("color 0a");
system("title LK Studio : CALC ");
do
{
scanf("%f",&di[n]);
scanf("%c",&fh[n]);
n++;
}
while(fh[n-1]!='=');
for(i=0;i<n;i++)
{
if((fh[i]=='A')||(fh[i]=='a')) {di[i+1]=A(di[i],di[i+1]);di[i]=0;}
else if((fh[i]=='C')||(fh[i]=='c')) {di[i+1]=C(di[i],di[i+1]);di[i]=0;}
}
for(i=0;i<n;i++)
{
if(fh[i]=='*')
{ temp=di[i];di[i]=0;
for(k=i+1;k<n;k++)
if(di[k]!=0){di[k]=temp*di[k];break;}
}
else if(fh[i]=='/')
{ temp=di[i];di[i]=0;
for(k=i+1;k<n;k++)
if(di[k]!=0){di[k]=temp/di[k];break;}
}
}
for(i=0;i<n;i++)
if(fh[i]=='-')
for(k=i+1;k<n;k++)
if(di[k]!=0) {di[k]*=(-1);break;}
for(i=0;i<n;i++)
r+=di[i];
printf("%f\n",r);
system("pause");
}
long int A(int n,int k)
{
long int rea=1;
int i;
for(i=n;i>=n-k+1;i--)
rea*=i;
return rea;
}
long int C(int n,int k)
{
return (A(n,k)/A(k,k));
}
#include<ctype.h>
#include<math.h>
void system(char index[]);
long int A(int n,int k);
long int C(int n,int k);
void main()
{
char fh[80*80];
float di[80*80],r=0,temp;
int n=0,i,k;
system("color 0a");
system("title LK Studio : CALC ");
do
{
scanf("%f",&di[n]);
scanf("%c",&fh[n]);
n++;
}
while(fh[n-1]!='=');
for(i=0;i<n;i++)
{
if((fh[i]=='A')||(fh[i]=='a')) {di[i+1]=A(di[i],di[i+1]);di[i]=0;}
else if((fh[i]=='C')||(fh[i]=='c')) {di[i+1]=C(di[i],di[i+1]);di[i]=0;}
}
for(i=0;i<n;i++)
{
if(fh[i]=='*')
{ temp=di[i];di[i]=0;
for(k=i+1;k<n;k++)
if(di[k]!=0){di[k]=temp*di[k];break;}
}
else if(fh[i]=='/')
{ temp=di[i];di[i]=0;
for(k=i+1;k<n;k++)
if(di[k]!=0){di[k]=temp/di[k];break;}
}
}
for(i=0;i<n;i++)
if(fh[i]=='-')
for(k=i+1;k<n;k++)
if(di[k]!=0) {di[k]*=(-1);break;}
for(i=0;i<n;i++)
r+=di[i];
printf("%f\n",r);
system("pause");
}
long int A(int n,int k)
{
long int rea=1;
int i;
for(i=n;i>=n-k+1;i--)
rea*=i;
return rea;
}
long int C(int n,int k)
{
return (A(n,k)/A(k,k));
}
追问
辛苦了,非常感谢
追答
确认为满意回答啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询