用C语言编写一个简单的计算器1

网上科普有关“用C语言编写一个简单的计算器1”话题很是火热,小编也是针对用C语言编写一个简单的计算器1寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望...

网上科普有关“用C语言编写一个简单的计算器1”话题很是火热,小编也是针对用C语言编写一个简单的计算器1寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

#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;

} 写个简单易懂的,你操作计算器的步骤就是编写程序的思路呀

用栈 就可以办到了。。。这个很详细的, lz 随便输入一个表达式,中间的计算过程全部输出了,lz试两个 就知道怎么回事了。 #include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAXSIZE 4000;

typedef struct

{

char data[10];

int top;//头地址

int base;//基地址

int length;//长度

}Stack;

void init(Stack *st)//初始化栈

{

st->base=0;

st->top=0;

st->length=0;

}

int isEmpty(Stack *st)

{

int n=0,top,base;

top =st->top;

base =st->base;

if(top==base)

{

return 1;

}

return n;

}

int isFull(Stack *st)

{

int n=0,top,base;

top =st->top;

if(top>=4000)

{

return 1;

}

return n;

}

char getTop(Stack *st)// 返回top值,不改变栈的结构

{

char n;

if(isEmpty(st))

{

printf("栈为空\n");

return 0;

}

int positon= st->top-1;

n= st->data[positon];//取出数据;

return n;

}

char pop(Stack *st)// 出栈,返回

{

char n;

if(isEmpty(st))

{

printf("栈为空\n");

return 0;

}

int positon= st->top-1;

n= st->data[positon];//取出数据;

st->top--;

st->length--;

st->data[positon]='\0';//消除数据

return n;

}

void push(char n,Stack *st)//入栈

{

int positon ;

if(isFull(st))

{

printf("栈满\n");

}

else

{

positon= st->top;//获取位置

st->data[positon]=n;//存入数据

st->top++;//改变位置

}

}

void show(Stack *m1)//输出栈中的数据

{

int top,base;

top=m1->top;

base=m1->base;

while(top>base)

{

printf("%c,",m1->data[--top]);

}

printf("\n");

}

int isOperate(char temp)//是否是操作符

{

if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')

{

return 1;

}

return 0;

}

int isValue(char temp)//是否是数值

{

if(temp>='0'&&temp<='9')//

{

return 1;

}

else

{

return 0;

}

}

int isAvail(char temp)//是否有效字符

{

if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和数值的话,则它是非法的

{

return 1;

}

return 0;

}

int detect(char temp)//搜索矩阵位置

{

int i=0;

char oper[7]={'+','-','*','/','(',')','#'};

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

{

if(temp==oper[i])

{

return i;

}

}

}

char Priority(char temp,char optr)//判断优先级

{

/**//*

+ - * / ( ) #

1 2 3 4 5 6 7

+ 1 < < < < > > >

- 2 < < < < > > >

* 3 > > < < > > >

/ 4 > > < < > > >

( 5 > > > > > = 0

) 6 < < < < = 0 >

# 7 < < < < > 0 =

*/

int row ,col;

char priority[7][7]={/**//* + - * / ( ) # */

{'<','<','<','<','>','>','>'},

{'<','<','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','>','>','>','=','>'},

{'<','<','<','<','=','0','>'},

{'<','<','<','<','>','<','='},

};

row = detect(temp);//找出对应的矩阵下标;

col = detect(optr);

// printf("%d,%d",row,col);

//优先级存储在一个7x7的矩阵中,对应关系上图;

return priority[row][col];

}

char evaluate(int a,int b,char oper)

{

switch(oper)

{

case '+': return a+b+'0';

case '-': return a-b+'0';

case '*': return a*b+'0';

case '/': return a/b+'0';

default : return 0+'0';

}

}

int calculateExpress(char *express)//计算表达式

{

int result=0;

int a,b;

// char oper,result;

Stack OPTR,OPND;//OPTR存储操作符,OPND操作数值

init(&OPTR);

init(&OPND);

push('#',&OPTR);//默认第一个位'#'

////////////////////-算法-////////////////////////////

while(*express!='\0')

{

char temp;

temp= *(express);

printf("---------------------------------\n");

printf("当前的符号为%c\n",temp);

if(isAvail(temp))//是否是有效字符

{

if(isOperate(temp) )//输入的是操作符

{

char oper,result;

char optr = getTop(&OPTR);//栈中top位的操作符

printf("栈顶操作符位:%c\n",optr);

char prior = Priority(temp,optr);//判断优先级

switch(prior)

{

case '>':

push(temp,&OPTR);

printf("将符号位%c入栈\n",temp);

express++;

break;

case '<':

//int a,b;

//char oper,result;

a=pop(&OPND)-'0';//存在栈中的都是char字符

b=pop(&OPND)-'0';

oper=pop(&OPTR);

result=evaluate(b,a,oper);//出栈一个操作符,计算结果

//printf("%d",result-'0');

push(result,&OPND);//结果入OPND

printf("%d%c%d结果为:%d\n",b,oper,a,result-'0');

break;

case '=':

//消除括号

pop(&OPTR);

printf("消除括号\n");

express++;

break;

}

}

if(isValue(temp))//输入的是数值

{

push(temp,&OPND);//将数值位入栈;

express++;

printf("将数值%c压入栈\n",temp);

//show(&OPND);

}

}

else //表达式中有非法字符

{

printf("表达式中有非法字符\n");

exit(-1);//退出程序

}

}

// show(&OPND);

// show(&OPTR);

return getTop(&OPND)-'0';

}

void inputExpress(char *express)//输入表达式

{

int length=0;

printf("请输入一个表达式:");

scanf("%s",express);

int len =strlen(express);

express[len]='#';//表达式最后一位默认为'#';

express[len+1]='\0';

}

void output(char *express,int result)//输出表达式

{

int i=0;

printf("----------------------------------------\n表达式:");

while(express[i]!='#')

{

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

i++;

}

printf("=%d\n",result);

}

int main()

{

char express[100];//表达式

int result =0;

inputExpress(express);//输入表达式

result = calculateExpress(express);//计算表达式;

output(express,result); //输出表达式

//、、、、、、、、、、、、、测试优先级。

/**//*

char m='7' ;

m=Priority('+','*');

printf("优先级为%c",m);

int m=evaluate(5,6,'m');

printf("%d",m);

*/

return 0;

}

关于“用C语言编写一个简单的计算器1”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[褒佳怡]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202606-184746.html

(193)

文章推荐

  • 教程辅助!榆林打锅子有挂吗(开挂神器怎么用)

    榆林打锅子有挂吗网上科普有关“榆林打锅子有挂吗”话题很是火热,小编也是针对榆林打锅子有挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,榆林打锅子有挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都会发现很

    2025年04月11日
    99
  • 必备科技“魅力四川麻将开挂会封号嘛”(其实是有挂)

    网上科普有关“魅力四川麻将开挂会封号嘛”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,魅力四川麻将开挂会封号嘛这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌

    2025年04月23日
    64
  • 实测辅助”天天斗地主真人版透视神器(开挂神器怎么用)

    天天斗地主真人版透视神器网上科普有关“天天斗地主真人版透视神器”话题很是火热,小编也是针对天天斗地主真人版透视神器寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,天天斗地主真人版透视神器这款游戏可以开挂的,确实是有挂的,通过微信【】很

    2025年05月21日
    52
  • 实测辅助”洪湖麻将挂怎么买”其实确实有挂

    网上科普有关“洪湖麻将挂怎么买”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,洪湖麻将挂怎么买这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌都会发现很多用户

    2025年05月25日
    59
  • 实测辅助”老友麻将到底有挂吗”(确实有挂)

    老友麻将到底有挂吗网上科普有关“老友麻将到底有挂吗”话题很是火热,小编也是针对老友麻将到底有挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,老友麻将到底有挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都

    2025年05月26日
    49
  • 6秒懂!小甘麻将开挂多少钱(详细透视开挂教程)

    网上科普有关“小甘麻将开挂多少钱”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,小甘麻将开挂多少钱这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌都会发现很多

    2025年06月09日
    39
  • 6秒懂!灯塔麻将究竟有挂吗”分享装挂技巧步骤

    灯塔麻将究竟有挂吗网上科普有关“灯塔麻将究竟有挂吗”话题很是火热,小编也是针对灯塔麻将究竟有挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,灯塔麻将究竟有挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都

    2025年06月25日
    30
  • 6秒懂!炫酷众娱麻将怎么用挂”分享装挂技巧步骤

    网上科普有关“炫酷众娱麻将怎么用挂”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,炫酷众娱麻将怎么用挂这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌都会发现

    2025年06月25日
    42
  • 疫情死亡人口比例(疫情死亡人数分析)

    疫情发生在哪一年?1、新冠疫情从发生到结束历经数年,对全球产生重大影响。疫情初现2019年底,在湖北省武汉市首次发现不明原因肺炎病例,随后被确定为新型冠状病毒感染。2020年1月,世界卫生组织宣布将其列为国际关注的突发公共卫生事件,新冠疫情在全球范围开始迅速传播。2、新冠疫情主要是从2019年

    2025年07月31日
    66
  • 开挂工具“欢乐岛二人麻将透明挂怎么开(万能开挂器通用版)

    网上科普有关“欢乐岛二人麻将透明挂怎么开”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,欢乐岛二人麻将透明挂怎么开这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中

    2025年08月30日
    33

发表回复

本站作者后才能评论

评论列表(4条)

  • 褒佳怡
    褒佳怡 2026年06月11日

    我是小熊号的签约作者“褒佳怡”!

  • 褒佳怡
    褒佳怡 2026年06月11日

    希望本篇文章《用C语言编写一个简单的计算器1》能对你有所帮助!

  • 褒佳怡
    褒佳怡 2026年06月11日

    本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 褒佳怡
    褒佳怡 2026年06月11日

    本文概览:网上科普有关“用C语言编写一个简单的计算器1”话题很是火热,小编也是针对用C语言编写一个简单的计算器1寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望...