c简单计算器课程设计报告.doc
学号2016-2017年 第二学期03高级语言程序设计课程设计报告题目:简单计算器专业:网络工程班级:16级网工3班姓名:代应豪指导教师:程庆成绩:计算机学院2017年4月25日目录一设计内容及要求31内容32.要求3二、系统流程图4三、源程序代码5四、运行结果13五、计算器的使用15六、设计结果与分析15七、心得与体会16一 设计内容及要求1内容利用本学期所学的C语言程序设计课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。 在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。2.要求 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。程序基本功能要求实现完整,并有简单的验证。程序还须有符合标准的程序设计报告。 二、系统流程图 开始输入第一个操作数加法乘法除法清零开方乘方减法输入第二个操作数 显示结果 结束三、源程序代码#include<stdio.h> #include<math.h> #include<malloc.h>double jisuan(char a)int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;char nibo50,zhan250;double x,n,l,z=0,zhan350;typedef structdouble d1;int d2;dd;typedef structdd data50;int top;zhan1;zhan1 *shu;shu=(zhan1 *)malloc(sizeof(zhan1);shu->top=0;while(ai!='0')if(ai>='0'&&ai<='9')z=0;j=i+1;while(aj>='0'&&aj<='9')j+;j-;for(k=i;k<=j;k+)z=z*10+ak-'0'j=j+1;x=z;if(aj='.')l=1;i=j+1;j=i+1;while(aj>='0'&&aj<='9')j+;j-;for(k=i;k<=j;k+)n=pow(0.1,l);l=l+1;x=x+n*(ak-'0');i=j+1;else i=j;shu->data+shu->top.d1=x;shu->datashu->top.d2=+cnt;nibo+t1='0'+shu->datashu->top.d2;nibot1+1='0'else if(ai='(')zhan2+t2=ai;i+;else if(ai=')')j=t2;while(zhan2j!='(')nibo+t1=zhan2j;nibot1+1='0'j-;t2=j-1;i+;else if(ai='+')while(t2>0&&zhan2t2!='(')nibo+t1=zhan2t2;nibot1+1='0't2-;zhan2+t2=ai;i+;else if(ai='-')if(ai-1='$')a0='0'i=0;else if(ai-1='(')ai-1='0'ai-2='('i=i-2;t2-;elsewhile(t2>0&&zhan2t2!='(')nibo+t1=zhan2t2;nibot1+1='0't2-;zhan2+t2=ai;i+;else if(ai='*'|ai='/')while(zhan2t2='*'|zhan2t2='/'|zhan2t2=''|zhan2t2='#')nibo+t1=zhan2t2;nibot1+1='0't2-;zhan2+t2=ai;i+;else if(ai=''|ai='#')while(zhan2t2=''|zhan2t2='#')nibo+t1=zhan2t2;nibot1+1='0't2-;zhan2+t2=ai;i+;while(t2>0)nibo+t1=zhan2t2;nibot1+1='0't2-;j=1;t3=0;while(j<=t1)if(niboj>='0'&&niboj!=''&&niboj!='#')for(i=1;i<=shu->top;i+)if(int)(niboj-'0')=shu->datai.d2)m=i;break;zhan3+t3=shu->datam.d1;else if(niboj='+')zhan3t3-1=zhan3t3-1+zhan3t3;t3-;else if(niboj='-')zhan3t3-1=zhan3t3-1-zhan3t3;t3-;else if(niboj='*')zhan3t3-1=zhan3t3-1*zhan3t3;zhan3t3-1=zhan3t3-1/zhan3t3;t3-; else if(niboj='') zhan3t3-1=pow(zhan3t3-1,zhan3t3);t3-;else if(niboj='#')zhan3t3=sqrt(zhan3t3);j+;return zhan3t3;void main()for(;)char x,a50;double jieguo;int i=0;a0='$'printf("#表示开方,表示乘方(支持负数)n");printf("请输入表达式无需输入=号直接回车可输出答案退出请输入qnn");scanf("%c",&x);if(x='q')break;while(x!='n')a+i=x;scanf("%c",&x);ai+1='0'jieguo=jisuan(a);printf("n");printf("结果为:%lf",jieguo);printf("nnn");printf("退出请输入q继续请直接输入nn");四、运行结果五、计算器的使用 加法:输入一个数,按“+”,输入被加数,按“=”,输出结果。 减法:输入一个数,按“”,输入被减数,按“=”,输出结果。 乘法:输入一个数,按“*”,输入另外个数,按“=”,输出结果。 除法:输入一个数,按“/”,输入另外个数,按“=”,输出结果。 求开方:按“#”,在输入一个数,按“=”,输出结果。 求乘方:输入一个数,按“ ”,输入另外个数,按“=”,输出结果。Tab键:清零 Q键:退出计算器界面六、设计结果与分析在实验过程中,由于输入的代码有误,经常出错,有可能是标点符号的问题,有可能是单词拼写错误。对于长且复杂的程序段,最好模块化处理,一般都分为好几个函数,提高效率,如果都写在一起,一旦出错,很难找出来,程序出错了,们应该找到合适的方法调试,可以分别在每个函数中写上输出语句,如果该语句执行了且执行结果和预想的结果一致,则说明该函数及函数以上部分没问题,则可以查找下面的语句是否有问题,一个字母不同也可以使结果不同,所以子啊敲代码的时候,要多到尽量的细心,只有这样,才能使后面的调试变得不复杂。七、心得与体会计算机知识博大精深,很奥妙,学过c语言之后我知道我们平时用的那些应用程序都是用各种计算机语言编写的。这次通过老师布置的课程设计,我学会了更多的计算机知识,觉得编程是一件很费脑细胞同时很有意思的一件事。在这次程序设计过程中,学会了不懂就问同学,如果不是有他们,我相信我是不能交出这样一份完美的答卷的。同时也让我意识到编写c语言是需要耐心、细心和热心去做的一件事情!最关键的是,这个程序是我们经过一个寒假后的过程来编写的,我发现很多知识都忘了,所以最关键的是我觉得编程就该持之以恒!这次的报告前前后后改了很多遍,我觉得无论是做程序还是报告都应该按照要求的格式来,严谨规范的要求自己才能事半功倍!本题目的内容是设计一个简单的计算器。通过对程序的设计,可以对C程序中的数组·函数·分支·循环·文件等内容有更深入的理解与运用。设计程序的过程中,通过已有知识的运用和独立完成思考并和同学交流,能够做到对知识的整体理解。通过解决设计过程中遇到的问题,能够提高设计程序的熟练度,并对知识有巩固作用。另外,所选题目与自己的兴趣有关。编程之中不仅能提高题目涉及到的内容的兴趣,更主要在于能够对C语言更加感兴趣 C语言来编程的技巧,以及对C也有了更加深刻的认识。 通过这次两个星期左右的C语言程序课程设计实习,我觉得我学到了很多,以前在课堂上学的东西以为都是一些枯燥无味的东西,直到进行了这次课程设计后我才真正的明白了什么叫做“书到用时方恨少”,深深地感到自己C语言知道的缺乏,感到自己上机编程能力的不足,我对C有了更加深刻的认识,提高了我用C语言编程的综合能力和实际操作能力,初步掌握简单软件的分析方法和设计方法。我希望在以后的学习中能有更多这样的机会,让我们能够进行实践操作,从而在实际操作中不断提高我们的综合能力。