速算,简易计算器c语言代码,可实现加减乘除

合集下载

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语言制作简单的计算器

c语言制作简单的计算器

c语言制作简单的计算器在计算机编程领域中,C语言是一种广泛使用的编程语言之一。

它具有简单易学的特点,并且能够进行复杂的计算和逻辑处理。

今天,我们就来学习一下如何使用C语言来制作一个简单的计算器。

首先,我们需要明确我们计算器的功能和界面设计。

本次制作的计算器将具有基本的四则运算功能,即加法、减法、乘法和除法。

我们将在控制台中实现计算器的操作,并通过简单的用户界面进行交互。

接下来,我们需要创建一个C语言程序的框架。

首先,我们需要包含头文件,以便在程序中使用各种函数和变量。

我们可以使用"#include" 来引入头文件,例如:```c#include <stdio.h>```然后,我们需要定义主函数 `main()`。

在这个函数中,我们将编写计算器的逻辑代码。

让我们开始编写函数吧!首先,我们需要声明一些变量来存储用户输入的数字和运算符。

我们可以使用 `int` 来定义整数变量,并用 `char` 定义字符变量。

例如:```cint num1, num2, result;char operator;```接下来,我们需要提示用户输入要进行的运算,并读取用户输入的数字和运算符。

我们可以使用 `printf` 和 `scanf` 函数来完成这个任务,例如:```cprintf("请输入第一个数字: ");scanf("%d", &num1);printf("请输入运算符(+, -, *, /): ");scanf(" %c", &operator);printf("请输入第二个数字: ");scanf("%d", &num2);```注意,我们在读取运算符之前添加了空格,这是为了消除输入缓冲区中可能残留的换行符等字符。

接下来,我们需要编写代码来进行实际的计算操作。

C语言计算器文档

C语言计算器文档

C语言计算器文档
一、简介
C语言计算器是一款采用C语言开发的免费计算器,用户可以使用它
来执行基本的数学计算,包括简单的加减乘除,以及乘方、平方根等更高
级的运算。

C语言计算器的实现相对简单,但它具有良好的扩展性,功能
强大。

此外,还添加了注释功能,方便用户理解每一行代码的功能及实现。

1、基本运算:它能够实现基本的运算,包括加减乘除、乘方、平方
根等。

2、复杂运算:它还能够实现复杂的运算,比如三角函数运算,对数、指数等。

3、可视化界面:它提供一个可视化的界面,支持用户直观的计算、
显示计算结果,并可以方便地查看历史记录。

4、注释功能:它提供注释功能,用户可以添加注释,方便理解每一
行代码的功能及实现,更好地使用计算器。

二、实现原理
1、字符串处理:由于C语言计算器的输入是字符串,因此首先要对
用户输入的字符串进行解析,把字符串拆分为数学运算符、数字和其他字
符等部分,以便后续的计算。

2、数学函数:拆分完字符串之后。

用C语言编写简易计算器

用C语言编写简易计算器

• 选择9,程序如图: 程序大致与8的 理解一样。
选择10与11,程序如图:
程序:
如果选择7的话,就直接把输出的格式声明直 接由%d改成%x就行了,编译器会自己变换 ;程序如下:
如果选择8,程序如图: 我们用一个数组来储放 一个二进制数,先用 第一个for语句来使数 组的位数发生改变。 如输入1111010,在 数组中的第一个1是第 0位,但是在二进制中 它是最高位,所以经 过for语句后我们就把 它的位数由低变高了 ,然后再运算。
先输入一个数值判断数是不是大于2如果是再判断数除以2后的余数是不是等于零如果是就把1赋给数组元素否则就把0赋给数组元素
用C语言编写简易计算器
1302班,许创斌、叶立伟、张友学 制作
1. 程序的大概 2. 程序的讲解 3. 程序源代码
程序o.....while语句;使其只 要我们输入的选择不是12就一直循环。 2.在程序中我们还用到了清屏函数,其作用就是把 之前显示在控制台(程序运行后弹出来那个黑色 窗口)的东西全清掉(类似于 擦黑板:),用清 屏函数时,记得要把头文件 stdlib.h写上.
程序的讲解
• 首先我们在主函数 main()的开头,我们先 用函数printf向显示器 输出你将进行运算的 选项供你选择。如图 :
• 接下来,我们用switch 语句根据你的选择, 使流程跳转到不同的 语句。如:
• 如果你输入的选择是 在1~5之间,那么程序 如图: • 因为都是输入2个数, 所以我们
把放在switch的前面;
如果你选择6,程序如图: 先输入一个数值,判断数 是不是大于2,如果是, 再判断数除以2后的余数 是不是等于零,如果是, 就把‘1’赋给数组元素 ,否则就把‘0’赋给数 组元素;然后把数值除以 2,再依次循环以上步骤 。如果数值不大于2,就 直接把‘1’赋给数组元 素。最后把数组输出,即 得到二进制的数。

速算,简易计算器c语言代码,可实现加减乘除

速算,简易计算器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; }。

C语言实现简易计算器(可作加减乘除)

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语⾔,凭借⾃⼰的兴趣,将课本的知识运⽤后整理的关于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 }。

C语言加减乘除运算

C语言加减乘除运算

C语言加减乘除运算C语言加减乘除运算C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同。

下面一起来看看!加号、减号与数学中的一样,乘号、除号不同,另外C语言还多了一个求余数的运算符。

我们先来看一段代码:#include#includeint main(){ int a=12; int b=100; float c=8.5; int m=a+b; float n=b*c; double p=a/c; int q=b%a; printf("m=%d, n=%f, p=%lf, q=%d ", m, n, p, q); system("pause"); return 0;} 输出结果:m=112, n=850.000000, p=1.411765, q=4你也可以让数字直接参与运算:#include#includeint main(){ int a=12; int b=100; float c=8.9; int m=a-b; // 变量参与运算 int n=a+239; // 有变量也有数字 double p=12.7*34.3; // 数字直接参与运算 printf("m=%d, n=%d, p=%lf ", m, n, p); printf("m*2=%d, 6/3=%d, m*n=%ld ", m*2, 6/3, m*n); system("pause"); return 0;}输出结果:m=-88, n=251, p=435.610000m*2=-176, 6/3=2, m*n=-22088对于除法,需要注意的'是除数不能为0,所以诸如int a=3/0;这样的语句是错误的。

加减乘除的简写先来看一个例子:#include#includeint main(){ int a=12; int b=10; printf("a=%d ", a); a=a+8; printf("a=%d ", a); a=a*b; printf("a=%d ", a); system("pause"); return 0;}输出结果:a=12a=20a=200第一次输出 a 原来的值;a=a+8;相当于用a+8的值替换原来 a 的值,所以第二次输出20;第三次用a*b的值替换第二次的值,所以是200。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("|---------开始游戏请按'Y'-------------|\n");
printf("|---------退出游戏请按其他键-------------|\n");
printf("-----------------------------------------\n");
scanf("%c",&ch);
}
while(1)
{
printf("-----------------------------------------\n");
printf("|-----------欢迎来到速算24--------------|\n");
printf("|----------是否开始游戏?????------------|\n");
case '(':
{
if(b==')')
temp='=';
else
temp='<';
}break;
case ')':temp='>';break;
case '#':
{
if(b=='#')
temp='=';
else temp='<';
}break;
default break;
}
return temp;
#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;
if(ch=='Y' or ch=='y')
{
}
else
break;
}
}
int EvaluateExpression()
{
//算术表达式求值的算符优先算法。设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合。
InitStack(OPTR);
Push(OPTR,'#');
InitStack(OPND);
{
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)
Push(OPTR,c);
c = getchar();
break;
case '=': //脱括号并接收下一字符
Pop(OPTR,x); c = getchar();
break;
case '>': //退栈并将运算结果入栈
Pop(OPTR,theta);
Pop(OPND,b);
Pop(OPND,a);
{
char temp;
switch(a)
{
case '+','-':
{
if (b=='*' or b=='/' or b=='(')
temp='<';
else temp='>';
}break;
case '*','/':
{
if(b=='(')
temp='<';
else temp='>';
}break;
{
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 tem);
while(c!='#' || GetTop(OPTR)!='#')
{
if(!In(c,OP))
{
Push((OPND,c);
c = getchar();
} //不是运算符则进栈
else
switch(Precede(GetTop(OPTR),c))
{
case '<': //栈顶元素优先权低
Push(OPND,Operate(a,theta,b));
break;
}// switch
}// while
return GetTop(OPND);
}// EvaluateExpression
int changecard( char a[])
{
if()
}
void InitStack(Stack &S)
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)//算符优先级函数
相关文档
最新文档