ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:41.23KB ,
资源ID:4241895      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4241895.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简易计算器C语言代码.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简易计算器C语言代码.docx

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

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

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

4、要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集,操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操作符,一个用来存放操作数。char ops7=+,-,*,/,(,),#;int cmp77= 2,2,1,1,1,2,2, 2,2,1,1,1,2,2, 2,2,2,2,1,2,2, 2,2,2,2,1,2,2, 1,1,1,1,1,3,0, 2,2,2,2,0,2,2, 1,1,1,1,1,0,3; typedef struct char elemStack_Size; int top; SeqStack; typedef struct int elemSta

5、ck_Size; int top; SeqStackOperand;系统流程图 图 系统流程图主要算法 比较运算符优先级:程序里的涉及到的运算符有7个,分别是+,-,*,/,(,),#,它们之间的优先级关系用一个二维数组来存放,int cmp77= 2,2,1,1,1,2,2, 2,2,1,1,1,2,2, 2,2,2,2,1,2,2, 2,2,2,2,1,2,2, 1,1,1,1,1,3,0, 2,2,2,2,0,2,2, 1,1,1,1,1,0,3;其中3代表=,2代表,1代表,0代表不可比。char Compare(char ch1, char ch2) int i,m,n; char

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

7、itgraph(500,300); / 这里和 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,110+65*j,20); else rectangle(55+65*i-20,110+65*j-20,55+65*i+20,110+65*j+20); for(i=0;i7;i+) if(i4) circle(55+65*i,110+65*j,20); else r

8、ectangle(55+65*i-20,110+65*j-20,55+65*i+20,110+65*j+20); outtextxy(50,105,7); outtextxy(115,105,8); outtextxy(180,105,9); outtextxy(240,105,C); outtextxy(310,105,+); outtextxy(375,105,(); outtextxy(440,105,); outtextxy(50,170,4); outtextxy(115,170,5); outtextxy(180,170,6); outtextxy(240,170,.); outt

9、extxy(310,170,-); outtextxy(370,170,sqrt); outtextxy(440,170,-); outtextxy(50,235,3); outtextxy(115,235,2); outtextxy(180,235,1); outtextxy(245,235,0); outtextxy(310,235,*); outtextxy(375,235,/); outtextxy(440,235,=);2. 按键响应操作当用户通过鼠标左键按下0,1,2,3,4,5,6,7,8,9,.,+,*,/,(,),=,这些键时,字符按点击顺序在输出文本框输出;当用户点击35&

10、m.x90&m.y100&m.x90&m.y165&m.x90&m.y225&m.x90&m.y290&m.x90&m.y355&m.x90&m.y420&m.x90&m.y35&m.x155&m.y100&m.x155&m.y165&m.x155&m.y225&m.x155&m.y290&m.x155&m.y355&m.x155&m.y420&m.x155&m.y195) n=strlen(string);printf(n=%d.,n);stringn-1=0; bar(15, 15, 480, 70);setcolor(BLACK);outtextxy(25,40,string);/35&

11、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.x215&m.ytop =-1;/初始化运算数栈void InitStacknOperand(SeqStackOperand *S) S-top =-1;/判断栈S为空栈时返回值为真, 反之为假int IsEmpty(SeqStack *S) return(S-top=-1?TRUE:FALSE);/判断栈S为空栈时返回值为真, 反之为假int IsEmptynOperand(SeqStackOperand *S) retu

12、rn(S-top=-1?TRUE:FALSE);/判断栈S为满栈时返回值为真, 反之为假int IsFull(SeqStack *S) return(S-top=Stack_Size-1?TRUE:FALSE);/判断栈S为满栈时返回值为真, 反之为假int IsFullOperand(SeqStackOperand *S) return(S-top=Stack_Size-1?TRUE:FALSE);/运算符栈入栈函数int Push(SeqStack *S, char x) if (S-top=Stack_Size-1) printf(Stack is full!n); return FAL

13、SE; else S-top+; S-elemS-top=x; return TRUE; /运算数栈 入栈函数int PushOperand(SeqStackOperand *S, int x) if (S-top=Stack_Size-1) printf(Stack is full!n); return FALSE; else S-top+; S-elemS-top=x; return TRUE; /运算符栈 出栈函数int Pop(SeqStack *S, char *x) if (S-top=-1) printf(运算符栈空!n); return FALSE; else *x=S-ele

14、mS-top; S-top-; return TRUE; /运算数栈 出栈函数int PopOperand(SeqStackOperand *S, int *x) if (S-top=-1) printf(运算符栈空!n); return FALSE; else *x=S-elemS-top; S-top-; return TRUE; /运算符栈取栈顶元素函数char GetTop(SeqStack *S) if (S-top =-1) printf(运算符栈为空!n); return FALSE; else return (S-elemS-top); /运算数栈取栈顶元素函数int GetT

15、opOperand(SeqStackOperand *S) if (S-top =-1) printf(运算符栈为空!n); return FALSE; else return (S-elemS-top); /判断输入字符是否为运算符函数, 是返回TRUE, 不是返回FALSEint Isoperator(char ch) int i; for (i=0;i7;i+) if(ch=opsi) return TRUE; return FALSE;/比较运算符优先级函数char Compare(char ch1, char ch2) int i,m,n; char pri; int priorit

16、y; for(i=0;i7;i+) /找到相比较的两个运算符在比较矩阵里的相对位置 if(ch1=opsi) m=i; if (ch2=opsi) n=i; priority = cmpmn; switch(priority) case 1: pri=; break; case 3: pri=; break; case 0: pri=$; printf(表达式错误!n); break; return pri;/运算函数int Execute(int a, char op, int b) int result; switch(op) case +: result=a+b; break; case

17、 -: result=a-b; break; case *: result=a*b; break; case /: result=a/b; break; return result;/*读入一个简单算术表达式并计算其值. operator和operand分别为运算符栈和运算数栈, OPS为运算符集合*/int ExpEvaluation(char *str) int a,b,v,temp; char ch,op; int i=0; SeqStack operatordata; SeqStackOperand operand; InitStack(&operatordata); InitStac

18、knOperand(&operand); Push(&operatordata,#); ch=*str+; while(ch!=# | GetTop(&operatordata)!=#) if(!Isoperator(ch) temp=ch-0; /将字符转换为十进制数 ch=*str+; i+; while(!Isoperator(ch) temp=temp*10 + ch-0; /将逐个读入运算数的各位转化为十进制数 ch=*str+; i+; PushOperand(&operand,temp); else switch(Compare(GetTop(&operatordata),ch) case : Pop(&operatordata,&op); PopOperand(&operand,&b); PopOperand(&operand,&a); v=Execute(a,op,b); /对a和b进行op运算 PushOperand(&operand,v); break; /end while v=GetTopOperand(&operand); return v;小结知识点:VC绘图库鼠标按键响应操作结构体定义顺序栈顺序栈的基本操作:初始化栈、判断栈是否为空、取栈顶元素、入栈、出栈功能扩充实现取对数、正弦、余弦等一些函数功能。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1