用C++实现简单计算器文档
用C语言做一个计算器
打算再思考下就想起了之前用c写计算器的例子翻开书本照着又打了一遍希望能让我有点思路不过缺点是这段代码只能运行两位数的计算等我过段时间看看能不能给它升级一下
用 C语言做一个计算器
一开始打算用Java写,结果写完加法就卡住了。打算再思考下,就想起了之前用c写计算器的例子,翻开书本照着又打了一遍,希望能让我有点思路,不过缺点是这段代码只能运行两
位数的计算,等我过段时间看看能不能给它升级一下^ _ ^
#include<stdio.h> int main() { int date1, date2; char op; printf("Please enter an expression:"); while (~scanf("date2)) {
switch (op) { case '+': printf("%d+%d=%d\n", date1, date2, date1 + date2); break; case '-': printf("%d-%d=%d", date1, date2, date1 - date2); break; case '*': printf("%d*%d=%d", date1, date2, date1 * date2); break; case '/': if (date2 == 0)
用C 实现简单计算器
一、需求描述度这次c++课程设计作业,我们小组选择的是设计一个简单的计算器。
我们平常所用的计算器都是可视化界面计算器,对于计算一些混合的四则算术运算不是很方便,所以我们此次设计的计算器则是可以进行四则混合运算,用户可以从键盘输入算式,可以进行加、减、乘、除混合运算,运算的优先级也已经考虑在内,并且用户可以按任何的运算符出现顺序进行输入,输入的计算式的长也是不限定。
这样就方便了我们对于一些混合算式的计算。
但是我们的程序也还存在一定问题,关于括号“()”优先级运算就没有实现,还有简单的三角函数,只要输入一个数就能求出值。
二、流程图四则运算。
三角函数的流程图也是类似在编码过程中,我们在编码过程中主要有一个counter类,counter里面一共有三个函数,分别是input()输入函数、suanfa()计算函数和show()显示函数,体现了类的封装性,另外还有一个不同函数进行程序说明。
本程序实现加、减、乘、除的基本运算,并能按照四则运算的基本法则进行运算,,在除法运算中,当被除数为零的时候,系统会报错,提示被除数不能为零,则会退出程序。
三、编码#include<iostream>#include<cmath>using namespace std;class complex{private:int n;double a[100];char fh[100];public:input();suanfa();show();};//四则运算complex ::input(){cout<<"请输入表达式,并且以“=”结尾"<<endl;for(int i=0;i<100;i++){cin>>a[i];cin>>fh[i];if(fh[i]=='=') //"="为结束符标志{n=i;break;}}}complex ::suanfa(){char sign;for(int j=0;j<n;j++){if(fh[j]=='*'){if(fh[j-1]=='+'){a[j+1]=a[j]*a[j+1];a[j]=0;fh[j]='+';}else if(fh[j-1]=='-'){a[j+1]=-a[j]*a[j+1];a[j]=0;fh[j]='+';}else a[j+1]=a[j]*a[j+1];}else if(fh[j]=='/'){if(fh[j-1]=='+'){if(a[j+1]!=0){a[j+1]=a[j]/a[j+1];a[j]=0;fh[j]='+';}else{cout<<"除数为0,退出程序!"<<endl; //除数为零exit(0);}}else if(fh[j-1]=='-'){if(a[j+1]!=0){a[j+1]=-a[j]/a[j+1];a[j]=0;}else{cout<<"除数为0,退出程序!"<<endl;exit(0);}}else{if(a[j+1]!=0){a[j+1]=a[j]/a[j+1];}else{cout<<"除数为0,退出程序!"<<endl;exit(0);}}}}for(int i=0;i<n;i++){if(fh[i]=='+')a[i+1]=a[i]+a[i+1];else if(fh[i]=='-'){if(a[i]<a[i+1]){a[i+1]=-(a[i+1]-a[i]);}elsea[i+1]=a[i]-a[i+1];}}}complex ::show(){cout<<"该表达式的结果为:";cout<<a[n]<<endl;}int main(){char sign;int m,n,p;complex b;cout<<"\t\t****************************************************\n";cout<<"\t\t* C++课程设计*\n";cout<<"\t\t* 1、简单的计算器*\n";cout<<"\t\t* 2、三角函数*\n";cout<<"\t\t****************************************************\n";cout<<"\n说明:可以进行四则混合运算,但是不能进行括号优先级运算\n";cout<<endl;cout<<"\t\t*请选择计算类型*\n";cin>>m;switch(m){case 1:b.input();b.suanfa ();b.show ();break;//三角函数:case 2:cout<<"\t\t****************************************************\n";cout<<"\t\t* 1、正弦*\n";cout<<"\t\t* 2、余弦*\n";cout<<"\t\t* 3、正切*\n";cout<<"\t\t****************************************************\n";cout<<"\t\t*请选择三角函数类型*\n";cin>>n;cout<<"\t\t*请输入要求的数*\n";cin>>p;switch(n){ case 1:cout<<sin(p);break;case 2:cout<<cos(p);break;case 3:cout<<tan(p);break;}}while(true){cout<<"是否继续?输入y表示继续,n表示退出"<<endl;cin>>sign;if(sign=='y'){b.input();b.suanfa ();b.show ();}else{break;}}return 0;}四、测试报告1、关于算法结构的逐步完善。
C语言课程设计简单计算器程序文件
课程设计名称:C语言课程设计课程设计题目:简单计算器程序目录第1章需求分析 (1)1.1设计要求 (1)1.2任务 (1)第2章总体设计 (2)2.1设计简介及设计方案论述 (2)2.2功能模块层次图 (2)第3章详细设计 (3)3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8)3.3.1算法描述 (9)第4章调试分析 (11)4.1程序设计中所遇到的错误及犯错的原因 (11)4.2错误的解决方法 (11)第5章用户手册 (12)总结 (16)参考文献 (17)附录(程序清单) (18)第1章需求分析1.1 设计要求(1)用 C 语言数据结构实现程序设计;(2)利用结构体、栈、进行相关信息处理;(2)系统的各个功能模块要求用函数的形式实现;(4)界面简单.可操作性高。
1.2 任务(1)定义一个结构体类型数组.输入 0~9 及+、--、*等符号的信息.将其信息存储起来;(2)输入简单的加减乘除算术计算式.并在屏幕上显示逆波兰(后缀式)表达式和计算结果;(3)编写代码;(4)程序分析与调试。
说明:本课程设计将实现一个简单计算器。
在功能上尽量模仿 windows 的计算器。
系统界面不做牵制要求。
该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式).将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。
在进行运算后可以选择继续运算或者结束当前运算。
即时准确地获得需要的计算的结果.充分降低了数字计算的难度和节约了时间.对人们的生活有一定的帮助。
第2章 总体设计2.1设计简介及设计方案论述逆波兰表达式又叫做后缀表达式。
在通常的表达式中.二元运算符总是置于与之相 关的两个运算对象之间.所以.这种表示法也称为中缀表达式。
波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。
按此方法.每一运算符都置 于其运算对象之后.故称为后缀表达式。
后缀表达式的优点是显而易见的. 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式.遇到运算对象直接压入堆栈.遇到运算符就从堆栈提取后进的两个对象进行计算.这个过程正好符合了计算机计算的原理。
《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语言设计计算器程序源代码#include <dos.h> /*DOS接口函数*/#include <math.h> /*数学函数的定义*/#include <conio.h> /*屏幕操作函数*/函数*/#include <stdio.h> /*I/O#include <stdlib.h> /*库函数*/变量长度参数表*/#include <stdarg.h> /*图形函数*/#include <graphics.h> /*字符串函数*/#include <string.h> /*字符操作函数*/#include <ctype.h> /*#define UP 0x48 /*光标上移键*/#define DOWN 0x50 /*光标下移键*/#define LEFT 0x4b /*光标左移键*/#define RIGHT 0x4d /*光标右移键*/#define ENTER 0x0d /*回车键*/void *rar; /*全局变量,保存光标图象*/使用调色板信息*/struct palettetype palette; /*int GraphDriver; /* 图形设备驱动*/int GraphMode; /* 图形模式值*/int ErrorCode; /* 错误代码*/int MaxColors; /* 可用颜色的最大数值*/int MaxX, MaxY; /* 屏幕的最大分辨率*/double AspectRatio; /* 屏幕的像素比*/void drawboder(void); /*画边框函数*/初始化函数*/void initialize(void); /*计算器计算函数*/void computer(void); /*改变文本样式函数*/ void changetextstyle(int font, int direction, int charsize); /*窗口函数*/void mwindow(char *header); /*/*获取特殊键函数*/int specialkey(void) ;设置箭头光标函数*//*int arrow();/*主函数*/int main(){设置系统进入图形模式 */initialize();/*运行计算器 */computer(); /*系统关闭图形模式返回文本模式*/closegraph();/*/*结束程序*/return(0);}/* 设置系统进入图形模式 */void initialize(void){int xasp, yasp; /* 用于读x和y方向纵横比*/GraphDriver = DETECT; /* 自动检测显示器*/initgraph( &GraphDriver, &GraphMode, "" );/*初始化图形系统*/ErrorCode = graphresult(); /*读初始化结果*/如果初始化时出现错误*/if( ErrorCode != grOk ) /*{printf("Graphics System Error: %s\n",显示错误代码*/grapherrormsg( ErrorCode ) ); /*退出*/exit( 1 ); /*}getpalette( &palette ); /* 读面板信息*/MaxColors = getmaxcolor() + 1; /* 读取颜色的最大值*/MaxX = getmaxx(); /* 读屏幕尺寸 */MaxY = getmaxy(); /* 读屏幕尺寸 */getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中*/计算纵横比值*/ AspectRatio = (double)xasp/(double)yasp;/*}/*计算器函数*/void computer(void){定义视口类型变量*/struct viewporttype vp; /*int color, height, width;int x, y,x0,y0, i, j,v,m,n,act,flag=1;操作数和计算结果变量*/float num1=0,num2=0,result; /*char cnum[5],str2[20]={""},c,temp[20]={""};定义字符串在按钮图形上显示的符号 char str1[]="1230.456+-789*/Qc=^%";/**/mwindow( "Calculator" ); /*显示主窗口 */设置灰颜色值*//*color = 7;getviewsettings( &vp ); /* 读取当前窗口的大小*/width=(vp.right+1)/10; /* 设置按钮宽度 */设置按钮高度 */height=(vp.bottom-10)/10 ; /*/*设置x的坐标值*/x = width /2;设置y的坐标值*/y = height/2; /*setfillstyle(SOLID_FILL, color+3);bar( x+width*2, y, x+7*width, y+height );/*画一个二维矩形条显示运算数和结果*/setcolor( color+3 ); /*设置淡绿颜色边框线*/rectangle( x+width*2, y, x+7*width, y+height );/*画一个矩形边框线*/设置颜色为红色*/setcolor(RED); /*输出字符串"0."*/outtextxy(x+3*width,y+height/2,"0."); /*/*设置x的坐标值*/x =2*width-width/2;设置y的坐标值*/y =2*height+height/2; /*画按钮*/for( j=0 ; j<4 ; ++j ) /*{for( i=0 ; i<5 ; ++i ){setfillstyle(SOLID_FILL, color);setcolor(RED);bar( x, y, x+width, y+height ); /*画一个矩形条*/rectangle( x, y, x+width, y+height );sprintf(str2,"%c",str1[j*5+i]);/*将字符保存到str2中*/outtextxy( x+(width/2), y+height/2, str2);移动列坐标*/x =x+width+ (width / 2) ;/*}y +=(height/2)*3; /* 移动行坐标*/x =2*width-width/2; /*复位列坐标*/}x0=2*width;y0=3*height;x=x0;y=y0;gotoxy(x,y); /*移动光标到x,y位置*/显示光标*/arrow(); /*putimage(x,y,rar,XOR_PUT);m=0;n=0;设置str2为空串*/strcpy(str2,""); /*当压下Alt+x键结束程序,否则执行下面的循环while((v=specialkey())!=45) /**/{当压下键不是回车时*/while((v=specialkey())!=ENTER) /*{putimage(x,y,rar,XOR_PUT); /*显示光标图象*/if(v==RIGHT) /*右移箭头时新位置计算*/if(x>=x0+6*width)如果右移,移到尾,则移动到最左边字符位置*//*{x=x0;m=0;}else{x=x+width+width/2;m++;否则,右移到下一个字符位置*/} /*if(v==LEFT) /*左移箭头时新位置计算*/if(x<=x0){x=x0+6*width;m=4;} /*如果移到头,再左移,则移动到最右边字符位置*/else{x=x-width-width/2;m--;} /*否则,左移到前一个字符位置*/if(v==UP) /*上移箭头时新位置计算*/if(y<=y0){y=y0+4*height+height/2;n=3;} /*如果移到头,再上移,则移动到最下边字符位置*/else{y=y-height-height/2;n--;} /*否则,移到上边一个字符位置*/if(v==DOWN) /*下移箭头时新位置计算*/if(y>=7*height){ y=y0;n=0;} /*如果移到尾,再下移,则移动到最上边字符位置*/else{y=y+height+height/2;n++;} /*否则,移到下边一个字符位置*/putimage(x,y,rar,XOR_PUT); /*在新的位置显示光标箭头*/ }将字符保存到变量c中*/c=str1[n*5+m]; /*判断是否是数字或小数点*/if(isdigit(c)||c=='.') /*{如果标志为-1,表明为负数*/if(flag==-1) /*{将负号连接到字符串中*/strcpy(str2,"-"); /*flag=1;} /*将标志值恢复为1*/将字符保存到字符串变量temp中*/ sprintf(temp,"%c",c); /*将temp中的字符串连接到str2中*/strcat(str2,temp); /*setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);显示字符串*/outtextxy(5*width,height,str2); /*}if(c=='+'){将第一个操作数转换为浮点数*/num1=atof(str2); /*将str2清空*/strcpy(str2,""); /*做计算加法标志值*/act=1; /*setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);显示字符串*/outtextxy(5*width,height,"0."); /*}if(c=='-'){如果str2为空,说明是负号,而不是减号*/ if(strcmp(str2,"")==0) /*设置负数标志*/flag=-1; /*else{将第二个操作数转换为浮点数*/num1=atof(str2); /*将str2清空*/strcpy(str2,""); /*act=2; /*做计算减法标志值*/setfillstyle(SOLID_FILL,color+3);画矩形*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*显示字符串*/outtextxy(5*width,height,"0."); /*}}if(c=='*'){将第二个操作数转换为浮点数*/num1=atof(str2); /*strcpy(str2,""); /*将str2清空*/做计算乘法标志值*/act=3; /*setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width /2,3*height/2);显示字符串*/outtextxy(5*width,height,"0."); /*}if(c=='/'){将第二个操作数转换为浮点数*/num1=atof(str2); /*strcpy(str2,""); /*将str2清空*/做计算除法标志值*/act=4; /*setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='^'){将第二个操作数转换为浮点数*/num1=atof(str2); /*将str2清空*/strcpy(str2,""); /*做计算乘方标志值*/act=5; /*设置用淡绿色实体填充*/ setfillstyle(SOLID_FILL,color+3); /*画矩形*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*显示字符串*/outtextxy(5*width,height,"0."); /*}if(c=='%'){将第二个操作数转换为浮点数*/num1=atof(str2); /*strcpy(str2,""); /*将str2清空*/做计算模运算乘方标志值*/act=6; /*setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/画矩形*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*显示字符串*/outtextxy(5*width,height,"0."); /*}if(c=='='){将第二个操作数转换为浮点数*/num2=atof(str2); /*根据运算符号计算*/switch(act) /*{case 1:result=num1+num2;break; /*做加法*/case 2:result=num1-num2;break; /*做减法*/case 3:result=num1*num2;break; /*做乘法*/case 4:result=num1/num2;break; /*做除法*/case 5:result=pow(num1,num2);break; /*做x的y次方*/case 6:result=fmod(num1,num2);break; /*做模运算*/ }设置用淡绿色实体填充*/ setfillstyle(SOLID_FILL,color+3); /*覆盖结果区*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*将结果保存到temp中*/sprintf(temp,"%f",result); /*outtextxy(5*width,height,temp); /*显示结果*/}if(c=='c'){num1=0; /*将两个操作数复位0,符号标志为1*/num2=0;flag=1;strcpy(str2,""); /*将str2清空*/设置用淡绿色实体填充*/ setfillstyle(SOLID_FILL,color+3); /*覆盖结果区*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*显示字符串*/outtextxy(5*width,height,"0."); /*}如果选择了q回车,结束计算程序*/if(c=='Q')exit(0); /*}putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头*/返回*/return; /*}/*窗口函数*/void mwindow( char *header ){int height;cleardevice(); /* 清除图形屏幕 */setcolor( MaxColors - 1 ); /* 设置当前颜色为白色*//* 设置视口大小 */ setviewport( 20, 20, MaxX/2, MaxY/2, 1 );height = textheight( "H" ); /* 读取基本文本大小 */settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/*设置文本样式*/settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式*/输出标题*/outtextxy( MaxX/4, 2, header ); /*setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置视口大小*/ 画边框*/drawboder(); /*}画边框*/void drawboder(void) /*{定义视口类型变量*/struct viewporttype vp; /*setcolor( MaxColors - 1 ); /*设置当前颜色为白色 */setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/*设置画线方式*/将当前视口信息装入vp所指的结构中*/getviewsettings( &vp );/*画矩形边框*/rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*}/*设计鼠标图形函数*/int arrow(){int size;定义多边形坐标*/int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*设置填充模式*/setfillstyle(SOLID_FILL,2); /*/*画出一光标箭头*/fillpoly(8,raw);测试图象大小*/size=imagesize(4,4,16,16); /*分配内存区域*/rar=malloc(size); /*存放光标箭头图象*/getimage(4,4,16,16,rar); /*putimage(4,4,rar,XOR_PUT); /*消去光标箭头图象*/return 0;}/*按键函数*/int specialkey(void){int key;等待键盘输入*/while(bioskey(1)==0); /*key=bioskey(0); /*键盘输入*/只取特殊键的扫描值,其余为0*/ key=key&0xff? key&0xff:key>>8; /*return(key); /*返回键值*/}。
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语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#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 }。
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语⾔实现简单计算器程序这两天在看⼀个C语⾔写的计算器程序,做了不少的功夫,跟着作者⼀步步的进⾏完善,了解了许多细节性的东西,在此⾃⼰做个总结,加深⾃⼰对程序的印象,也算是梳理。
在该计算器程序,能进⾏加减乘除、sin、cos、exp等操作,同时能进⾏数值保存功能。
⽽该计算器使⽤逆波兰表⽰法。
即所有运算符都跟在操作数的后⾯,⽐如下列表达式:(1 - 2) * (4 + 5)采⽤逆波兰表⽰法表⽰为:1 2 - 4 5 + *逆波兰表达法中不需要圆括号,只要知道每个运算符需要⼏个操作数就不会引起歧义。
计算器程序实现很简单,具体原理如下:while(/* 下⼀个运算符或操作数不是⽂件结束指⽰符 */)if(/* 是数 */)/* 将该数压⼊到栈中 */else if (/* 是运算符 */)/* 弹出所需数⽬的操作数 *//* 执⾏运算 *//* 将结果压⼊到栈中 */else if (/* 是换⾏符 */)/* 弹出并打印栈顶的值 */else/* 出错 */在程序设计中,使⽤模块化思想,getop函数来进⾏读⼊,该函数返回⼀个标识,⽤来标识读⼊的是什么类型。
主循环体中根据该标识执⾏相应的动作。
以下是该程序:(我将所有函数和变量放在同⼀⽂件)#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXOP 100#define NUMBER '0' //标识读⼊的是数字#define NAME 'n' //标识读⼊的是字符串(函数名或⾮法字符串)#define ALPHA 26int getop(char []);void push (double); //压栈double pop(void); //出栈void clear(void); //清空栈void mathfnc(char []); //执⾏相应的数学函数sin、cos、exp等int main(void){int type;int i, var = 0;double op1, op2,v;char s[MAXOP];double variable[ALPHA];for (i = 0; i < ALPHA; i++) //初始化⽤于保存数值的变量数组variable[i] = 0.0;while ((type = getop(s)) != EOF) //读取输⼊{switch (type){case NUMBER:push (atof(s));break;case NAME:mathfnc(s);break;case '+':push (pop() + pop());break;case '*':push (pop() * pop());break;case '-':op2 = pop();push (pop() - op2);break;case '/':op2 = pop();if (op2 != 0.0)push (pop() / op2);elseprintf ("error: zero divisor\n");break;case '%':op2 = pop();if (op2 != 0.0)push (fmod(pop(), op2));elseprintf ("error: zero divisor\n");break;case '?': //打印栈顶元素op2 = pop();printf ("\t%.8g\n", op2);push (op2);break;case '=': //保存数值pop();if (var >= 'A' && var <= 'Z')variable[var - 'A'] = pop();elseprintf ("error: no variable name\n");break;case 'c':clear();break;case 'd': //复制栈顶元素op2 = pop();push(op2);push(op2);break;case 's': //交换栈元素op1 = pop();op2 = pop();push(op1);push(op2);case '\n':v = pop(); //v保存最后的⼀次结果printf ("\t%.8g\n", v);break;default:if (type >= 'A' && type <= 'Z')push(variable[type - 'A']);else if (type == '@') //输⼊的字符@表⽰最近⼀次结果值 push(v);elseprintf ("error: unknown command %s\n", s);break;}var = type;}return 0;}/* ----------------------------------------------------------- */#define MAXVAL 100int sp = 0; //标识栈顶double val[MAXVAL];void push(double f){if (sp < MAXVAL)val[sp++] = f;elseprintf ("error: stack full, can't push %g\n", f);}double pop(void){if (sp > 0)return val[--sp];else{printf ("error: statck empty\n");return 0.0;}}void clear(void){sp = 0;}void mathfnc (char s[]){double op2;if (strcmp (s, "sin") == 0)push(sin(pop()));else if(strcmp (s, "cos") == 0)push(cos(pop()));else if(strcmp (s, "exp") == 0)push(exp(pop()));else if(strcmp (s, "pow") == 0){op2 = pop();push (pow(pop(), op2));}elseprintf ("error: %s not supported\n", s);}/* ----------------------------------------------------------- */#include <ctype.h>int getch(void);void ungetch(int);int getop(char s[]){int i, c;while ((s[0] = c = getch()) == ' ' || c == '\t') //过滤开头的空⽩字符;s[1] = '\0';i = 0;if (islower(c)) //判断是否为⼩写字母,也即读取由⼩写字母组成的字符串 {while (islower(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);if (strlen (s) > 1)return NAME;elsereturn c;}if (!isdigit(c) && c != '.' && c != '-')return c;if (c == '-') //⽤于判断是负数还是减操作{if (isdigit(c = getch()) || c == '.')s[++i] = c;else{if (c != EOF)ungetch(c);return '-';}}if (isdigit(c)) //收集整数部分while (isdigit(s[++i] = c = getch()));if (c == '.') //收集⼩数部分while (isdigit(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);return NUMBER;}/* ----------------------------------------------------------- *//** 引⽤以下两个函数是因为:程序不能确定它已经读⼊的输⼊是否⾜够 ** 除⾮超前多读⼊⼀些输⼊,在本程序中,读⼊⼀些字符合成⼀个数字 ** 所以在看到第⼀个⾮数字字符之前,已经读⼊的数的完整性是不能确定的* 由于程序要超前读⼊⼀个字符,这样就导致最后⼜⼀个字符不属于当前所要读⼊的数*/#define BUFSIZE 100char buf[BUFSIZE];int bufp = 0;int getch(void){return (bufp > 0) ? buf[--bufp] : getchar();}void ungetch (int c){if (bufp >= BUFSIZE)printf ("ungetch: too many characters\n");elsebuf[bufp++] = c;}该程序虽然简单,但是还是存在⼀些⼩⼩的问题,⽐如没有数据时进⾏pop的话,会打印栈中⽆数据同时返回数值0.0,在循环体中许多执⾏操作会将该数值保存到栈中,之后打印该值,⽤户体验度⽐较差。
C语言制作简单计算器
C语言制作简单计算器一、项目介绍我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。
本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。
我们需要检查输入,确保用户没有要求计算机完成不可能的任务。
还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2项目效果图编写这个程序的步骤如下:∙获得用户要求计算机执行计算所需的输入。
∙检查输入,确保输入可以理解。
∙执行计算。
∙显示结果。
三、解决方案1.步骤1获得用户输入是很简单的,可以使用printf()和scanf()。
下面是读取用户输入的程序代码:#include<stdio.h>int main(){double number1=0.0; //定义第一个操作值double number2=0.0; //定义第二个操作值char operation=0; //operation必须是'+''-''*''/'或'%'printf("\nEnter the calculation\n");scanf("%lf%c%lf",&number1,&operation,&number2);return0;}2.步骤2接着,检查输入是否正确。
最明显的检查是要执行的操作是否有效。
有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。
还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。
如果右操作数是0,这些操作就是无效的。
这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。
switch(operation){case'+':printf("=%lf\n",number1+number2);break;case'-':printf("=%lf\n",number1-number2);break;case'*':printf("=%lf\n",number1*number2);break;case'/':if(number2==0)printf("\n\n\aDavision by zero error!\n");elseprintf("=%lf\n",number1/number2);break;if((long)number2==0)printf("\n\n\aDavision by zero error!\n");elseprintf("=%ld\n",(long)number1%(long)number2);break;default:printf("\n\n\aDavision by zero error!\n");break;取余运算符对float或double类型是没有意义的,因为他们可以表示精确的结果。
AT89C51单片机C实现简易计算器
AT89C51单片机简易计算器的设计一、总体设计根据功能和指标要求,本系统选用MCS-5系列单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。
(2)另外键盘包括数字键(0〜9)、符号键(+、、x、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。
(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCDt输出运算结果。
(4)错误提示:当计算器执行过程中有错误时,会在LCDt显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCDt提示溢出;当除数为0时,计算器会在LCD 上提示错误。
系统模块图:二、硬件设计(一)、总体硬件设计本设计选用AT89C51单片机为主控单元。
显示部分:采用LCD静态显示。
按键部分:采用 4*4键盘;利用MM74C92为4*4的键盘扫描IC ,读取输入的键值。
总体设计效果如下图:禺弱蚯>9上bdJlBtJII卜0bk圏】系喘方案图3- -Od 右□ P -C3 1X1 ih- -F I !i ■ ■ ■ B. SK I :就 疔*AJH31 TT3S ■ Nt PI 1Ph J Pl ;PIT PI f.Pll ; 和 ILdfl fD l.-U Fp7j<T r :心ny^ui PFL * ■、工世 鬥沁I *1 ell H ir*j : ■J.tmi =7 muBn ,二 pj ..nir P3⑷ p i*/n 叩.033. ft::r^jub.a:■ . H 1 -E L " H 也 cjzj HBCn “心《.一一「丁 g -...宁"hfL;i 【巒 1— ■ ..2M_ 0 31(二)、键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
(完整word版)VC++简单科学计算器设计
简单科学计算器设计VC++课程设计报告简单科学计算器设计一、设计任务1.选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。
统计学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能:1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算3)、具备历史计算的记忆功能。
2.设计目标使计算器含有以下功能:(1)、基本运算功能:可以进行加、减、乘、除等基本运算。
(2)、数制转换功能:可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。
(3)、三角函数运算功能:可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。
(4)、对数、指数运算功能:可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。
(5)、删除功能:可以在输入错误时删除已输入的数值。
(6)、归零功能:可以在计算完成后清空编辑框中的已有数值。
二、程序设计与实现1.程序结构本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。
以下是本计算器的运算流程图:2. 设计步骤:(1) 创建一个基于对话框的应用程序。
(2) 利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话框各按钮的ID 属性和Caption 属性。
C程序项目一制作简单计算器
C程序项目一制作简单计算器项目一—简单计算器制作项目演示课程项目展示目标理解和掌握项目所涉及的知识点掌握C语言的基本编程方法学会使用菜单解决日常生活中的小问题相关知识点序号123知识点说明常用数据类型:整型、浮点型、字符型定义符号:int、float、double、char常量、变量(1)双目算术运算符及其表达式:运算符:+、-、*、/、%(2)强制类型转换:(类型)表达式数据的输入输出:变量名命名、变量类型的选择%:整数取余/、%:除数不为0控制符的使用:%d、%f、%c4scanf()、printf()getchar()、putchar()567多分支选择语句:函数原型:stdio.h注意函数的返回值switch表达式的类型:整型、字符型无限循环的设定函数原型:stdlib.hif-elseif、switch循环语句:while、do-while、for清屏函数:system(“cls”)结束程序函数:exit(0)功能描述功能:实现一个简易计算器,能够完成数值型数据的加、减、乘、除、求余运算。
要求:采用人机对话形式:使用菜单通过多分支选择语句实现加、减、乘、除、求余运算添加必要的提示信息能够实现菜单的循环显示实现步骤实现步骤定义变量设计菜单实现菜单项变量的个数变量名变量的类型清屏显示菜单项显示提示信息选择菜单项实现多分支结构实现菜单项功能实现程序退出项目实现一完成任务单中所需内容要求:以电子文档方式提交文件以组名.doc方式命名,如:一组.doc完成时间:15分钟阶段小结定义变量变量名num1num2choose数据类型floatfloatint功能存放第一个运算数定义floatnum1,num2;存放第二个运算数存放用户输入的菜单选项intchoose;阶段小结设计菜单任务名称主菜单设计接收键盘数据任务实现使用printf()函数及转义字符’\n’、’\t’和制表符完成(1)使用printf()函数显示提示信息(2)使用scanf()函数实现数据的接收阶段小结实现菜单项任务名称任务实现(1)使用switch语句实现多个分支的控制(2)使用scanf()函数输入运算数(3)判别算术运算符:+、-、*、/、%,执行相应运算(4)使用printf()函数输出运算结果使用exit(0)函数运算处理程序结束项目实现二修改任务单布置编写任务,完成项目功能要求:以电子文档方式提交文件以“组名.c”方式命名,如:一组.c完成时间:20分钟阶段小结循环菜单的实现数据有效性的判别菜单项数据的有效性判断参与除法和求余数中除数为0的判断强制类型转换屏幕信息暂停的处理项目实现三优化项目要求:以电子文档方式提交文件以“组名.c”方式命名,如:一组.c完成时间:10分钟项目总结-菜单编写步骤项目总结菜单编写步骤:4程序优化:321实现菜单项:设计菜单:定义变量:确定项目中需要的变量个数及其类型为变量定义合理的名称使用if-elseif或switch语句进行使用菜单各选项的处system(“cls”)理清屏使用printf输出使用exit(0)函数结束程序菜单内容使用printf输出提示信息使用scanf输入菜单选项使用while实现循环菜单显示使用getchar()或scanf()实现屏幕信息的暂停显示使用if语句对数据进行有效性处理作业【项目名称】银行存款【功能描述】1、计算到期存款金额2、已知工商银行整存整取存款不同期限的年利率分别为:3.1%期限三个月3.3%期限六个月3.5%期限一年4.4%期限两年5.0%期限三年5.5%期限五年3、选择存款期限,并输入存钱的本金,求到期时,能从银行得到的利息与本金的合计。
C#编写简易计算器(附源代码)超详细
超详细因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里使用Windows窗体应用程序,并命名为Calc,如下图所示:向窗体中拖入需要的控件,如下图所示:(完成效果图)结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow,按键0~9 为Button 控件,并将其name分别修改为btn_O、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 ponentModel;usingusing System.Data;namespace Calc{/// <summary>///温柔一刀C#简易计算器的实现/// </summary>public class CalcFormForm{private Button btnprivate Button btnprivate Button btnprivate Button btnprivate Button btnprivate Button btn_5;private Button btn_6;private Button btn_7;private Button btn_8;private Button btn_9;private Button btn_add;private Button btn_sub;private Button btn_mul;private Button btn_div;private Button btn_sqrt;private Button btn_sign;private Button btn_equ;private Button btn_dot;private Button btn_rev;private TextBox txtShow;private Button btn_sqr;private PictureBox pictureBox1;private LinkLabel linkLabel1;/// <summary>/// 必需的设计器变量。
用C#实现简单计算器(课外作业)
⽤C#实现简单计算器(课外作业)⼀、打开vs2013,选择新建→项⽬→Windows窗体应⽤程序⼆、对窗体进⾏设计,添加响应的按钮等部件,可修改各部件参数(重新打开⽂件,可通过视图→设计器,打开窗体的设计器界⾯)三、功能说明1.加减乘除运算2.⼗进制转⼆进制,⼗进制转⼗六进制3.“与”和“或”的位运算4.平⽅和开⽅运算5.ANS能存储上⼀次的运算结果,CE清除Text内容,AC清除所有数据四、双击部件进⾏代码编辑,以下是计算器的代码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 Calculator{public partial class Form1 : Form{private double num1=0;//第⼀操作数private double num2;//第⼆操作数private string sign;//运算符号private double num3;//结果private bool check=true;//检测是否为第⼀操作数private double ans = 0;//存储上⼀次计算的结果public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e) {if (check==true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button2_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button3_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button4_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}elseButton b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button5_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button6_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button7_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button8_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}private void button9_Click(object sender, EventArgs e) {if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else{Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}private void button10_Click(object sender, EventArgs e){if(textBox1.Text != ""){if(check==true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else if (check == false){Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}}private void button12_Click(object sender, EventArgs e)//加法 {sign = "+";textBox1.Text = "";check = false;}private void button13_Click(object sender, EventArgs e)//减法 {sign = "-";textBox1.Text = "";check = false;}private void button14_Click(object sender, EventArgs e)//乘法 {sign = "*";textBox1.Text = "";check = false;}private void button15_Click(object sender, EventArgs e)//除法 {sign= "/";textBox1.Text = "";check = false;}private void button23_Click(object sender, EventArgs e)//与运算 {sign = "&";textBox1.Text = "";check = false;}private void button24_Click(object sender, EventArgs e)//或运算 {sign = "|";textBox1.Text = "";check = false;}private void button25_Click(object sender, EventArgs e)//平⽅ {sign = "pow";textBox1.Text = "";check = false;}private void button26_Click(object sender, EventArgs e)//开⽅ {sign = "sqrt";textBox1.Text = "";check = false;}private void button16_Click(object sender, EventArgs e)//等于号 {check = true;switch (sign){case"+":case"-":num3 = num1 - num2;break;case"*":num3 = num1 * num2;break;case"/":num3=num1/num2;break;case"&":num3 = (int)num1 & (int)num2;break;case"|":num3 = (int)num1 | (int)num2;break;case "pow":num3 = Math.Pow(num1,2);break;case "sqrt":num3 = Math.Sqrt(num1);break;}num1 = num3;ans = num1;textBox1.Text = num3.ToString();}private void button17_Click(object sender, EventArgs e)//清除所有的数据 {textBox1.Text = "";num1 = 0;num2 = 0;num3 = 0;ans = 0;}private void button22_Click(object sender, EventArgs e)//清除当前的数据 {textBox1.Text = "";num1 = 0;num2 = 0;num3 = 0;}private void button11_Click(object sender, EventArgs e)//⼩数点{if (textBox1.Text != ""){if (check == true){Button b = (Button)sender;textBox1.Text += b.Text;num1 = double.Parse(textBox1.Text);}else if (check == false){Button b = (Button)sender;textBox1.Text += b.Text;num2 = double.Parse(textBox1.Text);}}}private void button18_Click(object sender, EventArgs e){int a = int.Parse(textBox1.Text);textBox1.Text = Convert.ToString(a, 2);}private void button19_Click(object sender, EventArgs e){int a = int.Parse(textBox1.Text);textBox1.Text = Convert.ToString(a, 16);}private void button21_Click(object sender, EventArgs e){{num1 = ans;}else{num2 = ans;}}private void button20_Click(object sender, EventArgs e) {textBox1.Text = " ㄟ(▔⽫▔ㄟ)";}}}。
用C++实现简单计算器文档
用VC++制作简单计算器本设计将实现一个简单计算器,其类似于Windows附件中自带的计算器。
这个计算器仅实现了简单的四则运算功能,具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在设计中,系统开发平台为Windows XP,程序设计语言采用Visual C++,在程序设计中,采用结构化与面向对象两种解决问题的方法。
1.1背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
1.2目的在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
2开发工具的介绍2.1 关于Visual C++Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT 的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
C#编写简易计算器(附源代码)超详细
超详细一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里使用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 ponentModel;using System.Windows.Forms;using System.Data;namespace Calc{///<summary>/// QQ:479340056 温柔一刀C#简易计算器的实现///</summary>public class CalcForm : System.Windows.Forms.Form{private 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>///必需的设计器变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VC++制作简单计算器
本设计将实现一个简单计算器,其类似于Windows附件中自带的计算器。
这个计算器仅实现了简单的四则运算功能,具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在设计中,系统开发平台为Windows XP,程序设计语言采用Visual C++,在程序设计中,采用结构化与面向对象两种解决问题的方法。
1.1背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
1.2目的
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
2开发工具的介绍
2.1 关于Visual C++
Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT 的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用
该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
VC++6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软硬件没有特殊要求。
就是说它对环境的要求与Windows 95/98、Windows NT要求是一致的。
硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。
软件要求:Windows 95/98或Windows NT3.51以上版本。
VC++ 6.0系统可以在一张CD盘上,也可以在“Visual Studio( Visual C++、Visual Foxpro)”等产品的第一张CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC 6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。
与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0
中文版”子菜单中的“Microsoft Visual C++ 6.0 中文版”程序。
(2)用户也可以使用命令行启动VC。
单击“开始”按钮后选择“运行”命令,在“运
行”对话框中输入c:\Program Files\Microsoft Visual Studio\VC98\VC6.exe(按默认盘符和路径安装)即可。
2.2 可行性分析
本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。
使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
2.3 需求分析
本软件主要用于计算机windows 2000/XP以上版本的用户的使用,设计要求实现简
单计算器的功能。
要程序能实现:加,减,乘,除,开方等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。
3功能说明
它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。
使用人员能快捷简单地进行操作。
即可单机按钮进行操作,也可直接通过键盘直接输入。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
(1)包含的功能有:加、减、乘、除运算,开方等功能
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色。
(4)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(5)计算功能基本上是用系统内部函数。
(6)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(10)“C E”按钮可以清除所有已输入的数据从头计算
4系统的实现
4.1 窗体设计
利用MFC AppWinzard生成计算器应用程序框架具体步骤如下:
(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Calculator 。
Lacation文本框是指项目的本地路径。
(2)单击OK按钮,弹出MFC AppWinzard_Step1对话框。
选中单选按钮,如图所示。
(3)单击Next按钮,弹出MFC AppWinzard_Step2 of4对话框,如图所示。
(4)单击Next按钮,弹出MFC AppWinzard_Step3 of4对话框,如图所示。
(5)单击Next按钮,弹出MFC AppWinzard_Step4 of4对话框,如图所示。
单击Finish 按钮,创建框架。
4.2 编辑资源
(1)编辑对话框及控件资源
利用Visual C++提供的资源编辑器对对话框资源进行编辑。
删除对话框中默认的OK和Cancel按钮。
添加一个Edit控件,其控件ID为IDC_DSPEDIT。
添加若干按钮控件,其ID如表4-1所示。
表4-1 按钮控件资源清单
按钮名称按钮ID 用途
0 IDC_BUTTON_0 按键0
1 IDC_BUTTON_1 按键1
2 IDC_BUTTON_2 按键2
3 IDC_BUTTON_3 按键3
4 IDC_BUTTON_4 按键4
5 IDC_BUTTON_5 按键5
6 IDC_BUTTON_6 按键6
7 IDC_BUTTON_7 按键7
8 IDC_BUTTON_8 按键8
9 IDC_BUTTON_9 按键9。
IDC_BUTTON_POINT 小数点
= IDC_BUTTON_DENG 求值
+ IDC_BUTTON_ADD 加号
- IDC_BUTTON_DEC 减号
* IDC_BUTTON_MUT 乘号
/ IDC_BUTTON_DEV 除号
CE IDC_BUTTON_CE 清屏
Sqrt IDC_BUTTON_SQRT 开方
(2)程序界面
(3)
(4)程序清单
Resource.h //实现计算器中各控件宏定义,相关连键盘上的数据及运算键jisuanDlg.h //计算器程序实现函数定义
jisuanDlg.cpp //计算器实现函数具体实现
jisuan.h //main header file for the JISUAN application
jisuan.cpp //Defines the class behaviors for the application.
(4)程序源文件
见附件程序。