用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

(194)

文章推荐

  • 教程辅助!“手机软件透视看牌(详细真的有挂)

    教程辅助!“手机软件透视看牌网上科普有关“教程辅助!“手机软件透视看牌”话题很是火热,小编也是针对教程辅助!“手机软件透视看牌寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,教程辅助!“手机软件透视看牌这款游戏可以开挂的,确实是有挂的

    2025年03月16日
    71
  • 789大菠萝要怎么开挂开挂”分享装挂技巧步骤

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

    2025年05月18日
    58
  • 6秒懂!凉山中心跑得快怎么上挂”实测确实有挂

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

    2025年05月31日
    65
  • 6秒懂!开心斗一番到底有挂吗”确实真的有挂

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

    2025年06月09日
    32
  • 辅助教程实测“乐友湘西怎么一直输(真的有挂)

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

    2025年07月12日
    30
  • 辅助教程实测“嘻哈麻将必赢方法”实测确实有挂

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

    2025年07月13日
    33
  • 教程开挂辅助“多乐贵阳捉鸡麻将怎么稳赢”(其实是有挂)

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

    2025年08月04日
    22
  • 实测分析“天天军棋可以开挂多少钱”(确实有挂)

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

    2025年08月19日
    24
  • 油炸酿丸子番茄饭怎么做好吃

    网上科普有关“油炸酿丸子番茄饭怎么做好吃”话题很是火热,小编也是针对油炸酿丸子番茄饭怎么做好吃寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。食材主料米饭0适量猪肉0适量胡萝卜0适量番茄0适量辅料葱0适量姜0适量酱油0适量料酒0适量白胡椒粉0适量盐熟豆油0步骤

    2025年12月24日
    194
  • 冠心病课件题目,冠心病课件ppt简短

    冠心病护理查房PPT课件1、LOGO冠心病护理查房目录1病史汇报2冠心病的治疗3护理评估4护理措施及评价5出院指导病例摘要简要病史患者李XX,男,76岁,入院前一天无明显诱因出现胸闷,气喘,以活动后明显,感肢体乏力,麻木,无发热咳嗽咳痰,于2015-10-2920:51急诊入院,以“冠心病,陈旧性

    2026年02月13日
    20

发表回复

本站作者后才能评论

评论列表(4条)

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

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

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

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

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

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

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

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