C语言代码3——模拟简单运算器的工作

合集下载

C语言实现计算器功能

C语言实现计算器功能
7・ΘΘΘΘOG
是否结束运算?
GL是1•否
请选择。或1>:1
7.000000
×
2
I结果:=
1⅛.Θ00Θ0Θ
是否结束运算?
0堤1•否
(3)这时输入:0
测试目的:退出算术运算
结果输出:
please chose One Ietter from "a,b,c,r,and t" a
输入煜
÷
7 *ΘΘΘΘΘΘ
Void SUanshuyunsuan2() //选择继续做算术运算调用的函数,将上次运算的结果做为下次算术运算的第一个操作数〃判断算术运算是否继续
void Pan dua n()〃判断算术运算是否继续
void biaodashiyu nsua n()〃单运算符表达式实现函数
void qin gpi ng()〃清除屏幕
程序要完成的功能及所要用到的函数如下:
使用各菜单分别调用的函数
'≡ua∩ξhuyun≡u anO
■>SUanShUyUnSLLan2
panduan()
> bi aodashiyunsuan 0
> QirLgPing()
>fanhuicaidan()
2•算法说明(即函数说明)
Void SUa nshuyu nsua n()//做算术运算时调用的函数
Letter from a,bφc1r,and t
Ietter from,,a,bfc,r,and t
3•第三组测试用例
测试输入:C
国"F:\学习匹语言程序设计实习\实验"'IkbTigUJ语書欢验一.
+

7.000000

C语言简易计算器的实现

C语言简易计算器的实现

目录一.课程设计目的 (1)二.设计环境 (1)三.设计内容 (1)四.设计说明 (2)五.设计程序流程图 (2)六.调试 (4)(1)错误原因分析一 (4)(2)语法错误 (5)(3)逻辑错误 (5)七. 调试结果图 (6)八. 结论与心得体会 (7)九.附录 (8)具体代码实现 (8)十.参考文献 (18)一.课程设计目的1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我们的知识,特别是学计算机专业的,我们更应该注重这一环节,只有这样我们才能成为一个合格的计算机人才。

通过这一个课程设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。

还要熟悉四则运算和函数的算法。

2.通过这次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过上网或去图书馆查资料等方式得到一些新的知识,3.通过课程设计,加深对课程化设计思想的理解,能进行一个系统功能分析,并设计一个合理的模块化结构,提高程序开发能力。

二.设计环境1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz2.软件:安装有Microsoft visual c++6.0三.设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。

(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。

四.设计说明1)包含的功能有:加、减、乘、除运算,开方、平方等功能。

(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。

《C编的计算器》Word文档

《C编的计算器》Word文档

网络程序设计作业(三)学院:教育科学与技术学院班级:10级教计三班姓名:张敏学号:100401041334日期:2011年11月7日在线计算器的设计与实现一、界面设计1.界面截图如下:2.设计步骤:(1)打开Visual Web Developer 2008软件,把“default.aspx”重命名为“zaixianjisuanji.aspx”。

(2)打开该项的设计界面,在div块标签中输入“在线计算器”。

(3)在工具箱拖入一个文本框TextBox,在属性栏中设置其属性值。

(4)拖入一个Table控件,设置其行列分别为5,4。

并设置其大小边框值等。

(5)在每个格子里拖入一个button按钮控件,在第五行合并前两个单元格。

并如上图设置其Text的值。

二、程序设计using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class_Default : System.Web.UI.Page{private Calulate obj1;public void Page_Load(object sender, EventArgs e){ if (!IsPostBack){Calulate obj1 = new Calulate();ViewState["result"] = obj1;}else{ obj1 = ViewState["result"] as Calulate; }}public void sum(float a){if (obj1.s != "-"){if (obj1.b == 1)obj1.d = a;else { obj1.d = obj1.d * 10 + a; }ViewState["result"] = obj1;}else{if (obj1.b == 1)obj1.d = -a;else { obj1.d = obj1.d * 10 - a; }ViewState["result"] = obj1;}}//四则运算public void sum1(float a){if (obj1.c == true && obj1.a == false){obj1.result = a; ViewState["result"] = obj1;}if (obj1.sign == "+" && obj1.c == false && obj1.a == true) {obj1.result = obj1.result + a;ViewState["result"] = obj1;}if (obj1.sign == "-" && obj1.c == false && obj1.a == true) {obj1.result = obj1.result - a;ViewState["result"] = obj1;}if (obj1.sign == "*" && obj1.c == false && obj1.a == true) {obj1.result = obj1.result * a;ViewState["result"] = obj1;}if (obj1.sign == "/" && obj1.c == false && obj1.a == true){obj1.result = obj1.result / a;ViewState["result"] = obj1;}}//数字键protected void Button18_Click(object sender, EventArgs e){if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d = 1;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button9_Click(object sender, EventArgs e){sum1(obj1.d);obj1.c = false;obj1.a = true;obj1.e = true;obj1.b = 0;obj1.s = "";obj1.sign = Button9.Text;TextBox1.Text = obj1.sign;ViewState["result"] = obj1;protected void Button12_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 2;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button2_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 3;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button13_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 4;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button7_Click(object sender, EventArgs e)if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 5;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button4_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 6;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button1_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 7;sum(d);ViewState["result = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button5_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 8;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button6_Click(object sender, EventArgs e) {if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 9;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}protected void Button10_Click(object sender, EventArgs e) {sum1(obj1.d);obj1.c = false;obj1.a = true;obj1.e = true;obj1.b = 0;obj1.s = "";obj1.sign = Button10.Text;TextBox1.Text = obj1.sign;ViewState["result"] = obj1;}protected void Button11_Click(object sender, EventArgs e) {sum1(obj1.d);obj1.c = false;obj1.a = true;obj1.e = true;obj1.b = 0;obj1.s = "";obj1.sign = Button11.Text;TextBox1.Text = obj1.sign;ViewState["result"] = obj1;}protected void Button118_Click(object sender, EventArgs e) {sum1(obj1.d);obj1.c = false;obj1.a = true;obj1.e = true;obj1.b = 0;obj1.s = "";obj1.sign = Button118.Text;TextBox1.Text = obj1.sign;ViewState["result"] = obj1;}protected void Button16_Click(object sender, EventArgs e){if (obj1.e == false){dele();obj1.e = true;}obj1.b++;float d;d = 0;sum(d);ViewState["result"] = obj1;TextBox1.Text = obj1.d.ToString();}//清空protected void Button19_Click(object sender, EventArgs e){obj1.b = 0;obj1.result = 0;obj1.sign = "";obj1.a = false;obj1.c = true;obj1.s = "";obj1.d = 0;TextBox1.Text = obj1.result.ToString();}protected void dele(){obj1.b = 0;obj1.result = 0;obj1.sign = "";obj1.a = false;obj1.c = true;obj1.d = 0;}//等号protected void Button17_Click(object sender, EventArgs e){obj1.b = 0;sum1(obj1.d);obj1.a = false;obj1.e = false;obj1.s = "";ViewState["result"] = obj1;TextBox1.Text = obj1.result.ToString();}protected void TextBox1_TextChanged(object sender, EventArgs e) {}//正负protected void Button120_Click(object sender, EventArgs e){obj1.s = "-";ViewState["result"] = obj1;TextBox1.Text = "-";}//时间protected void Button122_Click(object sender, EventArgs e){DateTime currentTime = System.DateTime.Now;TextBox1.Text = System.DateTime.Now.ToString();}//倒数protected void Button121_Click(object sender, EventArgs e){double number; number = 0;number = double.Parse(TextBox1.Text);number = 1.0 / number;TextBox1.Text = number.ToString();}}三、调试(1)对CSS样式不是很熟习,所以无法顺利的做出自己想要的效果,经过多次试验及认真看书,参考计算机上自带的计算机样式终于成型了。

C语言计算器文档

C语言计算器文档

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

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

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

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

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

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

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

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

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

计算器程序说明文档附C语言代码

计算器程序说明文档附C语言代码

- 1 -计算器程序说明文档附C 语言代码1、 功能: 接收带运算符的字符串输入,完成计算,显示给过,循环。

2、 程序版本:calculator 1.1编 写 人:東风日 期:2010-5-25 ~~ 2010-5-303、 涉及的运算符:共有11种运算符:+,—,×,÷,%,√¯(用S 替代),ˆ(幂运算),=,{},[ ],( )4、 实现过程:输入:一个字符串编译:判断括号是否匹配计算:处理字符串,计算出最终结果输出: 输出最终结果5、 规约说明:● 目前版本不提供输入小数和负数的处理,只能处理整数,但基本实现了复杂计算的这个运算方式,后期继续完善。

● 在字符串以“=”作为运算式结束标志● 由于键盘无法输入“√¯”,在输入中用“S ”替代,开根号的数自动取整,如:要计算根号2用:S2= ,结果为:1,若开根号数小于0,结果返回为:-1- 2 -● 允许一对括号内只有一个数字,如:3+(12)=● 允许括号重叠和重复成对出现,且{ },[ ],( )之间没有优先级,只是方便使用者自己区分,和正常习惯,如:S{S[1+2*3/((4))^5]+S[(6)]}= , S(64)=● 不允许输入连续两个非括号、根号和“=”运算符,如:3++3=但这样可以: 3+S4=6、 问题分析:6.1、字符串的要处理结构有哪些?7种运算符:+,—,×,÷,%,√¯,ˆ和3种括号: {},[ ],( )之间的任意组合。

由于还没有编写判断输入错误的模块,必需要按照正确的语法来输入,为了方便处理,以“=”号做为结束标志。

如:S{[1+2*3/4%2-S4+S(2+2^5/8)]^2+2*(3)}= 结果为:86.2、字符的存储使用什么类型:在处理字符串中,若使用char 型存取(指对链栈数据域的读写操作),比较方便,但对于大于两位的数字不好怎么处理,若该用- 3 -int 型可方便解决这个问题,只要将运算符用相应的数字在内部代替,这样一个中间转换的过程,相当于一个内部协议,同时对应相同的优先级二维数组下标,可方便的进行优先级判断。

c语言位运算模拟

c语言位运算模拟

c语言位运算模拟位运算是一种在二进制位级别上操作数据的方法,它在C语言中是非常基础和重要的概念。

C语言提供了多种位运算符,包括按位与(&)、按位或(|)、按位异或(^)、按位非(~)、左移(<<)和右移(>>)。

首先,让我们看看这些运算符的基本用法。

按位与(&):两个相应的二进制位都为1时,结果位才为1。

例如,5 & 3 在二进制下是 101 & 011,结果是 001,即十进制下的1。

按位或(|):两个相应的二进制位只要有一个为1时,结果位就为1。

例如,5 | 3 在二进制下是 101 | 011,结果是 111,即十进制下的7。

按位异或(^):两个相应的二进制位相异时,结果位才为1。

例如,5 ^ 3 在二进制下是 101 ^ 011,结果是 110,即十进制下的6。

按位非(~):是一种一元运算符,用来对一个二进制数的每一位执行非运算。

例如,~5 在二进制下是 ~101,结果是 010,即十进制下的-6(注意,C语言中负数使用补码表示)。

左移(<<):将二进制数的所有位向左移动指定的位数,右侧空出的位用0填充。

例如,5 << 2 在二进制下是 101 << 2,结果是 10100,即十进制下的20。

右移(>>):将二进制数的所有位向右移动指定的位数,左侧空出的位用符号位填充(正数填充0,负数填充1)。

例如,5 >> 1 在二进制下是 101 >> 1,结果是 010,即十进制下的2。

位运算在C语言中有许多应用,如数据压缩、权限管理、算法优化等。

理解并熟练掌握位运算,对于深入理解计算机底层原理和提高编程技能都是非常有帮助的。

C编写简易计算器附源代码超详细共16页文档

C编写简易计算器附源代码超详细共16页文档

超详细一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里使用Windows窗体应用程序,并命名为Calc,如下图所示:二、向窗体中拖入需要的控件,如下图所示:(完成效果图)结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow ,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name 修改为btn_dot,按键【+ - * /】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。

右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。

三、代码部分(含解释),采用switch多分支语句编写using System;using System.Drawing;using System.Collections;using SystemponentModel;using System.Windows.Forms;using System.Data;namespace Calc///<summary>/// QQ:479340056 温柔一刀C#简易计算器的实现///</summary>public class CalcForm : System.Windows.Forms.Formprivate System.Windows.Forms.Button btn_0;private System.Windows.Forms.Button btn_1;private System.Windows.Forms.Button btn_2;private System.Windows.Forms.Button btn_3;private System.Windows.Forms.Button btn_4;private System.Windows.Forms.Button btn_5;private System.Windows.Forms.Button btn_6;private System.Windows.Forms.Button btn_7;private System.Windows.Forms.Button btn_8;private System.Windows.Forms.Button btn_9;private System.Windows.Forms.Button btn_add;private System.Windows.Forms.Button btn_sub;private System.Windows.Forms.Button btn_mul;private System.Windows.Forms.Button btn_div;private System.Windows.Forms.Button btn_sqrt;private System.Windows.Forms.Button btn_sign;private System.Windows.Forms.Button btn_equ;private System.Windows.Forms.Button btn_dot;private System.Windows.Forms.Button btn_rev;private System.Windows.Forms.TextBox txtShow;private System.Windows.Forms.Button btn_sqr;private PictureBox pictureBox1;private LinkLabel linkLabel1;///<summary>///必需的设计器变量。

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#实现简易计算器功能的具体代码,供⼤家参考,具体内容如下剖析:1、先设计界⾯(按钮、⽂本框(⼀个显⽰算式,⼀个显⽰结果))布局2、单击按钮将其对应内容显⽰在⽂本框中3、单击符号(+、-、×、÷、%)时将第⼀次输⼊的数储存起来4、单击等号时将第⼆次输⼊的数存储起来并将第⼀次输⼊的数与第⼆次输⼊的数按照所单击的符号进⾏运算将结果显⽰在第⼀个⽂本框中5、单击C时将两个⽂本框中的内容清空重点:1、声明⼀个bool类型的变量⽤于实现单击符号再次输⼊数字时第⼀次输⼊的数字清空显⽰第⼆次输⼊的数字2、声明两个double类型的变量⽤于装第⼀次输⼊的数和装第⼆次输⼊的数3、声明⼀个string类型的变量⽤于判断运算符号界⾯布局:具体代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Test_Calculator{public partial class Form1 : Form{public Form1(){InitializeComponent();}//声明三个变量string type; //符号类型double x;//装第⼀个数(按符号(+-×÷%)时textbox1中的数字)double y;//装第⼆个数(按等号时textbox1中的数字)bool c=false;private void Form1_Load(object sender, EventArgs e){this.CenterToScreen();//窗体居中显⽰this.Text = "计算器";this.FormBorderStyle = FormBorderStyle.FixedToolWindow; textBox1.ReadOnly = true;//⽂本框只读textBox2.TabIndex = 0;//光标焦点在textbox2中}private void button1_Click(object sender, EventArgs e){if (c==true){c = false;textBox1.Text = "";}textBox1.Text += "1";textBox2.Text += "1";}private void button2_Click(object sender, EventArgs e){if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "2";textBox2.Text += "2";}private void button3_Click(object sender, EventArgs e){if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "3";textBox2.Text += "3";}private void button4_Click(object sender, EventArgs e){if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "4";textBox2.Text += "4";}private void button5_Click(object sender, EventArgs e){if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "5";textBox2.Text += "5";}private void button6_Click(object sender, EventArgs e) {if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "6";textBox2.Text += "6";}private void button7_Click(object sender, EventArgs e) {if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "7";textBox2.Text += "7";}private void button8_Click(object sender, EventArgs e) {if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "8";textBox2.Text += "8";}private void button9_Click(object sender, EventArgs e) {if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "9";textBox2.Text += "9";}private void button10_Click(object sender, EventArgs e) {if (c == true){c = false;textBox1.Text = "";}textBox1.Text += "0";textBox2.Text += "0";}private void button11_Click(object sender, EventArgs e) {textBox1.Text += ".";textBox2.Text += ".";}private void button12_Click(object sender, EventArgs e) {textBox1.Text = "";textBox2.Text = "";}private void button13_Click(object sender, EventArgs e) {c = true;type = "+";textBox2.Text += "+";x = double.Parse(textBox1.Text);}private void button14_Click(object sender, EventArgs e){c = true;type = "-";textBox2.Text += "-";x = double.Parse(textBox1.Text);}private void button15_Click(object sender, EventArgs e){c = true;type = "×";textBox2.Text += "×";x = double.Parse(textBox1.Text);}private void button16_Click(object sender, EventArgs e){c = true;type = "÷";textBox2.Text += "÷";x = double.Parse(textBox1.Text);}private void button18_Click(object sender, EventArgs e){c = true;type = "%";textBox2.Text += "%";x = double.Parse(textBox1.Text);}private void button17_Click(object sender, EventArgs e){y = double.Parse(textBox1.Text);//法⼀while (type=="+"){textBox1.Text = (x + y).ToString();textBox2.Text += "=" + textBox1.Text;return;}while (type == "-"){textBox1.Text = (x - y).ToString();textBox2.Text += "=" + textBox1.Text;return;}while (type == "×"){textBox1.Text = (x * y).ToString();textBox2.Text += "=" + textBox1.Text;return;}while (type == "÷"){if (y!=0){textBox1.Text = (x / y).ToString();textBox2.Text += "=" + textBox1.Text;}else{MessageBox.Show("请重新输⼊","错误",MessageBoxButtons.OK,rmation); textBox1.Text = "";textBox2.Text = "";}return;}while (type == "%"){textBox1.Text = (x % y).ToString();textBox2.Text += "=" + textBox1.Text;return;}//法⼆://if (type=="+")//{// textBox1.Text=(x + y).ToString();// textBox2.Text += "=" + textBox1.Text; //}//if (type=="-")//{// textBox1.Text = (x - y).ToString();// textBox2.Text += "=" + textBox1.Text; //}//if (type=="×")//{// textBox1.Text = (x * y).ToString();// textBox2.Text += "=" + textBox1.Text; //}//if (type=="÷")//{// textBox1.Text = (x / y).ToString();// textBox2.Text += "=" + textBox1.Text; //}//if (type=="%")//{// textBox1.Text = (x % y).ToString();// textBox2.Text += "=" + textBox1.Text; //}}}}效果图:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

用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语言简易计算器是一种用于进行基本数学运算的程序。

实现一个简易计算器的关键是要能够解析用户输入的数学表达式,并将其转化为计算机可以理解的形式,然后进行计算,并输出结果。

下面是一个大约1200字以上的示例实现。

```c#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <ctype.h>#define MAX_SIZE 100//定义操作符的优先级int getPriority(char op)if (op == '+' , op == '-')return 1;else if (op == '*' , op == '/')return 2;elsereturn 0;//进行四则运算int calculate(int a, int b, char op)switch (op)case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return a / b;default: return 0;}//将中缀表达式转换为后缀表达式void infixToPostfix(char* infixExp, char* postfixExp) char stack[MAX_SIZE];int top = -1;int j = 0;for (int i = 0; infixExp[i] != '\0'; i++)if (isdigit(infixExp[i])) { // 数字直接输出到后缀表达式while (isdigit(infixExp[i]))postfixExp[j++] = infixExp[i++];}postfixExp[j++] = ' ';i--;}else if (infixExp[i] == '(') { // 左括号压入栈stack[++top] = infixExp[i];}else if (infixExp[i] == ')') { // 右括号弹出栈内所有操作符并输出到后缀表达式,直到遇到左括号while (top != -1 && stack[top] != '(')postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}top--; // 弹出栈顶的左括号}else { // 操作符while (top != -1 && getPriority(stack[top]) >=getPriority(infixExp[i]))postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';stack[++top] = infixExp[i];}}while (top != -1) { // 将栈内剩余操作符弹出并输出到后缀表达式postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}postfixExp[j] = '\0';//计算后缀表达式的值int evaluatePostfix(char* postfixExp)char stack[MAX_SIZE];int top = -1;for (int i = 0; postfixExp[i] != '\0'; i++)if (isdigit(postfixExp[i])) { // 数字压入栈int num = 0;while (isdigit(postfixExp[i]))num = num * 10 + (postfixExp[i++] - '0');stack[++top] = num;i--;}else if (postfixExp[i] == ' ')continue;}else { // 操作符,弹出栈顶的两个数进行计算,并将结果压入栈int b = stack[top--];int a = stack[top--];int result = calculate(a, b, postfixExp[i]);stack[++top] = result;}}return stack[top];int maichar infixExp[MAX_SIZE];printf("请输入中缀表达式:");fgets(infixExp, sizeof(infixExp), stdin); // 读取用户输入//将中缀表达式转换为后缀表达式char postfixExp[MAX_SIZE];infixToPostfix(infixExp, postfixExp);printf("后缀表达式为:%s\n", postfixExp);//计算后缀表达式的值并输出int result = evaluatePostfix(postfixExp);printf("计算结果为:%d\n", result);return 0;```这个简易计算器的实现基于栈的数据结构。

C#简单的四则运算器

C#简单的四则运算器

[简单的四则运算器]一、项目内容及要求要求:1)能够进行简单的四则运算,点击等号,显示结果;点击“C”键清除文本框内容。

2)除数为0,文本框显示出错提示信息。

3)支持多运算符优先级。

二、算法分析(描述清楚程序流程,可用自然语言说明,也可用流程图等说明。

)一、算法:1)模拟两个栈,一个放数值,称为StackOpd,一个放运算符,称为StackOpr。

StackOpr的运算符优先级必须递增的。

2)然后依次扫描四则表达式,遇到数字就放到StackOpd里,遇到运算符,则有以下情况:3)当前运算符优先级>栈尾运算符的优先级,则入栈StackOpr。

4)当前运算符优先级<栈尾运算符的优先级,则取出StackOpr栈尾的运算符和StackOpd栈尾的两个元素,进行运算,然后把答案放入A中。

不停重复上述操作直到当前运算符>栈尾运算符。

5)最后,取出StackOpr栈尾的运算符和StackOpd栈尾的两个元素,进行运算,然后把答案放入StackOpd中。

不停重复上述操作直到栈StackOpr 为空。

6)运算符的优先级:+,-:1; *,/:2二、泛型集合:1)泛型最常见的用途是创建集合类2)泛型集合可以约束集合内的元素类型3)典型泛型集合List<T>,Dictionary<K,V>4)<T>、<K,V>表示该泛型集合中的元素类型三、堆栈的逻辑结构:1)栈(Stack)是一种特殊的线性表,是限定仅在表尾进行插入或删除操作的线性表。

2)栈的表尾称为栈顶(top),处于栈顶位置的数据元素称为栈顶元素。

3)表头称为栈底(bottom),处于栈底位置的数据元素称为栈底元素。

4)不含元素的空表称为空栈。

5)栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第1个字母。

a1为栈底元素,an为栈顶元素。

这n个数据元素按照a1,a2,…,an的顺序依次入栈,而出栈的次序相反,an第一个出栈,a1最后一个出栈。

C语言也能干大事 编程 项目开发 计算器编程

C语言也能干大事  编程  项目开发  计算器编程

C 语言也能干大事附注:本文档里的代码都是本人学习编程之后自己所写,请不要随便的改写或删除,如在学习过程中有什么不懂的地方,可以提出来共同探讨学习!第一部分C语言也能干大事第一节:题目:自己动手写恶搞坑爹程序要求:运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“一看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。

代码:(部分重要程序)#include "stdafx.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){int ret1=MessageBox(NULL,TEXT("你是好人吗?"),TEXT("人品鉴定系统"),MB_YESNO|MB_ICONASTERISK);/*“MB”是“MessageBox”的简写,MB_YESNO是可在窗口中显示的按钮,像这样的按钮还有:#define MB_OK (确定) 0x00000000L#define MB_OKCANCEL (确定和取消) 0x00000001L#define MB_YESNOCANCEL (是、否和取消) 0x00000003L#define MB_YESNO (是和否) 0x00000004L#define MB_RETRYCANCEL (重试和取消) 0x00000005L定义了一个int型变量,说明“MB_YESNO|MB_ICONASTERISK”运算(是或运算)之后的结果是一个整型数据。

“MessageBox()”括号里面有四个参数,第一个参数:hWnd:标识将被创建的消息框的拥有窗口。

完整word版编译原理课程设计 简单计算器实现

完整word版编译原理课程设计 简单计算器实现

课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系设计名称: 简单计算器的实现设计内容、目的与要求: 设计内容:计算器的功能要求如下:可以支持加(+)、减(-)、乘(*)、除(/)运算, 如3+4-5*2/2;支持括号运算,如(4+5)*5/8。

用户输入表达式后,转化为逆波兰式并执行计算,最后输出该表达式的结果。

设计目的:1、对单词的构词规则有明确的定义;2、编写的分析程序能够正确识别源程序中的语法符号;3、计算器源程序的以.C格式输出;4、对于源程序中的语法错误,能够做出简单的错误处理,给出简单的错误提示, 保证顺利完成整个源程序的分析;5、计算器能够实现加,减,乘,除,混合运算,多项式运算设计要求:1、将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式, 并计算用逆波兰式来表示的算术表达式的值。

2、掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化。

计划与进度安排:20日一5月21日:确定本次课程设计研究课题:实现简单计算器。

22日一5月30日:进行需求分析,分析该计算器具有哪些功能,并明确该课题的一些要求。

31日一6月3日:查找相关资料和书籍,了解本课题涉及有关知识,如:编译原理的一些基本概念,逆波兰式的基本概念,以及逆波兰式的转化问题等。

4日一6月8日:概要设计,将程序的几大模块分开来设计,画出程序的流程图8日一6月10日:详细设计,写出代码并进行调试10日一6月12日:运行程序,如果能够实现本次课程设计则进行优化,如果不能满足要求则继续改进。

13日一6月15日:对本次课程设计进行分析总结。

设计过程、步骤(可加页):一、需求分析1.1总述在日常的学习与工作过程中, 经常遇到计算表达式数值的问题, 诸如34-(8+5*10)。

如果人为地分步计算, 难免因疏漏了括号或字符而导致结果出错。

表达式计算器具有计算表达式结果的功能, 大大方便了学习与工作。

经典c源程序之计算器

经典c源程序之计算器
case '(':return '<';
case ')':return '=';
case '=':printf("表达式错误!\n");exit(0);
default:printf("表达式错误!\n");exit(0);
}
case ')':switch(B){
free(S.base);
return OK;
}//DestroyStack
char GetTop(SqStack1 S){
//若栈不空,则返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top==S.base)return ERROR;
return *(S.top-1);
有这么简单的课程设计吗?没别的要求?就只要行数么?那就简单了,自己可以设计一个有加减乘除功能的计算器就ok了,设计简单,而且够100多行了,楼主自己写吧//***************************************************************************
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
Status DestroyStack(SqStack1 &S){
//销毁栈S
free(S.top);
case '/':return '<';

c语言编写的实现简单计算器功能

c语言编写的实现简单计算器功能

/*************************************************摘要:简单计算器的实现**作者:memory**实现说明:1:变量flag_fuhao为键入+、-、*、/运算符标志(即当前一个键值为+、-、*、/运算符时,flag_fuhao为1,其他键值则flag_fuhao置零,其用在显示时)2:变量flag_shu数输入情况,flag_shu为0时,输入的符号无效;flag_shu为2时,变量fuhao更新为新键值**完成日期:2010年2月27日于合肥学院(南)*********************************************/#include <reg52.H>#define uchar unsigned char#define uint unsigned int#define duan P0//数码管显示段选定义#define wei P2//数码管显示位选定义#define key P3//键盘接口定义sbit OFF = P1^0;//关机键定义unsigned long int shu1,shu2;//进行运算的两个变量数uchar num;////键盘扫描返回值char flag1,flag_shu,flag_fuhao,fuhao,newkey,update;//flag1开机标志 newkey新按键标志,fuhao运算符,update表示等于号//之后紧接着输入的是数的话则清零shu1char key_shu;//按键值unsigned char code Wela[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//六位数码管的位选unsigned char code Duan[]={0x3f,0x06,0x5b,// 0 1 20x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 无显示共阴极数码管uchar keyscan();//键盘扫描函数void display(unsigned long int );//数码管显示函数void delay(uint i)//延时函数{while(i--);}/***********************************************主函数************************************************/void main(){flag1=0;//标志关机while(1){if(keyscan()==15)//开机检测{flag1=1;//标志开机shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量while(flag1){if(!flag_fuhao)display(shu1);else display(shu2);key_shu=keyscan();if(newkey==1)//有新键值{if(key_shu==15)//按下ON/C键,清零{ flag_fuhao=0;update=0;shu1=shu2=fuhao=flag_shu=newkey=0;}else if(key_shu==14&&flag_shu==1&&fuhao)//按下"="{switch(fuhao){case 10:shu1=shu2+shu1;break;case 11:shu1=shu2-shu1;break;case 12:shu1=shu2*shu1;break;case 13:shu1=shu2/shu1;break;}fuhao=0;flag_fuhao=0;update=1;}else if((key_shu>=0)&&(key_shu<=9))//按下数字键{ flag_fuhao=0;if(update)shu1=0;if(shu1<100000){shu1=key_shu+shu1*10;flag_shu=1;}update=0;}else if((key_shu>=10)&&(key_shu<=13))//按下运算符{flag_fuhao=1;update=0;if(flag_shu==1){if(fuhao==0){shu2=shu1;shu1=0;fuhao=key_shu;flag_shu=2;}else{switch(fuhao){case 10:shu2=shu2+shu1;break;case 11:shu2=shu2-shu1;break;case 12:shu2=shu2*shu1;break;case 13:shu2=shu2/shu1;break;}shu1=0;fuhao=key_shu;}}else if(flag_shu==2)fuhao=key_shu;}newkey=0;}}}}}///////////////键盘扫描/////////////////uchar keyscan(){////// 1key=0xfe;if(key!=0xfe){delay(500);if(key!=0xfe){switch(key){case 0xee:num=7 ;break;case 0xde:num=8 ;break;case 0xbe:num=9 ;break;case 0x7e:num=13;break; //"/"}newkey=1;delay(500);while(key!=0xfe){if(flag1)if(!shu1&&num>=0&&num<=9)display(num);elsedisplay(shu1);}return num;}}////// 1////// 2key=0xfd;if(key!=0xfd){delay(500);if(key!=0xfd){switch(key){case 0xed:num=4 ;break;case 0xdd:num=5 ;break;case 0xbd:num=6 ;break;case 0x7d:num=12;break; //*}newkey=1;delay(500);while(key!=0xfd){if(flag1)if(!shu1&&num>=0&&num<=9)display(num);elsedisplay(shu1);}return num ;}}////// 2////// 3key=0xfb;if(key!=0xfb){delay(500);if(key!=0xfb){switch(key){case 0xeb:num=1 ;break;case 0xdb:num=2;break;case 0xbb:num=3;break;case 0x7b:num=11;break; //-}newkey=1;delay(500);while(key!=0xfb){if(flag1)if(!shu1&&num>=0&&num<=9)display(num);elsedisplay(shu1);}return num ;}}////// 3////// 4key=0xf7;if(key!=0xf7){delay(500);if(key!=0xf7){switch(key){case 0xe7:num=15;break;// ON/Ccase 0xd7:num=0;break;case 0xb7:num=14;break;// =case 0x77:num=10;break;// +}newkey=1;delay(500);while(key!=0xf7){if(flag1)if(!shu1&&num>=0&&num<=9)display(num);elsedisplay(shu1);}return num ;}}////// 4if(!OFF){delay(500);if(!OFF){flag1=0;}}return 100;}//////////////////显示函数////////////////void display(unsigned long int dis_shu){uchar dis_flag,dis_aa;uchar dis_data[6]={0,0,0,0,0,0};if(dis_shu>99999) dis_flag=6;else if(dis_shu>9999) dis_flag=5;else if(dis_shu>999) dis_flag=4;else if(dis_shu>99) dis_flag=3;else if(dis_shu>9) dis_flag=2;else dis_flag=1;for(dis_aa=0;dis_aa<dis_flag;dis_aa++) {dis_data[dis_aa]=dis_shu%10;dis_shu=dis_shu/10;}//数码管段选for(dis_aa=0;dis_aa<dis_flag;dis_aa++) {duan=Duan[dis_data[dis_aa]];wei=Wela[dis_aa];delay(100);wei=0xff;}//数码管位选}。

c语言编写的计算器代码附带使用说明

c语言编写的计算器代码附带使用说明

#include<stdio.h>#include<math.h>void main(){double a,b,j;char x1,x2,x3,x4,x;printf("请选择所求公式区域A,B,C!\n\a"); x=getchar();switch(x){ case 'A':{ printf("请输入具体公式!\n");scanf("%lf%c%lf",&a,&x1,&b);if(x1==43){j=a+b;printf("和=%.2lf\n\n",j);}else if(x1==45){j=a-b;printf("差=%.2lf\n",j);}else if(x1==42){j=a*b;printf("积=%.2lf\n",j);}else if(x1==47){j=a/b;printf("商=%.2lf\n",j);}else if(x1==37){int(j)=int(a)%int(b);printf("%.2lf对%.2lf的余数=%d\n",a,b,j);}else if(x1==112){j=pow(a,b);printf("%.0lf的%.0lf次方=%.0lf\n",a,b,j);}else printf("输入有误,请按要求输入!\n\a\a\a");printf("谢谢使用!\n\n");break;}case 'B':{ printf("请输入具体公式!\n");getchar();scanf("%c%c%c%lf",&x1,&x2,&x3,&a);if(x1=='l'&&x2=='e'&&x3=='n'){j=log(a);printf("len(%.2lf)=%.2lf\n",a,j);}else if(x1=='l'&&x2=='o'&&x3=='g'){j=log10(a);printf("以10为底%.2lf的对数=%.2lf\n",a,j);}else if(x1=='s'){j=sin(a);printf("sin%.4lf=%.5lf\n",a,j);}else if(x1=='c'){j=cos(a);printf("cos%.4lf=%.5lf\n",a,j);}else if(x1=='t'){j=tan(a);printf("tan%.4lf=%.5lf\n",a,j);}else printf("输入有误,请按要求输入!\n\a\a\a");printf("谢谢使用!\n\n");break;}case 'C':{printf("请输入具体公式!\n");getchar();scanf("%c%c%c%c%lf",&x1,&x2,&x3,&x4,&a); if(x1=='s'&&x2=='q'&&x3=='r'&&x4=='t'){j=sqrt(a);printf("根号a=%.2lf\n",j);}else if(x1=='f'&&x2=='a'&&x3=='b'&&x4=='s') {j=fabs(a);printf("%.2lf的绝对值=%.2lf\n",a,j);}else if(x1=='a'&&x2=='c'&&x3=='o'&&x4=='s') {j=acos(a);printf("cos-1(%.2lf)=%.4lf\n",a,j);}else if(x1=='a'&&x2=='s'&&x3=='i'&&x4=='n') {j=asin(a);printf("sin-1(%.2lf)=%.4lf\n",a,j);}else if(x1=='a'&&x2=='t'&&x3=='a'&&x4=='n') {j=atan(a);printf("tan-1(%.2lf)=%.4lf\n",a,j);}else if(x1=='t'&&x2=='a'&&x3=='n'&&x4=='h'){j=tanh(a);printf("%.2lf的双曲正切函数=%.4lf\n",a,j);}else if(x1=='s'&&x2=='i'&&x3=='n'&&x4=='h'){j=sinh(a);printf("%.2lf的双曲正弦函数=%.4lf\n",a,j);}else if(x1=='c'&&x2=='o'&&x3=='s'&&x4=='h'){j=cosh(a);printf("%.2lf的双曲余弦函数=%.4lf\n",a,j);}else printf("输入有误,请按要求输入!\n\a\a\a");printf("谢谢使用!\n\n");break;}}}使用说明该软件分为3个板块,计算前请先输入一个板块号码,如A,B,C !各板块包含以下公式:A :(包含加、减、乘、除、求平方、求余数)B:(包含len 、a 10log 、 sin 、cos 、tan )C:(包含求根号、绝对值、cos ,sin ,tan 的反函数、a 的双曲正切、正弦、余弦函数)。

C# 简单计算器(红河学院)

C# 简单计算器(红河学院)

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace caculator{public partial class Calculator : Form{public Calculator(){InitializeComponent();}int i=0;bool shownNull=false;bool over=false;Number n1 = new Number();Number n2 = new Number();public delegate double Dualfunction(Number a, Number b);public Dualfunction fun;public void setvalue(){if (Normal.count21 == 0) //这里要求在调用GetDualfunction(int i)之后才对count21进行加加;n1.Getvalue(textBox1.Text);elsen2.Getvalue(textBox1.Text);Normal.count11 = 0;Normal.count12 = 0;Normal.count13 = 0;}public bool GetDualfunction(int i)//具体方法操作____委托处理{try{if (i == 1){setvalue();fun = Number.Add;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}if (i == 2){setvalue();fun = Number.Sub;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}if (i == 3){setvalue();fun = Number.Mul;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}if (i == 4){setvalue();if (n2.numeber == 0){textBox1.Text = "除数不能为0!请重新输入一个除数或者直接按CE键重新开始"; shownNull = true;Normal.repeat = true;//防止未正常运算而按下其他操作符导致出现程序异常;return false;}else{fun = Number.Div;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}}if (i == 5){setvalue();if (n2.numeber == 0){textBox1.Text = "不能用0对一个数求余!请重新输入一个求余数或者直接按CE键重新开始";shownNull = true;Normal.repeat = true;//防止未正常运算而按下其他操作符导致出现程序异常;return false;}else{fun = Number.Model;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}}if (i == 6){n1.Getvalue(textBox1.Text);//一元操作无需调用setvalue();if (n1.numeber <= 0){textBox1.Text = "非正数不能开方!请重新输入一个开方数或者直接按CE键重新开始";shownNull = true;Normal.repeat = true;//防止未正常运算而按下其他操作符导致出现程序异常;return false;}else{fun = Number.Sqrt;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;//这里的 Normal.repeat = false语句不能省略,因为紧接着的可能直接是二元操作符;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}}if (i == 7){n1.Getvalue(textBox1.Text);if (n1.numeber == 0){textBox1.Text = "除数不能为0!请重新输入一个求倒数或者直接按CE键重新开始";shownNull = true;Normal.repeat = true;//防止未正常运算而按下其他操作符导致出现程序异常;return false;}else{fun = Number.Dao;textBox1.Text = fun(n1, n2).ToString();Normal.repeat = false;//这里的 Normal.repeat = false语句不能省略,因为紧接着的可能直接是二元操作符;shownNull = true;Normal.count21 = 0;Normal.count22 = 0;return true;}}elsereturn false;// else//textBox1.Text = "您还没输入任何操作数!";}catch(Exception e){textBox1.Text = e.Message+" =>"+"请按CE键重新开始!";return false;}}public void settext(string s)//文本输入{Normal.repeat = false ;if (shownNull) textBox1.Text = null;if (Normal.count11 == 0) textBox1.Text = s;else textBox1.Text += s;shownNull = false;}//以下的是按钮,全都是在正常情况下的输入和响应!!!private void btn0_Click(object sender, EventArgs e){if (Normal.oneQuestion()){settext("0");Normal.count11++;Normal.count13++;Normal.count14++;}}private void btn1_Click(object sender, EventArgs e){settext("1");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn2_Click(object sender, EventArgs e){settext("2");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn3_Click(object sender, EventArgs e) {settext("3");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn4_Click(object sender, EventArgs e) {settext("4");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn5_Click(object sender, EventArgs e) {settext("5");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn6_Click(object sender, EventArgs e) {settext("6");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn7_Click(object sender, EventArgs e) {settext("7");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn8_Click(object sender, EventArgs e) {settext("8");Normal.count11++;Normal.count12++;Normal.count14++;}private void btn9_Click(object sender, EventArgs e) {settext("9");Normal.count11++;Normal.count12++;Normal.count14++;}private void btnAdd_Click(object sender, EventArgs e) {if (Normal.twoQuestion()){if (Normal.count21 == 0){setvalue();i = 1;}else if (Normal.count21 == 1){if( GetDualfunction(i))i = 1;}Normal.count21 = 1;Normal.repeat = true;shownNull = true;}}private void btnSub_Click(object sender, EventArgs e) {if (Normal.twoQuestion()){if (Normal.count21 == 0){setvalue();i = 2;}else if (Normal.count21 == 1){if (GetDualfunction(i))i = 2;}Normal.count21 = 1;Normal.repeat = true;shownNull = true;}}private void btnMul_Click(object sender, EventArgs e) {if (Normal.twoQuestion()){if (Normal.count21 == 0){setvalue();i = 3;}else if (Normal.count21 == 1){if (GetDualfunction(i))i = 3;}Normal.count21 = 1;Normal.repeat = true;shownNull = true;}}private void btnDiv_Click(object sender, EventArgs e) {if (Normal.twoQuestion()){if (Normal.count21 == 0){setvalue();i = 4;}else if (Normal.count21 == 1){if (GetDualfunction(i))i = 4;}Normal.count21 = 1;Normal.repeat = true;shownNull = true;}}private void btnMod_Click(object sender, EventArgs e) {if (Normal.twoQuestion()){if (Normal.count21 == 0){setvalue();i = 5;}else if (Normal.count21 == 1){if (GetDualfunction(i))i = 5;}Normal.count21 = 1;Normal.repeat = true;shownNull = true;}}private void btnSqr_Click(object sender, EventArgs e){if (Normal.threeQuestion()){if (Normal.count21 == 1) GetDualfunction(i);GetDualfunction(6);}}private void btnDao_Click(object sender, EventArgs e){if (Normal.threeQuestion()){if (Normal.count21 == 1) GetDualfunction(i);GetDualfunction(7);}}private void btnPoint_Click(object sender, EventArgs e){if (Normal.fourQuestion()){textBox1.Text += ".";Normal.count11++;}}private void btnExc_Click(object sender, EventArgs e){if (Normal.fiveQuestion()){textBox1.Text = (-double.Parse(textBox1.Text)).ToString();}}private void btnEqu_Click(object sender, EventArgs e){if (Normal.sixQuestion()){GetDualfunction(i);}}private void btnBac_Click(object sender, EventArgs e){if (Normal.sevenQuestion()){string s = textBox1.Text.Substring(textBox1.Text.Length - 1, 1);if (s != ".")//如果不是小数点则转为数值;{double n = double.Parse(s);if (0 < n && n < 10) Normal.count12--;else if (n == 0) Normal.count13--;}textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);if (Normal.count11 == 1)//当画面上最后一个字符退掉后文本框里应置为初始化; textBox1.Text = "0";Normal.count11--;}}private void btnCle_Click(object sender, EventArgs e){i = 0;textBox1.Text = "0";n1.numeber = 0;n2.numeber = 0;Normal.count11 = 0;Normal.count12 = 0;Normal.count13 = 0;Normal.count14 = 0;Normal.count21 = 0;Normal.count22 = 0;Normal.repeat = false;}private void Calculator_Load(object sender, EventArgs e){}}public class Number{public double numeber = 0;public void Getvalue(string s){numeber = double.Parse(s);}public static double Add(Number a, Number b){double result;result = a.numeber + b.numeber;a.numeber = result;b.numeber = 0;return result;}public static double Sub(Number a, Number b){double result;result = a.numeber - b.numeber;a.numeber = result;b.numeber = 0;return result;}public static double Mul(Number a, Number b){double result;result = a.numeber * b.numeber;a.numeber = result;b.numeber = 0;return result;}public static double Div(Number a, Number b){double result;result = a.numeber / b.numeber;a.numeber = result;b.numeber = 0;return result;}public static double Model(Number a, Number b){double result;result = a.numeber % b.numeber;a.numeber = result;b.numeber = 0;return result;}public static double Sqrt(Number a, Number b){double result;result = Math.Sqrt(a.numeber);a.numeber = result;b.numeber = 0;return result;}public static double Dao(Number a, Number b){double result;result = 1.0 / a.numeber;a.numeber = result;b.numeber = 0;return result;}}public class Normal{public static int count11 = 0;//总的输入次数(一次赋值);public static int count12 = 0;//非0的输入次数(一次赋值);public static int count13 = 0;//0的输入次数(一次赋值);public static int count14 = 0;//一轮运算总的输入次数;public static int count21 = 0;//二元操作符的存储值(一轮运算),不是等于0就是等于1;public static int count22 = 0;//等于操作符的存储值(一轮运算)public static bool repeat = false;public static bool oneQuestion()//0的个数问题{if (count12 > 0 || count13 == 0||(count13>0 && count11 - (count12 + count13) == 1)) return true;elsereturn false;}public static bool twoQuestion()//二元运算问题{if (!repeat&&count14>0 )return true;elsereturn false;}public static bool threeQuestion()//一元运算问题{if (count14 > 0)return true;elsereturn false;}public static bool fourQuestion()//小数点问题{if ((count13 > 0 || count12 > 0) && count11 - (count12 + count13) ==0)return true;elsereturn false;}public static bool fiveQuestion()//正负号转换问题{if (count12 > 0)return true;elsereturn false;}public static bool sixQuestion()//等于号问题{if (count21 > 0)return true;elsereturn false;}public static bool sevenQuestion()//退格键问题{if (count11>0)return true;elsereturn false;}} }。

C#实现简单的计算器功能

C#实现简单的计算器功能

C#实现简单的计算器功能本⽂实例为⼤家分享了C#实现简单的计算器功能的具体代码,供⼤家参考,具体内容如下环境:VS2010及以上版本1、建⽴个Window窗体应⽤2、在⼯具箱⾥拖出两个TextBox,第⼀个放上⾯,第⼆个放下⾯。

主要这⾥的Name,上⾯是textBox1,下⾯是textBox2。

这涉及到后⾯代码的书写3、在⼯具栏⾥拖动Button,摆放好。

可利⽤上⾯的对齐⼯具辅助设计。

4、在属性⾥改变各Button的Text,如下注意这⾥的1~9,⼩数点,±*/ 的Text应只有⼀个字符,不要多输。

←5、选中任意⼀个Button,右键,选择查看代码,转到Form1.cs6、开始写代码AddNum 修改TextBox的Text,应⽤于1~9与⼩数点的Click事件Reset 重置temp、myoperator,以及两个TextBox的TextDelete 删除textBox2的Text最后⼀个字符Calculate 把textBox2的Text转为double给temp,修改myoperatorEqual 具体的计算using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApp1{public partial class Form1 : Form{public Form1(){InitializeComponent();}//----上⾯是⾃动⽣成的代码,下⾯得我们⼿写----private double temp = 0; //存储临时数据private char myoperator = ' '; //判断之前按的是+-*/中的哪个private void AddNum(object sender, EventArgs e){ // 1~9与⼩数点的Click事件//sender是引发该事件的控件,这⾥我们拆箱为ButtonButton button = (Button)sender;textBox2.Text += button.Text;}private void Reset(object sender, EventArgs e){ // CE的Click事件temp = 0;myoperator = ' ';textBox1.Text = textBox2.Text = "";}private void Delete(object sender, EventArgs e){ // ←的Click事件//移除最后⼀个字符if (textBox2.TextLength > 0)textBox2.Text = textBox2.Text.Remove(textBox2.TextLength - 1);}private void Calculate(object sender, EventArgs e){ // +-*/的Click事件Button button = (Button)sender;if (double.TryParse(textBox2.Text, out temp)) //尝试把textBox2的Text转为double并赋值给temp {myoperator = button.Text[0]; //Text是string,取第⼀个字符textBox1.Text = temp.ToString() + ' ' + myoperator;textBox2.Text = "";}else{ //转换失败,重置所有Reset(sender, e);}}private void Equal(object sender, EventArgs e){ // = 的Click事件,计算并显⽰double temp2;//尝试转换,失败则重置并返回if (!double.TryParse(textBox2.Text, out temp2)) { Reset(sender, e); return; }switch (myoperator){case '+':temp += temp2;break;case '-':temp -= temp2;break;case '*':temp *= temp2;break;case '/':temp /= temp2;break;default:break;}textBox1.Text = "";textBox2.Text = temp.ToString();}}}7、设置各Button的Click事件AddNum: 1~9与⼩数点的Click事件Reset:CE的Click事件Delete:←的Click事件Calculate :±*/的Click事件Equal:= 的Click事件8、启动(F5)以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档