#include <stdioh>
main (void)
{
int a,b,c;
char op;
scanf ("%d%c%d",&a,&op,&b);//最好空格去掉,这样就可以直接写成a+b或者a-b。如果有空格的话要记得空格也要打a + b。要不会出现错误 ,而且输入的时候需要用地址符&····
if(op=='+')
{c=a+b;}
if(op=='-')
{c=a-b;}
printf("%d%c%d=%d\n",a,op,b,c);//楼主这句应该放在数据处理完后。。要不你输出的a,op,b都是在没处理过的数,也就是原来的值,而且最好是把,去掉,这样更美观 ,而且printf后面不需要&。。。切记。而且没必要那样输出。请楼主看我的printf```
}
还不清楚 来hi我
#include <stdioh>
#include <stdlibh>
#include <stringh>
#define size 20
typedef float NUM;
typedef struct
{
NUM data[size];
int top;
}Space,Lnode;
void begin();
void initialize(Space x,Space y);
void input(Space x,Space y);
int is_operator(char a_operator);
int pushf(Space s,float x);
int pushc(Space s,char x);
int empty(Space s);
int priority(char o);
int popf(Space s,float x);
int popc(Space s,int x);
float result(int a_operator,float operand1,float operand2);
main()
{
begin();
system("pause");
}
void begin()
{
Lnode operand,a_operator;//定义两个指向结构体的指针
Space s_operand=&operand,s_operator=&a_operator;
initialize(s_operand,s_operator);//初始化
input(s_operand,s_operator);//开始
}
void initialize(Space s,Space t)//初始化数据栈、运算符栈
{
s->top=0;
t->top=0;
}
void input(Space x,Space y)
{
int i,j,position=0,op=0;
float operand1=0,operand2=0,evaluate=0;//用来储存两个计算数 和 一个结果
char string[50];//所输入的表达式
char temp[50];//用来临时存放小数
printf("请输入表达式: ");
gets(string);
while(string[position]!='\0'&&string[position]!='\n')
{
i=0;
strcpy(temp,"0");
if(is_operator(string[position]))//判断是否为运算符
{
if(!empty(y))
{
while(!empty(y)&&priority(string[position])<=priority(y->data[y->top-1]))//判断优先级
{
popf(x,&operand1);
popf(x,&operand2);
popc(y,&op);
pushf(x,result(op,operand1,operand2));//计算结果
}
}
pushc(y,string[position]);//运算符入栈
position++;
}
while((string[position]!='\0'&&string[position]!='\n')&&(!is_operator(string[position])))//数据存入temp数组
{
temp[i]=string[position];
i++;
position++;
}
pushf(x,atof(temp));//将数组强制转换为浮点型 然后进行入栈 *** 作 x为指向数据栈的指针 atof函数即使强制转换类型
}
while(!empty(y))
{
popc(y,&op);
popf(x,&operand1);
popf(x,&operand2);
pushf(x,result(op,operand1,operand2));
}
popf(x,&evaluate);
printf("结果是 : %f",evaluate);
}
int pushf(Space s,float x)//数据入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}
int pushc(Space s,char x)//运算符入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}
int popf(Space s,float x)//数据出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
x=s->data[s->top];
return 1;
}
}
int popc(Space s,int x)//运算符出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
x=s->data[s->top];
return 1;
}
}
int empty(Space s)//判断栈空
{
if(s->top==0)
return 1;
else
return 0;
}
int is_operator(char Operator) //判断是否为运算符
{
switch(Operator)
{
case '+':
case '-':
case '':
case '/':
return 1;
default:
return 0;
}
}
int priority(char o) //判断运算符的优先级别
{
switch(o)
{
case '+':
case '-':
return 1;
case '':
case '/':
return 2;
default:
return 0;
}
}
float result(int a_operator,float operand1,float operand2)//计算结果
{
switch(a_operator)
{
case '+':
return operand2+operand1;
case '-':
return operand2-operand1;
case '':
return operand2operand1;
case '/':
return operand2/operand1;
}
}
这是用栈写的 没有写输入错误的判断 你自己添加一下吧
我是因为刚好有一个现成的程序
先计算a-=++a;实际上等同于a++;a-=a; (不论a之前值是多少,a-=a执行后a的值都将是0)
再将该值赋给c(注意,逗号运算优先级比赋值运算还要低),因此c的值是0
再计算a+=b,b+=4; (由于b的值仍是0,a的值不变,后面b+=4之后b的值变为4)
所以最后输出将是:0,4,0
一般程序有3种结构,顺序、选择、循环。
顺序嘛就不用说了,选择用于有条件的情况,例如成绩<60,评级为'D',60<成绩<70评级为'C'
循环就是用于重复做某样计算,就如同你的问题,累加(譬如从1+2+100)实际上就是循环的典型也是最基本应用。
int
i,sum=0;
for(i=1;i<=100;i++)
sum
=
sum
+i;
以上就是关于C语言编写加减计算程序全部的内容,包括:C语言编写加减计算程序、请问怎么用C语言编写四则运算的程序呢、C语言程序运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)