计算器的设计课程设计含源代码可以运行(DOC 17页)

上传人:cn****1 文档编号:556492120 上传时间:2023-03-23 格式:DOCX 页数:19 大小:23.15KB
返回 下载 相关 举报
计算器的设计课程设计含源代码可以运行(DOC 17页)_第1页
第1页 / 共19页
计算器的设计课程设计含源代码可以运行(DOC 17页)_第2页
第2页 / 共19页
计算器的设计课程设计含源代码可以运行(DOC 17页)_第3页
第3页 / 共19页
计算器的设计课程设计含源代码可以运行(DOC 17页)_第4页
第4页 / 共19页
计算器的设计课程设计含源代码可以运行(DOC 17页)_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《计算器的设计课程设计含源代码可以运行(DOC 17页)》由会员分享,可在线阅读,更多相关《计算器的设计课程设计含源代码可以运行(DOC 17页)(19页珍藏版)》请在金锄头文库上搜索。

1、计算器的设计第一章需求分析1.1加减乘除的运算设计一个简单的计算器,能够在有限位数内实现加、减、乘、除运算,并支持括号和小数。1.2进制转换通过该计算器可以实现二进制、十进制、八进制、十六进制之间的转换和运算。这个程序首先要求选择一种数值转换的种类,例如我们可以选择二进制输入,十进制输出,这样就要求我们把输入的二进制转换成十进制。由于按照我们要求的输入,输出,总共有6种情况。所以我们不能一一写出来每个程序的执行过程,对于不同的情况我们只需要定义不同的输入函数和输出函数,根据不同的情况,调用不同的输入函数和输出函数,这样做是为了对于多进制的情况,这样能简化程序。我定义了二进制输入,十进制输入,十

2、六进制输入,二进制输出,十进制输出,十六进制输出,这样就能满足各种需要。1.3一元多项式的运算通过C语言实现多项式的的计算功能,输入多项式的项数、每项的系数和指数,将两个多项式进行加减进行加减运算。该内容包括输入并建立多项式、多项式相加、多项式相减、多项式求值及输出多项式。本项功能使用链式存储结构存储一元多项式,可以方便的计算简单的一元多项式的基本运算。1.4实现形式要求采用链表结构进行实现第二章功能描述2.1全局功能模块图计算器二级制十进制八进制十六进制的转换和运算加减乘除的运算一元多项式的计算减加加减乘除八到十二到十十六到十图1全局功能图全局功能模块图说明:该计算器主要实现四则运算、进制的

3、转换以及一元多项式的加减运算。在四则运算中主要功能有整型数据的加减乘除运算,进制转换分为二进制转换为十进制、八进制转换为十进制、十六进制转换为十进制,一元多项式的计算分为加法运算和减法运算,以下是对计算器功能实现的具体说明。2.2四则运算功能描述计算器可以进行简单的加减乘除运算,可以判断用户的错误输入并且进行限制提示,比如:输入的左右括号不匹配,除数为0,输入非法字符时,都会有相应的提示,对用户比较友好。在进行加减乘除的运算过程中,程序的运算部分建立了两个堆栈,分别用来存储操作符和操作数。接收的用户输入可细分为四种,分别是数字,加减乘除操作符及左括号,右括号,等号。根据个符号的优先级进行计算式

4、的运算。此程序调用的函数主要有/*数学函数的定义*/*屏幕操作函数*/*I/O函数*/*库函数*/*字符操作函数*/。基本使用:用控制鼠标图形移动,当*变量长度参数表*/*图形函数*/*字符串函数*移动到相应得按钮时按回车键输入当前数字或执行对应的函数。加法:输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。乘法:输入一个数,按“*”,输入另个数,按“=”,输出结果。除法:输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。求余:输入一个数,按“mod”,按“=”,输出结果。取整:输入一个数,按“int”,按“=”,输出结果。2.3进制转换功能描述输入一个八进制数,按“8-1

5、0”,按“=”,输出十进制结果。十六进制转十进制:输入一个十六进制数,按下“jz”+“16-10”按“=”,输出十进制结果2.4一元多项式运算功能描述一元多项式的计算是常用的数学计算,在计算机计算中是非常普遍的,为了更加方便的进行此类运算,在此设计了一个简单的一元多项式计算器,用于对一元多项式进行创建,输出,以及一元多项式之间的相加,相减。该程序简单,清晰,明了,用户易懂易用,能较好得实现一元多项式的计算功能2。程序的基本功能:(1)建立多项式(2)输出多项式(3)两个多项式相加,建立并输出和多项式(4)两个多项式相减,建立并输出差多项式(5)两个多项式相乘,建立并输出乘多项式第三章功能的设计

6、3.1四则运算设计思路系统在进行加减乘除的运算时,程序中主要运用堆栈这一数据逻辑结构。并建立了两个堆栈,当遇到数字时直接压入操作数堆栈;当遇到加减乘除或左括号时进行优先级判断:如果传入的操作符优先级大于栈顶操作符的优先级则操作符入栈,如果传入的操作符优先级小于等于栈顶操作数的优先级则将栈顶操作符弹出,另外从操作数堆栈弹出两操作数进行运算,运算结果压入操作数堆栈;当遇到右括号时从两堆栈中弹出数据进行运算(每次结果压入操作数堆栈),直至遇到左括号从堆栈中弹出为止;当遇到等号时从两堆栈中弹出数据进行运算,直至操作符堆栈为空。switch(act)/*根据运算符号计算*/case1:result=nu

7、m1+num2;break;/*做加法*/case2:result=num1-num2;break;/*做减法*/case3:result=num1*num2;break;/*做乘法*/case4:result=num1/num2;break;/*做除法*/3.2进制转换设计思路在进行十六进制转化为十进制或八进制时,需要注意的是:先输入一个十六进制数据,再输入“sft”然后输入“16-10”或“16-8”,最后输入“=”,输出转换后的结果。3.2.1十六进制转换为十进制本段程序的作用是将十六进制转化为十进制,该程序是作为十六进制转化为其他进制的桥梁。十六进制向十进制的转换分成两个大的步骤,一是

8、从十六进制向二进制的转换,由于十六进制和二进制的特殊关系,它们之间的转换非常简单。二是从二进制转换为十进制,相对而言,这种转换复杂一些。所以该模块的核心是实现二进制数向十进制数的转换。方法是将要转换的二进制数预先放到AX寄存器中,判断AX中数的符号,若为负数,则将负号送入输出缓冲区,并求AX的绝对值;若AX中的数为正数,则不做其他处理,此时AX中即为无符号二进制数。然后将无符号二进制数转换成十进制数,可采用将AX除以10,得到第一个商和第一个余数,第一个余数就是所求十进制数的个位:将第一个商除以10,得到第二个商和余数,第二个余数就是所求十进制数的十位数,重复以上过程,一直循环到商为0时,得到

9、的余数就是所求十进制数的最高位数。这就是数制转换中常用的“除模留余倒排列”法则。cd1=strlen(str7);for(i=0,j=1;icd1;i+,j+)if(str7i=1)num=num+1*pow(16,cd1-j);elseif(str7i=2)num=num+2*pow(16,cd1-j);elseif(str7i=3)num=num+3*pow(16,cd1-j);elseif(str7i=4)num=num+4*pow(16,cd1-j);elseif(str7i=5)num=num+5*pow(16,cd1-j);elseif(str7i=1)num=num+1*pow(

10、16,cd1-j);elseif(str7i=6)num=num+6*pow(16,cd1-j);elseif(str7i=7)num=num+7*pow(16,cd1-j);elseif(str7i=8)num=num+8*pow(16,cd1-j);elseif(str7i=9)num=num+9*pow(16,cd1-j);elseif(str7i=A)num=num+10*pow(16,cd1-j);elseif(str7i=B)num=num+11*pow(16,cd1-j);elseif(str7i=C)num=num+12*pow(16,cd1-j);elseif(str7i=D

11、)num=num+13*pow(16,cd1-j);elseif(str7i=E)num=num+14*pow(16,cd1-j);elseif(str7i=F)num=num+15*pow(16,cd1-j);3.2.2二进制转换为十进制由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为按权相加法。本段程序的作用是将二进制转化为十进制,可作为二进制转化为其他进制的桥梁。zj=num1;result=0;for(i=0;i=cd;i+)result=result+fmod(int)(zj),10)*pow(2,i);zj=(int)(

12、zj/10);3.2.3八进制转换为十进制本段程序的作用是将八进制转化为十进制,可作为八进制转化为其他进制的桥梁。zj=num1;result=0;for(i=0;i=cd;i+)result=result+fmod(int)(zj),10)*pow(8,i);zj=(int)(zj/10);3.3一元多项式运算设计思路输入多项式采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时就继续,当输入0时,就结束一个多项式的输入。创建一元多项式的关键程序如下,由用户决定一元多项式的项数

13、,项数系数和指数。#include#include#includetypedefstructterm/项的表示,多项式的项作为LinkList的数据元素floatcoef;/系数intexpn;/指数structterm*next;termterm*CreatPolyn(term*P,intm)/算法2.22/输入m项的系数和指数,建立表示一元多项式的有序链表Pif(mcoef=0.0;inti;printf(依次输入%d个非零项n,m);for(i=1;icoef,&P-expn);if(P-coef)q=P;P=P-next=(term*)malloc(sizeof(term);q-nex

14、t=NULL;free(P);returnh;/CreatPolyn3.3.1一元多项式的相加它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q节点到多项式中。p的指数大于q的指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二多项式用新节点产生。一元多项式加法的关键程序如下:term*APolyn(term*Pa,term*Pb)/算法2.23/多项式加法:Pa=PaPb,利用两个多项式的结点构成和多项式。term*h,*qa=Pa,*qb=Pb,*p,*q;floatsum;h=p=(term*)malloc(sizeof(term);p-next=NULL;while(qa&qb)/Pa和Pb均非空

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号