计算器的设计课程设计含源代码可以运行

  • 格式:docx
  • 大小:6.32 MB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算器的设计课程设计含源代码可以运行

The Standardization Office was revised on the afternoon of December 13, 2020

计算器的设计

第一章需求分析

加减乘除的运算

设计一个简单的计算器,能够在有限位数内实现加、减、乘、除运算,并支持括号和小数。

进制转换

通过该计算器可以实现二进制、十进制、八进制、十六进制之间的转换和运算。

这个程序首先要求选择一种数值转换的种类,例如我们可以选择二进制输入,十进制输出,这样就要求我们把输入的二进制转换成十进制。由于按照我们要求的输入,输出,总共有6种情况。所以我们不能一一写出来每个程序的执行过程,对于不同的情况我们只需要定义不同的输入函数和输出函数,根据不同的情况,调用不同的输入函数和输出函数,这样做是为了对于多进制的情况,这样能简化程序。我定义了二进制输入,十进制输入,十六进制输入,二进制输出,十进制输出,十六进制输出,这样就能满足各种需要。

一元多项式的运算

通过C语言实现多项式的的计算功能,输入多项式的项数、每项的系数和指数,将两个多项式进行加减进行加减运算。

该内容包括输入并建立多项式、多项式相加、多项式相减、多项式求值及输出多项式。本项功能使用链式存储结构存储一元多项式,可以方便的计算简单的一元多项式的基本运算。

实现形式

要求采用链表结构进行实现

第二章功能描述

全局功能模块图

分为二进制转换为十进制、八进制转换为十进制、十六进制转换为十进制,一元多项式的计算分为加法运算和减法运算,以下是对计算器功能实现的具体说明。四则运算功能描述

计算器可以进行简单的加减乘除运算,可以判断用户的错误输入并且进行限制提示,比如:输入的左右括号不匹配,除数为0,输入非法字符时,都会有相应的提示,对用户比较友好。

在进行加减乘除的运算过程中,程序的运算部分建立了两个堆栈,分别用来存储操作符和操作数。接收的用户输入可细分为四种,分别是数字,加减乘除操作符及左括号,右括号,等号。根据个符号的优先级进行计算式的运算。

此程序调用的函数主要有<>/*数学函数的定义*/<>/*屏幕操作函数*/<>/*I/O函数*/<>/*库函数*/<>10”3.2.13.2.23.2.33.3.13.3.2据结构.北京:清华大学出版社,2010年

[2]苏士华.数据结构课程设计.机械工程出版社

附录二程序源代码

#include<>

#include<>

#include<>

voidcomputer1();

voidcomputer2();

voidcomputer3();

intsum(intx,inty);//加

intsubstract(intx,inty);

intmultipe(intx,inty);

intdiver(intx,inty);

intBtoD(char*,char*);

typedefstructterm{//项的表示,多项式的项作为LinkList的数据元素floatcoef;//系数

intexpn;//指数

structterm*next;

}term;

term*CreatPolyn(term*P,intm){//算法

//输入m项的系数和指数,建立表示一元多项式的有序链表P if(m<=0)returnNULL;

term*h=P=(term*)malloc(sizeof(term)),*q;

P->coef=;

inti;

printf("依次输入%d个非零项\n",m);

for(i=1;i<=m;++i){//依次输入m个非零项

scanf("%f%d",&P->coef,&P->expn);

if(P->coef)

q=P;

P=P->next=(term*)malloc(sizeof(term));

}

q->next=NULL;

free(P);

returnh;

}//CreatPolyn

term*selsort(term*h){

term*g,*p,*q;

if(!h)returnNULL;

floatf;

inti,fini=1;

for(g=h;g->next&&fini;g=g->next){

fini=0;

for(p=h,q=h->next;q;p=p->next,q=q->next)

if(p->expnexpn){

f=p->coef;i=p->expn;

p->coef=q->coef;p->expn=q->expn;

q->coef=f;q->expn=i;

fini=1;

}

}

for(g=h,p=g->next;p;)

if(g->expn==p->expn){

g->coef+=p->coef;

g->next=p->next;

q=p;

p=p->next;

free(q);

}

elseif(g->next){

g=g->next;

p=p->next;

}

returnh;

}

voidPrintfPoly(term*P){

term*q=P;

if(!q){

putchar('0');

return;

}

if(q->coef!=1){

printf("%g",q->coef);

if(q->expn==1)putchar('X');

elseif(q->expn)printf("X^%d",q->expn);

}

elseif(!q->expn)putchar('1');

elseif(q->expn==1)putchar('X');

elseprintf("X^%d",q->expn);

q=q->next;

while(q){

if(q->coef>0)putchar('+');

if(q->coef!=1){

printf("%g",q->coef);

if(q->expn==1)putchar('X');

elseif(q->expn)printf("X^%d",q->expn);

}

elseif(!q->expn)putchar('1');

elseif(q->expn==1)putchar('X');

elseprintf("X^%d",q->expn);

q=q->next;

}

}

Compare(term*a,term*b){

if(a->expnexpn)return-1;

if(a->expn>b->expn)return1;

return0;

}

term*APolyn(term*Pa,term*Pb){//算法

//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成"和多项式"。term*h,*qa=Pa,*qb=Pb,*p,*q;

floatsum;

h=p=(term*)malloc(sizeof(term));

p->next=NULL;

while(qa&&qb){//Pa和Pb均非空

switch(Compare(qa,qb)){

case-1://多项式PA中当前结点的指数值小

p->next=qb;

p=qb;