简易计算器高级语言课程设计报告_第1页
简易计算器高级语言课程设计报告_第2页
简易计算器高级语言课程设计报告_第3页
简易计算器高级语言课程设计报告_第4页
简易计算器高级语言课程设计报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、-. z. . . . word . .课程名称: C语言程序设计课题名称: 简易计算器班级: *: 指导教师: 成绩: 一、课程设计目的通过这次的课程设计,稳固以前所学的知识:进一步熟悉了各种语句,如宏定义语句,语句的嵌套等等。对顺序,选择,循环构造的综合运用。进一步稳固了一些算法,如求四则混合运算,三角函数,指对数的算法。在课程设计的过程中,拓展了自己的知识面,知道我们所学过的C语言知识不过是很少的一局部。还有很多知识等待我们自己去学习。为了完善自己的程序,通过上网,查阅图书等途径学到了一些新的知识,如对C语言中一些常用图形函数的应用。通过课程设计,加深对构造化程序设计思想的理解,能进展一

2、个系统功能需求分析,并设计合理的模块化构造。通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。二、设计容我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:查询当时时间简单的四则混合运算支持小括号、优先级正弦、余弦函数计算指对数计算三、总体设计简单计算器由六大模块组成,模块调用图如下:Main()ZhiDuiShuYunSuan()SanJiaoYunSuan()Time()SiZeYunSuan()ZhuJieMian()主函数 void main() 功能:调用各个主要模块,实现简单计算器的整体功能。 主界面函数void ZhuJieMian() 功能:使用

3、有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。时钟函数 int Time()功能:在模拟的可视化计算器中显示当时的时间。四则混合运算函数void SiZeHunHeYunSuan()功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。 三角运算函数void SanJiaoYunSuan()功能:实现根本的三角函数运算:sin(*)和cos(*)。 指对数函数void ZhiDuiShuYunSuan()功能:实现根本的指数和对数运算。四、详细设计a)数据构造设计:int priority(char left,char right)char option=+,-,*,/

4、,(,),=; int i,le,ri; int l=4,4,6,6,2,10,0; int r=3,3,5,5,9,3,0; for(i=0;i=7;i+) if(optioni=left) le=li; if(optioni=right) ri=ri; return(ri-le);用两个数组模拟数据构造栈,其特点是数据先进后出。用两个数组分别保存操作数和运算符。从字符串中依次别离出操作数与运算符,分别存入对应数组。当操作符串为空时,直接存入相当与栈元素的压入。当不为空时,与数组最后一个元素相当于栈顶比拟优先级,假设大于直接存入,否则弹出操作数最后两位进展运算,直到操作符栈顶元素优先级小于当

5、前运算符,并将其存入。b)模块接口设计:1.时钟函数:int Time()包括的子函数的函数原型:void TimeJieMian();用于制作界面2.四则混合运算:void SiZeHunHeYunSuan()包括的子函数的函数原型:void SiZehunheYunSuanJieMian( );用于制作界面char* readstr();将输入的连续单个字符整合成一个完整的串,并返回其首地址double yunsuan(double shu1,double shu2,char option); 对shu1和shu2的简单加减乘除运算,并返回运算结果Int priority(char lef

6、t,char right); 判断左符、右符的优先级谁高,假设右大于左,返回正值,否则返回负值double pute(char *p); 传入表达式串的首地址,返回表达式之值void SiZeHunHeYunSuan()SiZehunheYunSuanJiemianreadstr()putePriority()Yunsuan3.三角运算:void SanJiaoYunSuan()包括的子函数的函数原型:void SanJiaoJieMian(); 用于制作界面。double hududouble *; 把承受到的实数转化为弧度返回。double to_double(char *p); 将字符串

7、转化为实数。double read(); 将连续输入的字符整合成一个浮点数并在屏幕上逆向输出将其返回。 double sin(double *); 求sin*,实数型参数,返回实数型值。double cos(double *);求cos*,实数型参数,返回实数型值。void SanJiaoYunSuan()Cos(double *)Hudu(double *)Sin(double *)Sanjiaojiemian()Readto_double(char *p)4指对数运算:void ZhiDuiShuYunSuan()包括的子函数的函数原型: void ZhiDuiShuJieMian();

8、用于制作界面。double read; 将连续输入的字符整合成一个浮点数在屏幕上逆向输出将其返回。 double e*p(double *); 求e的*次方,返回双精度实数值。 double ln*(double *); 求ln*的值,返回双精度实数值。void ZhiDuiShuYunSuan()double ln*(double *)double e*p(double *)readc流程图:主函数的流程图:endC=getch调用主界面函数void ZhuJieMian调用指对数函数调用三角函数调用四则混合运算函数调用时钟函数SwitchcC=5.C=getch;调用主界面函数void Z

9、huJieMianChar cstartyesnoc=1c=2c=3c=4优先级:start承受参数char left char rightReturn(ri-le)optioni=lefti1e-8return(sin*)fz*=*;fm*=(t+1)*(t+2);t+=2;int sign=-1,t;*iang=*,fz=*,fm=1,t=1;承受参数*;double fz,fm,sin*=*,*iang;start3.正弦函数:no*iang=sign*(fz/fm);sin*+=*iang;sign=sign*(-1); yes4.ln函数:return (0-y)fabs(t)1e-

10、6y+=t; n+; s=-s;m*=(*-1); t=m*s/n;*=1/*fabs(t)1e-6Y+=t; n+; s=-s;M*=(*-1); t=m*s/n;*0&*=1承受参数*;int s=-1,n=0;float y=0,t=0,m=1;startnoyesyesnoyesno五、调试与测试遇到的问题:1.计算器的界面不会做,有时数字显示在边框外面。2.时钟显示不出来。3.编写ln函数遇到困难。采取的解决措施:1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多缺乏的地方,只能模拟出大体的外观,没能模拟出计算器中的各

11、个键。2.查在界面显示的函数原型,比照自己的程序,不断修改,比照,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。界面截图及相关说明:主界面:按1:进入时钟界面 按2:进入四则混合运算界面 按3:进入三角函数运算界面按4:进入指对数运算界面 按5:退出程序时钟界面截图:先按一下s键,并输入表达式之后的四则混合运算界面截图:运算结果截图:先按一下s键,并输入数字的三角函数界面截图:运算结果截图:先按一下e键,并输入数字的指对数运算界面截图:运算结果截图:按空格键,再按l键,并输入数字的指对

12、数运算界面截图:结果界面截图:*include *include *include *include *include*include*define QINGLING setfillstyle(1 ,15);bar(195,80,445,130);outte*t*y(435,120,0)*define SHUCHU setfillstyle(1,15);bar(195,80,445,130);setcolor(0);outte*t*y(220,120,ch)*define JIEMIAN setfillstyle(1,7); bar(165,40,475,400); /*底板*/ setfil

13、lstyle(1,15); bar(195,80,445,130); /*工作区*/*define PI 3.1415926double hudu(double *); /*把输入的数转化为弧度*/void ZhuJieMian();void TimeJieMian();void SiZehunheYunSuanJieMian();void SanJiaoJieMian();void ZhiDuiShuJieMian();double to_double(char *p);double read(); /*将读到的数字整和成实数*/double sin(double *);double cos

14、(double *);double e*p(double *); /*e的次方*/float ln*(float *);char* readstr();double yunsuan(double shu1,double shu2,char option);int priority(char left,char right) ;double pute(char *p);int Time();void SiZehunheYunSuan();double sqrt(double *);void SanJiaoYunSuan();void ZhiDuiShuYunSuan();void main()c

15、har c; ZhuJieMian(); c=getch(); while(c!=5) switch(c) case 1:Time();break; case 2:SiZehunheYunSuan();break; case 3:SanJiaoYunSuan();break; case 4:ZhiDuiShuYunSuan();break; ZhuJieMian(); c=getch(); double hudu(double *)return( *PI/180.0);void ZhuJieMian()int gdriver=DETECT,gmode; initgraph(&gdriver,&

16、gmode,); JIEMIAN; outte*t*y(200,160,Wele To Use This Caculator:); outte*t*y(200,170,Its functions is as follows:); outte*t*y(200,210,1 Current Time); outte*t*y(200,230,2 Sizehunheyunsuan); outte*t*y(200,250,3 Sanjiaoyunsuan); outte*t*y(200,270,4 Zhiduishuyunsuan); outte*t*y(200,290,5 Quit); outte*t*

17、y(200,310,Please choose an order: );void TimeJieMian()int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,); JIEMIAN; outte*t*y(200,200,q represent Quit);void SiZehunheYunSuanJieMian()int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,); setfillstyle(1,LIGHTGRAY); JIEMIAN; outte*t*y(200,160,Please

18、input e*pressions ); outte*t*y(200,215, s start); outte*t*y(200,240, spase to_zero); outte*t*y(200,265, q quit); outte*t*y(200,310,Please choose an order );void SanJiaoJieMian()int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,); setfillstyle(1,LIGHTGRAY); JIEMIAN; outte*t*y(200,160,Please choose

19、an order and then ); outte*t*y(200,170,input datas:); outte*t*y(200,210, s sin*); outte*t*y(200,230, c cos*); outte*t*y(200,250,spase to_zero); outte*t*y(200,270, q quit); outte*t*y(200,310,Please choose an order: ); void ZhiDuiShuJieMian()int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,); JIEMI

20、AN; outte*t*y(200,160,Please choose an order and then ); outte*t*y(200,170,input datas:); outte*t*y(200,210, e e*p(*); outte*t*y(200,230, l ln(*); outte*t*y(200,250,spase to_zero); outte*t*y(200,270, q quit); outte*t*y(200,310,Please choose an order: ); double to_double(char *p)int i,sign=1; float t

21、; double num; i=0; if(pi=-) sign=-1;i+; num=0.0; for(;pi=0;i+) num=num*10.0+pi-0; if(pi=.) for(i+,t=10.0;pi=0&pi1e-8)fz*=*; fm*=(t+1)*(t+2); t+=2; *iang=sign*(fz/fm); sin*+=*iang; sign=sign*(-1); return(sin*);double cos(double *)double fz,fm,cos*=1,*iang; int sign=-1,t; *iang=*,fz=1,fm=1,t=0; while(

22、fabs(*iang)1e-8) fz*=*; fm*=(t+1)*(t+2); t+=2; *iang=sign*(fz/fm); cos*+=*iang; sign=sign*(-1); return(cos*);double e*p(double *) /*e的次方*/double s=1.0,*iang=1.0; int t=1; do *iang*=*/(t+); s+=*iang; while(fabs(*iang)1e-6) ; return(s); float ln*(float *) /*ln(*)*/ int s=-1,n=0; float y=0,t=0,m=1; if(

23、*0 & *1e-6); if(*1) *=1/*; do y+=t; n+; s=-s; m*=(*-1); t=m*s/n; while(fabs(t)1e-6); return 0-y; char* readstr()char c,a81,ch34; /*将读到的串先保存在a中*/ int i=0; c=getch(); while(c!=r) /*getch()只读取回车键的第一个回车符*/ ai+=c;ai=;ai+1=0; setfillstyle(1,WHITE); bar(195,80,445,130); sprintf(ch,%28s,a); setcolor(BLACK);

24、 outte*t*y(220,120,ch); c=getch(); return(a);double yunsuan(double shu1,double shu2,char option) double re=0; switch(option) case +:re=shu1+shu2;break; case -:re=shu1-shu2;break; case *:re=shu1*shu2;break; case /:re=shu1/shu2;break; return re;int priority(char left,char right)char option=+,-,*,/,(,)

25、,=; int i,le,ri; int l=4,4,6,6,2,10,0; int r=3,3,5,5,9,3,0; for(i=0;i=7;i+) if(optioni=left) le=li; if(optioni=right) ri=ri; return(ri-le);double pute(char *p) int i=0,j=0; double shu20,num=0; char op20,c; int l=0; c=pl+; while(c) if(c=0|c=.) while(c=0) num=num*10+(c-0); c=pl+; if(c=.) int t=10; c=pl+; while(c=0) num=num+(c-0)/t; t*=10; c=pl+; shui+=num; num=0; /*截取一个数字*/ else if(j=0)opj+=c;c=pl+; else if(c=)&opj-1=()c=pl+;j-; else if(priority(opj-1,c)0)opj+=c;c=pl+; else shui-2=yunsuan(shui-2,shui-1,opj-1); i=i-1; j=j-1; return shu0;void SiZehunhe

温馨提示

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

评论

0/150

提交评论