计算器C语言程序
C语言简单计算器

C语言编程实现一个简单的四则运算计算器附录:程序清单#include<stdio.h>main(){floata,b,c,d,t;char s;printf("欢迎使用我的计算器,祝您用的愉快!\n");printf("\n输入要运算的数据,例如 1+2-3*4 或 1*3/2+5\n"); printf("\n输入 n 退出\n");loop: scanf("%f",&a);scanf("%c",&s);if (s=='n'){return;}switch(s){case '+': scanf("%f",&b); scanf("%c",&s);switch(s){case '+': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b+c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b+c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b+c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b+c/d);break;}break;case '-': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b-c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b-c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b-c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b-c/d);break;}break;case '*': scanf("%f",&c);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b*c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b*c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b*c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b*c/d);break;}break;case '/': scanf("%f",&c);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b/c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b/c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b/c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a+b/c/d);break;}break;}break;case '-': scanf("%f",&b);scanf("%c",&s);switch(s){case '+': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b+c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b+c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b+c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b+c/d);break;}break;case '-': scanf("%f",&c);scanf("%c",&s); switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b-c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b-c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b-c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b-c/d);break;}break;case '*': scanf("%f",&c);scanf("%c",&s); switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b*c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b*c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b*c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b*c/d);break;}break;case '/': scanf("%f",&c);scanf("%c",&s); switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b/c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b/c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b/c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a-b/c/d);break;}break;}break;case '*': scanf("%f",&b);scanf("%c",&s);switch(s){case '+': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b+c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b+c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b+c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b+c/d);break;}break;case '-': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b-c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b-c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b-c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b-c/d);break;}break;case '*': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b*c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b*c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b*c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b*c/d);break;}break;case '/': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b/c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b/c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b/c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a*b/c/d);break;}break;}break;case '/': scanf("%f",&b);scanf("%c",&s);switch(s){case '+': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b+c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b+c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b+c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b+c/d);break;}break;case '-': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b-c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b-c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b-c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b-c/d);break;}break;case '*': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b*c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b*c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b*c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b*c/d);break;}break;case '/': scanf("%f",&c);scanf("%c",&s);switch(s){case '+':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b/c+d);break;case '-':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b/c-d);break;case '*':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b/c*d);break;case '/':scanf("%f",&d);scanf("%c",&s);printf("=%f",a/b/c/d);break;}break;}break;default :printf("error\n");break;}printf("\n继续\n");goto loop;printf("\n谢谢您的使用\n");}。
C语言基础—计算器程序

2.1.3 整型数据
2.1 数据类型与表达式
清华大学出版社
2.1 数据类型与表达式
2.1.3 整型数据
说明: (1) 实际上,常用的整型变量类型是:int 或 short。 (2) 特别强调:short 所适用的数据范围为 -32768~32767。
例如:short x=32768; x的赋值超出了-32768~32767的范围,会出现数据溢出,程序运行结 果错误。为避免数据溢出,超出-32768~32767范围的数据,要定义为 int 或long。
清华大学出版社
2.1 数据类型与表达式
2.1.1 C语言数据类型
所谓数据类型,就是在存储数据时,编译系统根据数据的大小分配不同 大小的存储空间,即不同类型的数据分配不同长度的存储单元,采用不同的存 储形式。例如:基本整型(int),Visual C++6.0分配4字节存储空间,字符型
(char),Visual C++6.0分配1字节存储空间。
C语言程序设计
清华清大华学大出学出版版社社
项目2 计算器程序
学习目标
熟练掌握C语言的常量与变量 掌握C语言的数据类型分类 重点掌握C语言的整型和浮点型数据的表示方法、
分类、存储单元及取值范围 重点掌握算术运算符和算术表达式 掌握赋值运算符和赋值表达式 重点掌握整型、浮点型数据的格式化输入与输出 理解C语言程序设计的步骤
}
清华大学出版社
2.1 数据类型与表达式
2.1.5 基本算术运算符和算术表达式
1.基本的算术运算符
清华大学出版社
2.1 数据类型与表达式
2.1.5 基本算术运算符和算术表达式
说明:
c语言简易计算器报告

C语言简易计算器报告介绍本文将介绍如何使用C语言编写一个简易的计算器。
计算器可以进行基本的四则运算,包括加法、减法、乘法和除法。
设计思路1.首先,我们需要定义计算器的操作符和操作数。
操作符可以是+, -, *,/,操作数是两个整数或浮点数。
2.接下来,我们需要编写一个函数来接收用户输入的操作符和操作数,并进行相应的计算。
我们可以将这个函数命名为calculate。
3.在calculate函数中,我们根据用户输入的操作符,执行相应的计算操作,并返回计算结果。
如果用户输入的操作符不合法,我们将返回一个错误提示。
4.最后,我们在主函数中调用calculate函数,并显示计算结果。
代码实现下面是实现一个简易计算器的C语言代码:#include <stdio.h>float calculate(char operator, float operand1, float operand2) { float result;switch (operator) {case'+':result = operand1 + operand2;break;case'-':result = operand1 - operand2;break;case'*':result = operand1 * operand2;break;case'/':if (operand2 != 0) {result = operand1 / operand2;}else {printf("错误:除数不能为0\n");return-1; // 返回错误代码}break;default:printf("错误:无效的操作符\n");return-1; // 返回错误代码}return result;}int main() {char operator;float operand1, operand2;float result;printf("请输入操作符和操作数(格式为:操作数1 操作符操作数2):");scanf("%f %c %f", &operand1, &operator, &operand2);result = calculate(operator, operand1, operand2);if (result != -1) {printf("计算结果为:%f\n", result);}return0;}使用说明1.用户需要按照指定格式输入操作数和操作符,例如:2 + 3。
速算,简易计算器c语言代码,可实现加减乘除

速算,简易计算器c语⾔代码,可实现加减乘除#include"stdio.h"#include"math.h"#include"stdlib.h"struct optrstyle{int top;char stack[20];}struct opndstyle{int top;int stack[20];}void main(){char ch;while(1){printf("-----------------------------------------\n");printf("|-----------欢迎来到速算24--------------|\n");printf("|----------是否开始游戏------------|\n");printf("|--------- 开始游戏请按'Y'-------------|\n");printf("|--------- 退出游戏请按其他键-------------|\n");printf("-----------------------------------------\n");scanf("%c",&ch);if(ch=='Y' or ch=='y'){}elsebreak;}}int EvaluateExpression(){// 算术表达式求值的算符优先算法。
设OPTR 和OPND 分别为运算符栈和运算数栈,OP 为运算符集合。
InitStack(OPTR);Push(OPTR,'#');InitStack(OPND);c = getchar();while(c!='#' || GetTop(OPTR)!='#'){if(!In(c,OP)){Push((OPND,c);c = getchar();} // 不是运算符则进栈elseswitch(Precede(GetTop(OPTR),c)){case '<': // 栈顶元素优先权低Push(OPTR,c);c = getchar();break;case '=': // 脱括号并接收下⼀字符Pop(OPTR,x); c = getchar();break;case '>': // 退栈并将运算结果⼊栈Pop(OPTR,theta);Pop(OPND,b);Pop(OPND,a);Push(OPND,Operate(a,theta,b));break;}// switch}// whilereturn GetTop(OPND);}// EvaluateExpressionint changecard( char a[]){if()void InitStack(Stack &S){S.top=-1;}int Pop1(Stack &S){if(S.top==-1){printf("stack is empty!");exit (1);}ElemType temp=S.stack[S.top]; S.top--;return temp;}int GetTop1(Stack &S){if(S.top==-1){printf("stack is empty!");exit (1);}return S.stack[S.top];}char Pop2(Stack &S){if(S.top==-1){printf("stack is empty!");exit (1);}ElemType temp=S.stack[S.top]; S.top--;return temp;char GetTop2(Stack &S){if(S.top==-1){printf("stack is empty!");exit (1);}return S.stack[S.top];}char Precede(char a,char b)//算符优先级函数{ char temp;switch(a){case '+','-':{if (b=='*' or b=='/' or b=='(')temp='<';else temp='>';}break;case '*','/':{if(b=='(')temp='<';else temp='>';}break;case '(':{if(b==')')temp='=';elsetemp='<';}break;case ')':temp='>';break; case '#':{if(b=='#') temp='='; else temp='<'; }break; default break; }return temp; }。
PTA简单计算器(C语言)

8{
9
scanf("%d",&b);
10
if(c=='/'#34;ERROR\n");
12
return 0;
13
}
14
switch(c)
15
{
16
case '+':a=a+b;break;
17
case '-':a=a-b;break;
18
case '*':a=a*b;break;
输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例: 1+2*10-10/2= 输出样例: 10
1 #include<stdio.h>
2 int main()
3{
4 int a,b;
5 char c;
6 scanf("%d",&a);
7 while((c=getchar())!='=')
假设计算器只能进行加减乘除运算运算数和结果都是整数四种运算符的优先级相同按从左到右的顺序计算
PTA简单计算器( C语言)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
19
case '/':a=a/b;break;
20
default:printf("ERROR\n");return 0;
STC89c52单片机 计算器C语言程序

STC89c52单片机计算器C语言程序STC89C52单片机计算器C语言程序下面是STC89C52单片机计算器的C语言程序,适用于P2位选P0段选时钟12MHZ。
程序代码如下:includedefine uchar unsigned chardefine uint unsigned intuchar Led[17] = {0x3f。
0x06.0x5b。
0x4f。
0x66.0x6d。
0x7d。
0x07.0x7f。
0x6f。
0x77.0x7c。
0x39.0x5e。
0x79.0x71.0x00};long float Number[]={0,0,0,0};uchar A[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};long int D[] = {0,0,0,0,0,0,0,0};uchar code C[] = {0x0.0xFE。
0xFD。
0xFB。
0xF7.0xEF。
0xDF。
0xBF。
0x7F};uchar k=16;uchar b;long float Out_put;uchar e=0;uchar g=0;uchar L=0;uchar g1=0;uchar g2=0;uchar g3=0;uchar g4=0;char j=-1;uchar m=0;uchar n=0;uchar x=0;程序中包含了头文件和宏定义,以及数码管段选、数码管显示位控制寄存器、数码管显示内容寄存器、数码管位选、按键控制变量等各种变量。
其中,Led数组存储了数码管的段选值,Number数组存储了数字,A数组存储了数码管的位选值,D数组存储了数码管的显示内容,C数组存储了数码管的位选值,k、b、Out_put、e、g、L、g1、g2、g3、g4、j、m、n、x 等变量用于按键控制和运算。
代码中没有明显的格式错误,可以直接使用。
下面是已经修改过的文章:uchar xo = 0./*控制开始计数小数点的变量*/long int result;void Delay(uint o) {uint i。
C语言实现简易计算器(可作加减乘除)

C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。
用c语言写的简单计算器

⽤c语⾔写的简单计算器这是⾃⼰在学习C语⾔,凭借⾃⼰的兴趣,将课本的知识运⽤后整理的关于C语⾔计算器的代码。
计算器实现的功能有:加、减、乘、除、求余。
功能简单,但对于初学者的我来说能把它写出来,排除每个错误依旧是个难题。
前后两种代码是由⾃⼰所学东西的质量决定的,如有错误,请前辈指出。
最初版本的计算器:1 #include<stdio.h>23int checkPassword();45int add(int x,int y);67int sub(int x,int y);89int multi(int x,int y);1011float quo(float x1,float y1);1213int com(int x,int y);1415int x,y;1617int result;1819int select;2021float result1;2223float x1,y1;2425int success,psw;2627int a;2829int i;3031int t;323334353637void main()3839 {4041 printf("请输⼊密码:\n");4243 i=0;4445do{46474849 scanf("%d",&a);50515253if( a!=1234 && i<2)5455 printf("请重新输⼊密码:\n");5657else5859 i=3;6061 i++;6263 }while( i<=2);6465if(a==1234)6667 {6869for(t=1;t!=6;t=select)7071 {72737576777879 printf("+=============================+\n"); 8081 printf("+======计=算=器=主=菜=单======+\n"); 8283 printf("+=============================+\n"); 8485 printf("+==========1、加法==========+\n"); 8687 printf("+==========2、减法==========+\n"); 8889 printf("+==========3、乘法==========+\n"); 9091 printf("+==========4、除法==========+\n"); 9293 printf("+==========5、求余==========+\n"); 9495 printf("+==========6、退出==========+\n"); 9697 printf("+=============================+\n"); 9899100101102103 printf("请输⼊你的选择:\n");104105 scanf("%d",&select);106107108109switch(select)110111 {112113114115case1:116117 printf("请输⼊两个数:\n");118119 scanf("%d%d",&x,&y);120121 result=add(x,y);122123 printf("%d+%d=%d\n",x,y,result);124125break;126127case2:128129 printf("请输⼊两个数:\n");130131 scanf("%d%d",&x,&y);132133 result=sub(x,y);134135 printf("%d-%d=%d\n",x,y,result);136137break;138139case3:140141 printf("请输⼊两个数:\n");142143 scanf("%d%d",&x,&y);144145 result=multi(x,y);146147 printf("%d*%d=%d\n",x,y,result);148149break;150151case4:152153 printf("请输⼊两个数:\n");154155 scanf("%f%f",&x1,&y1);156157 result1=quo(x1,y1);159 printf("%f/%f=%f\n",x1,y1,result1); 160161break;162163case5:164165 printf("请输⼊两个数:\n");166167 scanf("%d%d",&x,&y);168169 result=com(x,y);170171 printf("%d/%d=%d\n",x,y,result); 172173break;174175case6:176177break;178179default:180181 printf("请输⼊1~5之间的数\n"); 182183break;184185186187188189 }190191 }192193 }194195 }196197int add(int x,int y)198199 {200201int sum;202203 sum=x+y;204205return sum;206207 }208209int sub(int x,int y)210211 {212213int sub;214215 sub=x-y;216217return sub;218219 }220221int multi(int x,int y)222223 {224225int multi;226227 multi=x*y;228229return multi;230231 }232233float quo(float x,float y)234235 {236237float quo;238239 quo=x/y;240241return quo;243 }244245int com(int x,int y)246247 {248249int com;250251 com=x%y;252253return com;254255 }256257int checkPassword( int psw)258259 {260261if(psw==1234)262263 success=1;264265else266267 success=-1;268269return success;270271 }改版后的计算器:1 #include<stdio.h>23int yanzheng(int );45void caidan();67void jiafa(int,int);89void jianfa(int,int);1011void chengfa(float,float);1213void chufa(float,float);1415void mo(int,int);16171819void main(){2021int x,m;2223int y;2425float a,b;2627 printf("请输⼊密码:\n");2829 scanf("%d",&x);3031 m=yanzheng(x);3233if(m==1){3435 caidan();3637//int y;3839//float a,b;4041for(;y!=6;){4243 printf("请输⼊选项:\n"); 4445 scanf("%d",&y);4647if(y>=1 && y<6){4849 printf("请输⼊要运算的两个数:\n");5051 scanf("%f%f",&a,&b);5253 }54555657switch(y){5859case1 :jiafa(a,b);break;6061case2 :jianfa(a,b);break;6263case3 :chengfa(a,b);break;6465case4 :chufa(a,b);break;6667case5 :mo(a,b);break;6869case6 :break;7071default : printf("选项输⼊错误!请重试\n");break; 7273 }7475 }7677 }7879 }808182838485int yanzheng(int x){8687int i,m;8889for(i=1,m=0;i<3;i++){9091if(x==1234){9293 m=1;9495break;9697 }9899 printf("请重新出⼊密码:");100101 scanf("%d",&x);102103104105 }106107return m;108109 }110111112113void caidan(){114115 printf("+=============================+\n"); 116117 printf("+======计=算=器=主=菜=单======+\n"); 118119 printf("+=============================+\n"); 120121 printf("+==========1、加法==========+\n"); 122123 printf("+==========2、减法==========+\n"); 124125 printf("+==========3、乘法==========+\n"); 126127 printf("+==========4、除法==========+\n"); 128129 printf("+==========5、求余==========+\n"); 130131 printf("+==========6、退出==========+\n"); 132133 printf("+=============================+\n"); 134135 }136137138139void jiafa(int x,int y){140141int sum;142143 sum=x+y;144145 printf("%d\n", sum);146147 }148149150151void jianfa(int x,int y){152153int cha;154155 cha=x-y;156157 printf("%d\n", cha);158159 }160161162163void chengfa(float x,float y){164165float ji;166167 ji=x*y;168169 printf("%f\n", ji);170171 }172173174175void chufa(float x,float y){176177float shang;178179 shang=x/y;180181 printf("%f\n", shang);182183 }184185186187void mo(int x,int y){188189int mo;190191 mo=x%y;192193 printf("%d\n", mo);194195 }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(flagb==1) { if(b5==0xff)
{b=b*10+table[num]; bzy(); b0=table1[num]; fuzhi(); display(); } } else { b=table[num]; b0=table1[num]; fuzhi(); display(); flagb=1; } } } void ag_eq()//再次按下等于时 { if(flagz==1) { a=c; } } void jieguo() { if(c<=1000000) {qh(); display();qn();ag_eq(); } else {a5=0x86;a0=a1=a2=a3=a4=0xff;display();} } void keyscan() { P3=0xfe; if(P3!=0xfe) { delay(10); if(P3!=0xfe) { temp=P3&0xf0; switch(temp)
flag=1; fuhao=4,b=0; } } } P3=0xfd; if(P3!=0xfd) { delay(10); if(P3!=0xfd) { temp=P3&0xf0; switch(temp) { case 0xe0:num=4;break; case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=7;break; } while(P3!=0xfd); if(num==4||num==5||num==6) { panduan(); } else { flag=1; fuhao=3,b=0; } } }
a0=0xc0;b0=0xc0; a1=a2=a3=a4=a5=b1=b2=b3=b4=b5=0xff; flag=0,flaga=0,flagb=0;flagz=0; a=0,b=0,c=0; } void qn() { b0=b1=b2=b3=b4=b5=0xff; } uchar code table1[]={ 0xf8,0x80,0x90,0, 0x99,0x92,0x82,0, 0xf9,0xa4,0xb0,0, 0,0xc0,0,0}; uchar code table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint code table[]={ 7,8,9,0, 4,5,6,0, 1,2,3,0, 0,0,0,0 }; void delay(uint xms) { uint i,j; for(i=xms;i>0;i--)
case 15:{ flag=1;fuhao=1;display(),b=0;};break;
{ display(); keyscan();
} } 仿真图:
仿真所选原件。
case 13: if(flag==0) {
if(flaga==1) {
a=a*10+table[num]; azy(); a0=table1[num]; display(); } else { if(a==0) {display();} else {a0=table1[num]; a=a*10+table[num]; display(); flaga=1; } } } else { if(flagb==1) { b=b*10+table[num]; bzy(); b0=table1[num]; fuzhi(); display(); } else { if(b==0) {display();} else {b0=table1[num]; b=a*10+table[num]; fuzhi(); display(); flagb=1; } } } display(); break;
} } } } void main() { init(); while(1)
case 14:flagz=1; if(fuhao==1) { c=a+b;jieguo(); /*qh(); display(); qn();ag_eq();*/ } else if(fuhao==2) { if(a-b>=0) { c=a-b; qh(); display();ag_eq(); } else { c=b-a; qh(); display(); } qn();ag_eq(); } else if(fuhao==3) { c=a*b; qh(); display();qn();ag_eq(); } else if(fuhao==4) { c=a/b; qh(); display();qn();ag_eq(); } break;
数码管显示计算器 C 语言程序如下: #include <reg51.h> #include <math.h> #define uchar unsigned char #define uint unsigned int uchar i,j,temp,num; uchar a0,a1,a2; uchar flag,flaga,flagb,fuhao; long a,b,c,flagz; void init() {
P3=0xfb; if(P3!=0xfb) {
delay(10); if(P3!=0xfb) {
temp=P3&0xf0; switch(temp) {
case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break; case 0x70:num=11;break; } while(P3!=0xfb); if(num==8||num==9||num==10) { panduan(); } else { flag=1; fuhao=2,b=0; } } } P3=0xf7; if(P3!=0xf7) { delay(10); if(P3!=0xf7) { temp=P3&0xf0; switch(temp) { case 0xe0:num=12;break; case 0xd0:num=13;break; case 0xb0:num=14;break; case 0x70:num=15;break; } while(P3!=0xf7); switch(num) { case 12:;break;
if(a5!=table2[0]||a4!=table2[0]||a3!=table2[0]||a2!=table2[0]||a1!=table2[0]) {P2=0x00; P0=a1; P2=0X10; delay(1); }
P2=0x00; P0=a0; P2=0X20; delay(1); } void azy() { a5=a4; a4=a3; a3=a2; a2=a1; a1=a0; } void bzy() { b5=b4;
for(j=110;j>0;j--); } void display() { if(a5!=table2[0])
{P2=0x00; P0=a5; P2=0X01; delay(1);
}
if(a5!=table2[0]||a4!=table2[0]) {P2=0x00; P0=a4; P2=0X02; delay(1); }
if(flaga==1) { if(a5==0xff)
{a=a*10+table[num]; azy(); a0=table1[num]; display(); } } else { a=table[num]; a0=table1[num]; display(); flaga=1; } } else {
{ case 0xe0:num=0;break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break;
} while(P3!=0xfe); if(num==0||num==1||num==2) {
panduan(); } else {
b4=b3; b3=b2; b2=b1; b1=b0; } void fuzhi() { a5=b5; a4=b4; a3=b3; a2=b2; a1=b1; a0=b0; } void qh() { a0=table2[c%10]; a1=table2[(c/10)%10]; a2=table2[(c/100)%10]; a3=table2[(c/1000)%10]; a4=table2[(c/1000)%10]; a5=table2[(c/10000)%10]; } void panduan() { if(flag==0) {
if(a5!=table2[0]||a4!=table2[0]||a3!=table2[0]) {P2=0x00; P0=a3; P2=0X04; delay(1); }
if(a5!=table2[0]||a4!=table2[0]||a3!=table2[0]||a2!=table2[0]) {P2=0x00; P0=a2; P2=0X08; delay(1); }