简易计算器c语言代码_第1页
简易计算器c语言代码_第2页
简易计算器c语言代码_第3页
简易计算器c语言代码_第4页
简易计算器c语言代码_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、11 我!简易四则运算计算器计算机工具地历史而言,中国古代最早采用地一种讣算工具叫筹策,乂叫做 算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束, 放在布袋里可随身携带。直到今天仍在使用的住算盘,是中国古代计算工具领域 中的另一项发明明代时的住算盘已经与现代的住算盘儿乎相同。17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔发现了“纳 皮尔算筹”;英国牧师奥却德发明了圆柱形对数讣算尺,这种讣算尺不仅能做加 减乘涂,乘方和开方运算,甚至可以讣算三角函数,指数函数和对数函数。这些 计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为 现代社会应用

2、广泛的计算工具,如手机,操作系统上附带的多功能计算器。项目设计目的掌握模块的划分;掌握结构体定义;掌握栈的操作;掌握函数的定义;掌握栈的基本操作;掌握VC的基本绘图库;掌握鼠标的响应操作;目设计内容设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型 实现整数的四则运算操作,开方运算。项目设计要求根据分析,系统要求实现以下儿点基本功能:可通过按钮输入数字、运算符;能通过按钮实现退格、清除功能;实现加、减、乘、除、开方运算功能;实现括号运算;显示运算结果: 良好的交互界面。项目详细设计功能模块图根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算 器按键控制模块、四则

3、混合运算模块、计算器记忆处理模块。计算器界面设讣模块:调用VC图形系统函数和字符函数画出计算器的界面, 包括24个按钮和一个文本输入框。计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如 接收数字输入等。计算器讣算处理模块。计算处理模块主要完成可以包括括号的表达式运算, 运算包括加,减,乘,除、开方。讣算处理模块在按键控制模块中被调用执行。 处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈, 一个用来存放操作数栈。计算器记忆处理模块。记忆处理模块使讣算其具有记忆功能。记忆当前输入 的表达式,给出一个最后的运算结果。可以清楚部分或全部记忆的值。简易计算器计算器

4、记忆模块计算器界面模块计尊器按键控制模块计茸器处理模块3侮个人平等地捉升门我!图简易计算器模块图数据结构该系统主要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集, 操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操 作符,一个用来存放操作数。char ops7=7*:C,);#);int cmp77=2,2,1,1,122,221,1,1,2,2,2,2,221,2,2,2,2,221,2,2,1,1,1,1,1,3,0,2,2,220,2,2,1,1,1,1,103;typedef structchar elemStack_Size;int top;(SeqS

5、tack;typedef stnjctint elemStack_Size;int top;)SeqStackOperand;系统流程图图系统流程图主要算法比较运算符优先级:程序里的涉及到的运算符有7个,分别是 它们之间的优先级关系用一个二维数组来存放,int cmp77=2,2,1,1,122,221,1,1,2,2,2,2,221,2,2,2,2,221,2,2,1,1,1,1,1,3,0,2,2,220,2,2,1,1,1,1,103;5Il 我!其中3代表 =2代表1代表农,0代表不可比。char Compare(char ch 1, char ch2) int i,m,n;char

6、pri;int priority;for(i=0;iv7;i+)找到相比较的两个运算符在比较矩阵里的相对位置if(chl=opsi) m=i;if (ch2=opsi) n=i;priority = cmpmn; switch(priority) case 1: pri二V; break;case 2: pri=A; break;case 3: pri=; break;case 0:pri=$printf(表达式错误!nu);break;return pri;1.计算器界面设计利用VC绘图库函数设计一个相对友好的操作界面。关于VC绘图库的介绍 在本书第二章。界面图像如下:#56+(12 8)*

7、S=80图:计算器界面画计算机界面。initgraph(5OO,3OO);/ 这里和 TC 略有区别 bar(15, 15,480, 70);setcolor(WHITE);rectangle( 10,10,490.290);setcolor(WHITE);for(j=0;j2;j 卄) for(i=0;i7;i+)if(i3) circle(55+65*i,l 10+65*j,20);else rectangle(55+65*i-20J 10+65*j-20,55+65*i+20,l 10+65*j+20);) for(i=0;i7;i+)if(i4) circle(55+65*i J 10

8、+65*j,20);else rectangle(55+65*i-20,l 10+65*j-20,55+65*i+20,l 10+65*j+20); outtextxy(50J 05,H7H);outtextxy(l 15 J 05/8n);outtextxy( 180,105,9);outtextxy(240J 05,HCn);outtextxy(31005J+M);outtextxy(375J05,H(n);outtextxy(440J 05,H)n);outtextxy(50J 70,4H);outtextxy(l 15J 70,n5H);outtextxy(l 80 J 70,H6M)

9、; outtextxy(240J70,.H);outtextxy(310,170/-M);outtextxy(370,170, MsqrtH);7outtextxy(440J 70J*35&m.x90&m.y 100&m.x90&m.y v 130)strcat(string/,8,);outtextxy(25,40,string);if(m.x 165&m.x90&m.y v 130)strcat(string/9H);outtextxy(25,40,string);if(m.x225&m.x90&m.y v 130)setcolor(WHITE); bar(15, 15, 480, 70)

10、;strcpy(string/M,); /Cif(m.x290&m.x90&m.yv 130)strcat(string/,+,);outtextxy(25,40,string);if(m.x355&m.x90&m.yv 130)strcat(string/,(H);outtextxy(25,40,string);if(m.x420&m.x90&m.y35&m.x 155&m.y v 195)strcat(string/,4n);outtextxy(25.40,string);if(m.x 100&m.xv二 140&m.y 155&m.y v 195)strcat(string/5H);ou

11、ttextxy(25,40,string);)if(m.x 165&m.x 155&m.y v 195)strcat(string/,6n);outtextxy(25.40,string);)if(m.x225&m.x 155&m.yv 195)strcat(string/,.,);outtextxy(25,40,string);if(m.x290&m.x 155&m.yv 195)strcat(string/,-H);setcolor(BLACK);outtextxy(25,40,string);if(m.x355&m.x 155&m.yv 195) /lgn=strlen(string);

12、switch(n)/不超过5位case 5:i=string0* 10000+string 1 * 1000+string 2* 100+string3* 10+string4;break;case 4:i=string0* 1000+string 1 * 100+string2* 10+string3;break;case 3:i二string0* 100+string 1*10+string2;break;case 2:i=string0* 10+stringl;break;case l:i=stringl;break;)itoa(sqrt(i),string J 0);setcolor(

13、WHITE); bar(15, 15, 480, 70); setcolor(BLACK); outtextxy(25,40,string);if(m.x420&m.x 155&m.yv 195)n=strlen(string);printf(Mn=%d.n);stringn-l=O,; bar(15, 15, 480, 70);setcolor(BLACK);outtextxy(25,40,string); /35&m.x215&m.y100&m.x215&m.y165&m.x215&m.y225&m.x215&m.y290&m.x215&m.y355&m.x215&m.y420&m.x21

14、5&m.ytop =-l;初始化运算数栈void InitStacknOperand(SeqStackOperand *S)S-top =-1;/判断栈s为空栈时返回值为真,反之为假int IsEmpty(SeqStack *S)return(S-top=-1 ?TRUE:FALSE);/判断栈s为空栈时返回值为真,反之为假int IsEmptynOperand(SeqStackOperand *S)retum(S-top=-1 ?TRUE:FALSE);)判断栈s为满栈时返回值为真,反之为假int IsFull(SeqStack *S) return(S-top=Stack_Size-l?T

15、RUE:FALSE);/判断栈s为满栈时返回值为真,反之为假int IsFullOperand(SeqStackOperand *S)return(S-top=Stack_Size-1 ?TRUE:FALSE);运算符栈入栈函数9人平等|材int Push(SeqStack *S, char x)if (S-top=Stack_Size-1)printf(HStack is full!nH); return FALSE; elseS-top+;S-elemS-top=x; return TRUE;1)运算数栈入栈函数int PushOperand(SeqStackOperand *S, int

16、 x) if (S-top=Stack_Size-1)printf(HStack is full!nn); return FALSE; elseS-top+;S-elemS-top=x; return TRUE;运算符栈出栈函数int Pop(SeqStack *S, char *x)if (S-top=-l)printfC运算符栈空!n“); return FALSE;else*x=S-elemS-top; S-top; return TRUE;运算数栈出栈函数int PopOperand(SeqStackOperand int *x)if (S-top=-l)prints运算符栈空!n”)

17、;return FALSE;else*x=S-elemS-top;S-top;return TRUE;1运算符栈取栈顶元素函数char GetTop(SeqStack *S)if (S-top =-l)printf(n运算符栈为空!n“); return FALSE;elsereturn (S-elemS-top);1运算数栈取栈顶元素函数int GetTopOperand(SeqStackOperand *S)if (S-top =-l)printf(n运算符栈为空!n“); return FALSE;elsereturn (S-elemS-top);1)/判断输入字符是否为运算符函数,是返

18、回TRUE,不是返回FALSE int Isoperator(char ch)#Il 我!int i;for (i=0;iv7;i+)if(ch=opsi)return TRUE;return FALSE;)比较运算符优先级函数char Compare(char ch 1, char ch2)int i,m,n;char pri;int priority;for(i=0;iv7;i+) 找到相比较的两个运算符在比较矩阵里的相对位置 if(chl=opsi)m=i;if (ch2=opsi)n=i;priority = cmpmn;switch(priority)case 1:pri=; bre

19、ak;case 3:pri=; break;case 0:pri=$;printf(表达式错误!n); break;return pri;)运算函数int Execute(int a, char op, int b)int result;switch(op)caseresult=a+b;break;case tJ:result二a-b;break;caseresult=a*b;break;case 7:result=a/b;break;return result;/*读入一个简单算术表达式并计算其值.operator和operand分别为运算符栈 和运算数栈,OPS为运算符集合*/int ExpEvaluation(char *str)int nbvjemp;char ch,op;int i=0;SeqStack operatordata; SeqStackOperand operand;InitStack(&operatordata);InitStacknOperand(&o perand);Push( (feoperatorda

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论