求数据结构C语言:利用栈实现计算器程序(可运行的)、

要求能有基本四则运算,进制转换功能。马上要交了,急啊。大神们帮个忙吧。财富不够了。。。... 要求能有基本四则运算,进制转换功能。马上要交了,急啊。大神们帮个忙吧。财富不够了。。。 展开
 我来答
zhskx1
2012-12-23
知道答主
回答量:14
采纳率:0%
帮助的人:10.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';
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千峰吉C
2012-12-23 · TA获得超过276个赞
知道小有建树答主
回答量:177
采纳率:100%
帮助的人:102万
展开全部
#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));
}
追问
辛苦了,非常感谢
追答
确认为满意回答啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
什么名真难起
2012-12-24 · TA获得超过606个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:377万
展开全部
不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式