




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LIAOCHENGUNIVERSITY《C语言课程设计》报告题目专业电子信息科学与技术班级学号姓名陈冉学院物理科学与信息工程学院2019年5月简易计算机的设计摘要C语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。C语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把C语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用C语言来编写windows的应用程序也是可行的,但这不是C语言的长处。C语言的长处在于编写高效且需要对机器硬件精确控制的程序。本次设计的简单计算器支持简单的四则运算。问题分析本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。能够进行任意多个数的加减乘除求余、按位与或非运算。比如,用户想要计算(2+5+6)/4+3,那么程序运行后,用户可以依次输入2,+,5后,得出结果7,然后再输入+,6,得出结果13,然后再输入/,4得出结果3.25,最后输入+,3,"=”得到结果6.25。由于在设计过程中考虑到了可能会多次计算数据,为此本次课程设计我设计的这个简单计算器可以一次运行,多次使用。本程序使用了函数和宏混用的方式实现了代码的较好的可读性,使程序看起来结构严谨。算法设计(包括流程图)基于系统需求分析与系统总体设计的结论,本系统采用TC2.0实现各模块的功能。下面按照模块的划分来分别阐述系统的详细设计和实现过程。模块描述:(1)显示界面模块为系统提供类似于菜单的功能,让用户输入要操作的运算类型的数字代码,并进入相应的功能执行程序,显示相应界面。(2)数学计算模块中,根据用户选择的运算类型和运算符号,自动调用相应的函数,运行相关程序,进行计算,并显示结果。(3)退出程序模块。根据用户的需要,选择是否退出程序。系统头文件:#include<stdio.h>函数声明:主函数main()功能:计算器功能选择界面输入:用户输入运算类型、退出程序的相应数字代码(1四则运算,2混合运算3退出程序)处理:根据用户输入的数字代码,跳转到相关功能函数输出:显示相应界面或退出程序实现方法:1.使用switch・・・case…语句实现#define_CRT_SECURE_NO_DEPRECATE1#include<stdio.h>#include<stdlib.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intmul(intx,inty)(returnx*y;}intdiv(intx,inty)(returnx/y;}intmain()(intx,y;intinput=1;intret=0;while(input)(printf("*************************\n");printf("****1.add2.sub****\n");printf("****3.mul4.div****\n〃);printf("*************************\n");printf("请选择:");scanf("%d",&input);switch(input)(case1:printf("请输入操作数:");scanf("%d%d”,&x,&y);ret=add(x,y);break;case2:printf("请输入操作数:");scanf("%d%d”,&x,&y);ret=sub(x,y);break;case3:printf("请输入操作数:");scanf("%d%d”,&x,&y);ret=mul(x,y);break;case4:printf("请输入操作数:");scanf("%d%d”,&x,&y);ret=div(x,y);break;default:printf("选择错误\n”);break;}printf("%d\n",ret);}system(〃pause〃);return0;}2.使用函数指针数组实现因为加减乘除四个函数的函数类型都一样,可以把它们的地址放在一个函数指针数组里面,通过数组的下标来访问每个函数。具体代码如下:#define_CRT_SECURE_NO_DEPRECATE1#include<stdio.h>#include<stdlib.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intmul(intx,inty)(returnx*y;}intdiv(intx,inty)(returnx/y;intmain()(intx,y;intinput=1;intret=0;int(*p[5])(intx,inty)=(0,add,sub,mul,div);//转移表while(input)(printf("*************************\n");printf("****1.add2.sub****\n");printf("****3.mul4.div****\n");printf("*************************\n");printf("请选择:");scanf("%d",&input);if(input<4&&input>1)(printf("请输入操作数:");scanf("%d%d”,&x,&y);ret=(*p[input])(x,y);}elseprintf("输入有误\n");printf("ret=%d”,ret);}system("pause");return0;程序流程图如下图:开始检验是不是数验是不是数选择运算符结束操作数一是否比二除数是否为是否否是是是将结果转化为十进制输入NUM2昏输入NUM1初始化减加乘除程序运行结果及分析方法一:通过普通方法:#include<stdio.h>#include<stdlib.h>#definemax2014typedefstructstack(intdata[max];inttop;}stack;stack*createstack(void)//创建栈(stack*s;s=(stack*)malloc(sizeof(stack));s_>top=_1;returns;}intstackempty(stack*s)//判断栈空(if(s)(if(s->top==-1)return1;elsereturn0;}return-1;intstackfull(stack*s)//判断栈满(if(s)(if(s->top==max-1)return1;elsereturn0;}return-1;}voidpush(stack*s,intx)//入栈(if(s)(if(stackfull(s)==0)s->data[++s->top]=x;}}intpop(stack*s)//出栈(if(s)if(stackempty(s)==0)returns->data[s->top--];}voidclearstack(stack*s)//清除栈(if(s)s->top=-1;}voiddestroystack(stack*s)//销毁栈(if(s)(s->top=-1;free(s);s=NULL;}}intfunc(char*p)//判断运算符的优先级(if(*p=二,*,||*p=二,/,)return1;elseif(*p==,+,)return0;elsereturn2;}intFunc(stack*s1,stack*s2)//对数据进行运算(charch[1000]={0},w;char*p=ch,*q=ch;inta,b,c,flag=0,flag1=0;while((*q=getchar())!二,\n,)(q++;}while(1)(a=0;b=0;while(*p>='0'&&*p<='9')(a=*p-,0,;b=b*10+a;p++;}if(flag==1)(c=pop(s1);w=pop(s2);if(w==,*,)b=b*c;elseb=c/b;flag=0;}if(*p==,=,)//等号结束运算break;push(s1,b);push(s2,*p);if(func(p)==1)(flag=1;}p++;if(stackempty(s2)==0)(w=pop(s2);if(w==,-,)b=-b;}while(stackempty(s1)==0)(c=pop(s1);if(stackempty(s2)==0)w=pop(s2);else(b=b+c;break;}if(w==,-,)b=b-c;elseb=b+c;}returnb;}intmain()(stack*s1=createstack();stack*s2=createstack();intx=Func(s1,s2);printf("计算结果为:%d”,x);printf(〃\n〃);return0;}该程序优点在于程序简单,一目了然,把栈的知识合理运用起来,程序包括创建栈,入栈、出栈,判断栈满和栈空,销毁栈等;缺点在于仅能实现int型的加减乘除运算,不能识别括号和小数点的运算,所以实用性不强。方法二:通过函数指针数组实现#include<stdio.h>#include<windows.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intnul(intx,inty)(returnx*y;}intdrv(intx,inty)(returnx/y;}intmain()(intx,y;1;intinput=1;intret=0;int(*p[5])(intx,inty)=(0,add,sub,nul,drv);//转移表while(input){printf("***********************\n");printf("1:add2:sub\n");printf("3:nul4:div\n");printf("***********************\n");printf("请选择:");scanf_s("%d",&input);if((input<=4&&input>=1))(printf("输入操作数:");scanf_s("%d%d”,&x,&y);ret=(*p[input])(x,y);}elseprintf("输入错误\n");printf("%d\n",ret);}system(〃pause〃);return0;}方法三:使用main函数的参数,实现一个整数计算器。程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。例如:命令行参数输入:test.exe-a12执行1+2输出3main有三个参数:intargc,表示命令行参数加上程序路径的个数,最小为1。char*argv[],表示main函数的命令行参数。char*env[],表示环境变量#include<stdio.h>intmain(intargc,char*argv[])(intret=0;if(argc!=4)//判断参数个数(printf(〃error!\n〃);}if(argv[1][0]=='-')//第二个参数(字符串)判断(switch(argv[1][1])(case'a':ret=atoi(argv[2])+atoi(argv[3]);break;/*匕处利用atoi函数将指针数组类型转换为整型。cases:ret=atoi(argv[2])-atoi(argv[3]);break;casem:ret=atoi(argv[2])*atoi(argv[3]);break;case'd':ret=atoi(argv[2])/atoi(argv[3]);break;default:printf(〃error!\n〃);break;}}printf("运算结果为:%d\n”,ret);return0;4.结论计算机知识博大精深,很奥妙,学过c语言之后我知道我们平时用的那些应用程序都是用各种计算机语言编写的。这次通过老师布置的课程设计,我学会了更多的计算机知识,觉得编程是一件很费脑细胞同时很有意思的一件事。我在编写这次简单计算器的程序过程中遇到很多困难,犯了很多错,(例如:执行结果部分没有运算符),这也让我意识到编写c语言是需要耐心、细心和热心
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位交通安全课件
- 广东新高考一模数学试卷
- 河北省职业中专数学试卷
- 健康管理高血压课件教案
- 健康管理兼职讲课课件
- 2025年中国桐木树行业投资研究分析及发展前景预测报告
- 2025年中国文教体育用品行业市场竞争格局分析及投资方向研究报告
- 2024年中国天然气分布式能源行业市场调查报告
- 2025届甘肃省武威市武威十八中物理高一第二学期期末预测试题含解析
- 健康活动色彩的秘密课件
- 胸痛单元建设课件介绍
- 超市消防安全管理制度制度
- 酒店服务流程与空间布局优化
- DB11∕T 2380-2024 城市轨道交通工程盖挖法施工技术规程
- (2025)医疗护理员理论考试试题含答案
- 2025年贵州省中考英语真题含答案
- 建设工程法律培训
- 江苏省南通市2024-2025学年高二下学期6月期末质量监测政治试题(含答案)
- (高清版)DB31∕T 1427-2023 首席质量官评价规范
- 一级医院医保管理制度
- 2025年呼伦贝尔农垦集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论