用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://www.xx-scm.com/cshi/202607-184746.html

(198)

文章推荐

  • 专用辅助“微乐窝龙自动托管怎样赢(真的有挂)

    专用辅助“微乐窝龙自动托管怎样赢网上科普有关“专用辅助“微乐窝龙自动托管怎样赢”话题很是火热,小编也是针对专用辅助“微乐窝龙自动托管怎样赢寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,专用辅助“微乐窝龙自动托管怎样赢这款游戏可以开挂

    2025年03月12日
    65
  • 文科467分能上什么大学

    网上科普有关“文科467分能上什么大学”话题很是火热,小编也是针对文科467分能上什么大学寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。文科467分能上的大学推荐如下:南京工业职业技术大学(B)(最低467分)、浙江邮电职业技术学院(最低467分)、重庆工贸

    2025年03月17日
    350
  • 沈阳工业大学2023年专升本分数线

    网上科普有关“沈阳工业大学2023年专升本分数线”话题很是火热,小编也是针对沈阳工业大学2023年专升本分数线寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。2023年沈阳工业大学专升本分数线为240分。1、分数线定义与作用专升本分数线是指报考高等教育自学考试

    2025年03月23日
    292
  • 疫情全球各国死亡人数排名榜(疫情各国死亡率排名)

    国外疫情最严重的国家排名美国:目前疫情总量居首位,近期新增病例出现快速反弹。巴西:疫情总量居高不下,新增病例数位列全球第二。印度尼西亚:疫情总量较高,新增病例数有所增长。英国:疫情总量较高,新增病例数虽有增长,但速度放缓。印度:疫情总量持续攀升,新增病例数较多。西班牙:25496人死亡,1

    2025年03月24日
    799
  • 必备科技“微信雀神麻将怎样提高胜率”实测确实有挂

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

    2025年04月22日
    66
  • HHpoker怎么开挂”分享装挂技巧步骤

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

    2025年05月18日
    55
  • 辅助开挂工具“乐博娱乐有挂吗”果然有挂

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

    2025年07月02日
    36
  • 002368股票(002368股票行情)

    中国电子科技集团有限公司的上市公司有哪些普天科技(股票代码:002544)是中国电子科技集团有限公司实际控制的国有控股上市公司。普天科技于2000年由中国电子科技集团公司第七研究所民品部门转制组建而成,注册资本81亿元,资产总额约94亿元。2024年该公司营业收入近50亿元,拥有12个子公司、33

    2025年07月08日
    48
  • 辅助教程实测“吉祥麻将怎么用挂(详细透视开挂教程)

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

    2025年07月13日
    38
  • 教程开挂辅助“福州麻将来好牌几率(如何开挂)

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

    2025年08月06日
    23

发表回复

本站作者后才能评论

评论列表(4条)

  • 褒佳怡
    褒佳怡 2026年07月17日

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

  • 褒佳怡
    褒佳怡 2026年07月17日

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

  • 褒佳怡
    褒佳怡 2026年07月17日

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

  • 褒佳怡
    褒佳怡 2026年07月17日

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