用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/202604-184746.html

(179)

文章推荐

  • 专用辅助“小程序途游麻将绝对有挂(万能开挂器通用版)

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

    2025年03月12日
    65
  • 今日教程“微乐内蒙麻将专用神器”(其实是有挂)

    今日教程“微乐内蒙麻将专用神器网上科普有关“今日教程“微乐内蒙麻将专用神器”话题很是火热,小编也是针对今日教程“微乐内蒙麻将专用神器寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,今日教程“微乐内蒙麻将专用神器这款游戏可以开挂的,确实

    2025年03月13日
    69
  • 上海大学是二本吗

    网上科普有关“上海大学是二本吗”话题很是火热,小编也是针对上海大学是二本吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。上海大学是一本。上海大学,简称上大,是上海市属、国家“211工程”重点建设的综合性大学,是国家教育部与上海市人民政府共建高校(省部共建高校

    2025年03月18日
    361
  • 怎样才能选择一个好的职业学校

    网上科普有关“怎样才能选择一个好的职业学校”话题很是火热,小编也是针对怎样才能选择一个好的职业学校寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。选择学校要从以下几点出发:1.学校的师资。好老师教出好学生,老师都不会的技能肯定教不会学生,看学校的师资力量是否

    2025年03月20日
    253
  • 疫情多久才能出国旅游(疫情什么时候可以出国工作)

    什么时候可以出国旅游?1、出国旅游没有年龄限制,只要办齐手续就可以出国。如果是跟团旅游的话就不会很自由了,因为中国公民80岁以上出国旅游就要受限了。一般旅行社规定超过80岁就不受理的,70岁以上需要出具医院体检证明才可以。2、随着国家疫情方控制政策逐渐放开了,全国交通流动都是不需要检查核酸的,人们

    2025年03月26日
    82
  • 必备科技“龙喵牛牛开挂方法(透视挂真的假的)

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

    2025年04月23日
    72
  • 松花蛋拌豆腐的做法

    网上科普有关“松花蛋拌豆腐的做法”话题很是火热,小编也是针对松花蛋拌豆腐的做法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1.松花蛋拌豆腐松花蛋拌豆腐求松花蛋拌豆腐的做法皮蛋拌豆腐的做法详细介绍菜系及功效:家常菜谱清热解毒食谱健脾

    2025年06月17日
    177
  • 人口出生死亡(人口出生死亡人数表)

    人口出生率和死亡率各指什么?1、人口出生率指的是一定时期内出生的活产婴儿数与当年平均人口数的比率,而人口死亡率指的是一定时期内内一定地区死亡人数与平均人口数之比,两者均用千分率表示。人口出生率:是衡量一个国家或地区人口增长速度和生育水平的重要指标。高出生率通常意味着较高的自然增长率,反之则较低

    2025年08月23日
    18
  • 开挂工具“微乐天津麻将开挂方法(开挂神器怎么用)

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

    2025年08月30日
    11
  • 开挂工具“贵州捉鸡麻将游戏怎么开挂(详细透视开挂教程)

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

    2025年08月31日
    7

发表回复

本站作者后才能评论

评论列表(4条)

  • 褒佳怡
    褒佳怡 2026年04月15日

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

  • 褒佳怡
    褒佳怡 2026年04月15日

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

  • 褒佳怡
    褒佳怡 2026年04月15日

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

  • 褒佳怡
    褒佳怡 2026年04月15日

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