用c语言编写计算器

必须具有加、减、乘、除、乘方、求绝对值、求阶乘的基本运算功能每个功能都分别用不同的函数实现,数据的输入输出在主函数中实现... 必须具有加、减、乘、除、乘方、求绝对值、求阶乘的基本运算功能
每个功能都分别用不同的函数实现,数据的输入输出在主函数中实现
展开
 我来答
fhefh5566
推荐于2018-02-23 · TA获得超过727个赞
知道小有建树答主
回答量:508
采纳率:0%
帮助的人:362万
展开全部
#include <stdio.h>
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;

link push(link stack,int value)
{
link newnode;

newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}

link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}

int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;

}

int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}

int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}

int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}

void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;

printf("\nPlease input the inorder expression:");
gets(expression);

while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])<= priority(operator->data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);

operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}
何渡忘川
2012-12-27 · TA获得超过370个赞
知道小有建树答主
回答量:126
采纳率:0%
帮助的人:93.9万
展开全部
#include"stdio.h"
/*预处理命令*/

void main()
/*主函数*/

{

double a,b;
/*双精度实型变量说明*/

char c,d;
/*变量说明*/

do
/*循环体*/

{

printf("input a (-*/)b\n");
/*输入提示*/

scanf("%lf%c%lf",&a,&c,&b);
/*输入算术表达式*/

if(c==' ')
/*判断 */

printf("=%0.2f",a b);
/*输出a b的值*/

else if(c=='-')
/*判断-*/

printf("=%0.2f",a-b);
/*输出a-b的值*/

else if(c=='*')
/*判断**/

printf("=%0.2f",a*b);
/*输出a*b的值*/

else if(c=='/')
/*判断/*/

printf("=%0.3f",a/b);
/*输出a/b*/

else
/*不满足以上条件*/

printf("error");
/*输出错误*/

printf("\n\ninput\n");
/*输入\n*/

scanf("%c",&d);
/*输入符号给d*/

}
/*循环体结束*/

while(d=='\n');
/*循环条件语句*/

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐跑小子
2016-01-14 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:7%
帮助的人:4457万
展开全部
简单计算器实现:
#include<stdio.h>
int main() {
double num1 = 0; //输入1
double num2 = 0; //输入2
char ch; //操作
double ret = 0; //结果 printf( "输入第一个数:" );
scanf( "%lf", &num1 );
printf( "输入第二个数:" );
scanf( "%lf", &num2 );
printf( "操作[+ - * /]:" );
getchar();
scanf( "%c", &ch ); switch( ch ) {
case '+':
ret = num1 + num2;
break;
case '-':
ret = num1 - num2;
break;
case '*':
ret = num1 * num2;
break;
case '/':
ret = num1 / num2;
break;
default:
break;
}
printf( "结果:%.2lf\n", ret ); return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈安莲祭伯
2019-11-19 · TA获得超过3万个赞
知道大有可为答主
回答量:1万
采纳率:32%
帮助的人:815万
展开全部
堆栈是数据结构的内容,对初学者来说是很难的。可以不用这个,我写一个吧
#include"stdio.h"
void
main(){
int
a,
b;
int
s;
printf("输入2个数");
scanf("%d",&a);
scanf("%d",&b);
char
c;
printf("输入计算符号");
scanf("%c",&c);
switch(c)
case
'+':s=a+b;
case
'-':s=a-b;
case
'*':s=a*b;
case
'/':s=a/b;
printf("计算结果是%d",s);}
//这个计算器比较简单。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
崔籁封豆
2019-01-17 · TA获得超过3794个赞
知道大有可为答主
回答量:3124
采纳率:32%
帮助的人:205万
展开全部
不知道是不是你喜欢的格式。建议自己修改成自己喜欢的格式。#include<stdio.h>
#include<math.h>
void
menu()
{
printf("
|============================|\n");
printf("
|
1.算术运算;
2.进制转换;
|\n");
printf("
|============================|\n\n");
}
void
fun1()//算术运算
{
int
a,b;
char
oper; printf("请输入算式:");
scanf("%d%c%d",&a,&oper,&b);
switch(oper)
{
case
'+':printf("结果为:%d\n",a+b);break;
case
'-':printf("结果为:%d\n",a-b);break;
case
'*':printf("结果为:%d\n",a*b);break;
case
'/':printf("结果为:%.2f\n",(float)a/b);break;
case
'%':printf("结果为:%d\n",a%b);break;
default:printf("输入有误!\n");break;
}
}
void
fun2()//进制转换
{
int
choice,value,i,j=0,k,t;
char
s[50];
int
a[4];
printf("
********************************************************\n");
printf("
1.十进制转换成二进制;
2.十进制转换成十六进制;\n");
printf("
3.二进制转换成十进制;
4.二进制转换成十六进制;\n");
printf("
5.十六进制转换成二进制;
6.十六进制转换成十进制;\n");
printf("
********************************************************\n");

printf("请选择:");
scanf("%d",&choice);
switch(choice)
{
case
1:printf("请输入十进制数值:");scanf("%d",&value);

while(value>=2)

{

if(value%2!=0)

s[j++]='1';

else

s[j++]='0';

value=value/2;

}

if(value==1)

s[j]='1';

printf("结果为:");

for(i=j;i>=0;i--)

printf("%c",s[i]);

break;

case
2:printf("请输入十进制数值:");scanf("%d",&value);

printf("结果为:%x",value);break;
case
3:printf("请输入二进制数:");scanf("%s",s);

for(i=0;s[i]!='\0';i++);

i--;value=0;

for(j=0;j<=i;j++)

{
t=1;

if(s[j]=='1')

{
for(k=i-j;k>0;k--)

t*=2;

value+=t;

}

}

printf("结果为:%d\n",value);break;
case
4:printf("请输入二进制数:");scanf("%s",s);

for(i=0;s[i]!='\0';i++);

i--;value=0;

for(j=0;j<=i;j++)

{
t=1;

if(s[j]=='1')

{
for(k=i-j;k>0;k--)

t*=2;

value+=t;

}

}

printf("结果为:%x\n",value);break;
case
5:printf("请输入十六进制数值:");scanf("%x",&value);

while(value>=2)

{

if(value%2!=0)

s[j++]='1';

else

s[j++]='0';

value=value/2;

}

if(value==1)

s[j]='1';

printf("结果为:");

for(i=j;i>=0;i--)

printf("%c",s[i]);

break;

case
6:printf("请输入十六进制数值:");scanf("%x",value);

printf("结果为:%d\n",value);break;

default:printf("选择有误!\n");

break;
}
}
void
main()
{
int
choice;
while(choice!=0)
{
menu();

printf("请选择(0退出):");

scanf("%d",&choice);

if(choice==1)

fun1();

else
if(choice==2)

fun2();

printf("\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式