C语言简单四则混合运算代码

#include<stdio.h>#include<math.h>#include<string.h>voidcheng(double*a,double*b){*a=(*... #include<stdio.h>
#include<math.h>
#include<string.h>
void cheng(double *a,double *b)
{
*a=(*a)*(*b);

}//定义乘法函数

void chu (double *a, double *b)
{
*a=(*a)/(*b);
}//定义除法函数
void jia (double *a,double *b)
{
*a=(*a)+(*b);
}//定义加法函数

void jian (double *a, double *b)
{
*a=(*a)-(*b);
}//定义减法函数

void main()
{
int len,y;double a[10]={0};
double x;
int i,k,l,j;
char b[10]={0};

i=1;k=0;//设置参数
for(i=0;i<=9;i++)
{ printf("请输入一个数字");
scanf("%lf",&a[i]);
printf("请出入一个符号.+ .- .* ./ =");getchar();
b[i]=getchar();
if(b[i]=='=')break;}
len=strlen(b);
//输入表达式

j=len-1;
for(l=0;l<=j;l++)
if(b[l]=='/') {b[l]='*';a[l+1]=1/a[l+1];}//将所有除法变成乘法
if(b[l]=='-'){b[l]='/';a[l+1]=0-a[l+1];}//将所有减法转换成加法
for(l=0;l<=j;l++)
{

if(b[l]=='*')
{cheng(a+l,a+l+1);
for(y=l+1;y<=9;y++)
{a[y]=a[y+1];b[y]=b[y+1];len--;
}}

}//首先识别乘法进行运算
j=len-1;
x=0;
for(l=0;l<=j;l++)
x=a[l]+x;

printf("结果是:%lf",x);

}//输出结果

无法进行乘法运算。结果都是0.错在哪里?
展开
 我来答
她是我的小太阳
高粉答主

推荐于2018-03-22 · 醉心答题,欢迎关注
知道顶级答主
回答量:5.1万
采纳率:83%
帮助的人:9717万
展开全部
四则混合运算代码:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char token[61]; /*存放表达式字符串的数组*/
int n=0;
void error(void) /*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void match(char expected) /*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void); /*计算乘除的函数*/
double factor(void); /*处理括号和数字的函数*/
double exp(void) /*计算加减的函数*/
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*处理除数为零的情况*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
getch();
}
璩梧桐0GQ
2012-08-24 · TA获得超过1970个赞
知道小有建树答主
回答量:341
采纳率:0%
帮助的人:350万
展开全部
我搞不懂为什么简单的四则混合运算你要变来变去弄的这么复杂,不过我现在发现了你的一个小错误:
if(b[l]=='-'){b[l]='/';a[l+1]=0-a[l+1];}//将所有减法转换成加法---------按你的意思,b[l]=‘+'
你先解释下
if(b[l]=='/') {b[l]='*';a[l+1]=1/a[l+1];}//将所有除法变成乘法
if(b[l]=='-'){b[l]='/';a[l+1]=0-a[l+1];}//将所有减法转换成加法

的意思我再继续看好了。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leapmie
2012-08-24 · TA获得超过229个赞
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:139万
展开全部
你这代码的格式看得眼都花了...........
看了好久还是没找到错哪里,你程序的结构太乱了,还有是这应该不是很难的题目,但你思路不清晰,所以把问题复杂化了。
我先继续看看,看能不能找出错误,建议是重写的
不过大家刚开始时都不容易,能理解~

楼主我投降!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友40b92ae
2012-08-24
知道答主
回答量:30
采纳率:0%
帮助的人:6.3万
展开全部
代码太长了,眼睛都看发了,建议整理一下问重点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式