当前位置:文档之家› 一元多项式计算器

一元多项式计算器

一元多项式计算器
一元多项式计算器

实验报告

课程名称:数据结构

实验名称:一元多项式计算器

院(系):计算机与通信工程学院

姓名:

学号:

专业班级:

指导教师:

2020 年 4 月22 日

实验报告正文

一、实验目的

1、目的:掌握顺序表和单链表的存储特点及插入、删除等算法。

2、任务:灵活运用顺序表和单链表的相关算法实现一元多项式的计算。

二、实验内容及要求

1、任务描述

实验内容:设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为:

Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm;

Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。

2、主要数据类型与变量

系数和指数采用int类型,运算结果不超出int取值范围

3、算法或程序模块

读多项式模块:Polynomial ReadPoly()

多项式乘法模块:Polynomial Mult(Polynomial p1, Polynomial p2)

多项式加法模块:Polynomial Add(Polynomial p1, Polynomial p2)

多项式减法模块:Polynomial Reduce(Polynomial p1, Polynomial p2)

输出多项式模块:void PrintPoly(Polynomial p)

三、测试

1、方案

输入两个多项式分别为:

3 4 -5 2 6 1 -2 0

5 20 -7 4 3 1

2、结果

四、总结与讨论

通过本次实验,我巩固了前面所学的知识,又将C语言的知识,C++的内容结合到

一起,因为太久没有接触计算机实验,所以一切显得熟悉又陌生,对我来说有点吃力,应该再把前面的知识复习巩固。

本实验的主要数据类型与变量类型是

struct PolyNode {

int coef;

int expon;

PolyNode* link;

};

typedef PolyNode* Polynomial;

输出的时候每种运算结果以多项式形式输出,要输出升幂和降幂两种情况。结果多项式中无重复阶项、无零系数项,输出多项式时请采用如下易读形式(一元多项式,总变元为x):x^4 - 3 x^2 + 5,实现一个简单的交互式界面,包括系统菜单、输入提示等。多项式运算前首先判定多项式特点,根据多项式是否稀疏来选用合适的存储结构;根据多项式不同的运算要求选择合适的存储结构,庞大的编程需要不断地调试,包括相加、相减、相乘运算。算法模块包括读多项式,加减乘法模块以及输出多项式模块。

附:程序的源代码

#include

#include

using namespace std;

struct PolyNode {

int coef;

int expon;

PolyNode* link;

};

typedef PolyNode* Polynomial;

void Attach(int c, int e, Polynomial* prear)

{

PolyNode* node = new PolyNode();

node->coef = c;

node->expon = e;

(*prear)->link = node;

*prear = node;

}

Polynomial ReadPoly()

{

int c, e;

Polynomial p, rear, temp;

p = new PolyNode();

rear = p;

while(scanf("%d%d", &c, &e)){

Attach(c,e,&rear);

char ch = getchar();

if(ch == '\n')

break;

}

temp = p; p = p->link; free(temp);

return p;

}

Polynomial Mult(Polynomial p1, Polynomial p2)

{

if (!p1||!p2) return NULL;

Polynomial p, rear, t1, t2, temp;

p = new PolyNode();

rear = p;

t1 = p1; t2 = p2;

int c, e;

while (t2){

c = t1->coef * t2->coef;

e = t1->expon + t2->expon;

Attach(c, e, &rear);

t2 = t2->link;

}

t1 = t1->link;

while (t1){

t2 = p2; rear = p;

while (t2){

c = t1->coef * t2->coef;

e = t1->expon + t2->expon;

while (rear->link && rear->link->expon > e){

rear = rear->link;

}

if (rear->link && rear->link->expon == e){

if (rear->link->coef + c){

rear->link->coef += c;

}

else{

Polynomial temp = rear->link;

rear->link = temp->link;

free(temp);

}

}

else{

PolyNode* node = new PolyNode();

node->coef = c;

node->expon = e;

node->link = rear->link;

rear->link = node;

rear = rear->link;

}

t2 = t2->link;

}

t1 = t1->link;

}

temp = p; p = p->link; free(temp);

return p;

}

Polynomial Add(Polynomial p1, Polynomial p2)

{

Polynomial p, rear, t1, t2, temp;

p = new PolyNode();

rear = p;

t1 = p1; t2 = p2;

while (t1 && t2){

if (t1->expon == t2->expon){

if (t1->coef + t2->coef != 0) Attach(t1->coef + t2->coef, t1->expon, &rear);

t1 = t1->link;

t2 = t2->link;

}

else if(t1->expon > t2->expon){

Attach(t1->coef, t1->expon, &rear);

t1 = t1->link;

}

else{

Attach(t2->coef, t2->expon, &rear);

t2 = t2->link;

}

}

for (; t1; t1 = t1->link) Attach(t1->coef, t1->expon, &rear);

for (; t2; t2 = t2->link) Attach(t2->coef, t2->expon, &rear);

temp = p; p = p->link; free(temp);

return p;

}

Polynomial Reduce(Polynomial p1, Polynomial p2)

{

Polynomial p, rear, t1, t2, temp;

p = new PolyNode();

rear = p;

t1 = p1; t2 = p2;

while (t1 && t2){

if (t1->expon == t2->expon){

if (t1->coef - t2->coef != 0) Attach(t1->coef - t2->coef, t1->expon, &rear);

t1 = t1->link;

t2 = t2->link;

}

else if(t1->expon > t2->expon){

Attach(t1->coef, t1->expon, &rear);

t1 = t1->link;

}

else{

Attach(-t2->coef, t2->expon, &rear);

t2 = t2->link;

}

}

for (; t1; t1 = t1->link) Attach(t1->coef, t1->expon, &rear);

for (; t2; t2 = t2->link) Attach(-t2->coef, t2->expon, &rear);

temp = p; p = p->link; free(temp);

return p;

}

void PrintPoly(Polynomial p)

{

if (!p){

printf("0\n");

return;

}

int flag = 0;

while (p){

int a=p->coef;

int b=p->expon;

if (!flag) {

flag = 1;

if(b==0)printf("%d",a);

else printf("%dx^%d",a,b);

}

else{

if(a>0){

if(b==0) printf("+%d",a);

else if(b==1) printf("+%dx",a);

else printf("+%dx^%d", a, b);

}

else {

if(b==0) printf("%d",a); else if(b==1) printf("%dx",a);

else printf("%dx^%d", a, b);

}

}

p = p->link;

}

printf("\n");

}

int main()

{

Polynomial p1, p2, pm, ps,pr;

p1 = ReadPoly();

p2 = ReadPoly();

pm = Mult(p1, p2);

PrintPoly(pm);

ps = Add(p1, p2);

PrintPoly(ps);

pr=Reduce(p1,p2);

PrintPoly(pr);

}

一元稀疏多项式计算器实验(报告+程序)

一元稀疏多项式计数器预习报告 :刘茂学号0062 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7); 2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )=(-7.8x^15-1.2x^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。

三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。 采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ①若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ②若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include #include #include //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial;

C语言实现计算器功能

实验一多功能计算器 一、问题描述 设计一个多功能计算器,可以完成基本的计算。 设计要求: 1. 具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,- ,* ,/ )、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按’C清 屏,按’R'返回菜单。 例如:输入:2 + 5 输出:7 2. 实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。输入表达式如下: 例如:输入:2+5 输出:7 二、算法说明 1.数据结构说明(可以图示说明,也可以文字说明) 本程序主要根据选择菜单编写了六个自定义函数,用于在main()函数中调用,在main()中,用一个字符变量num1 来记录下菜单选项的标号,根据num1 的值来决定调用哪个函数。 程序要完成的功能及所要用到的函数如下:

使用各菜单分别调用的函数 '≡ua∩ Ξ huyun≡u an O ■> SUanShUyUnSLLan2 panduan() > bi aodashiyunsuan 0 > QirLgPing () > fanhuicaidan() 菜 I Y l - ▽ 算术运算 a 卑运篡符表达 b 清屏 C 返回菜单 E 退岀程序 t F 面是整个程序的流程图:

2?算法说明(即函数说明) Void SUa nshuyu nsua n() //做算术运算时调用的函数 Void SUanshuyunsuan2() //选择继续做算术运算调用的函数,将上次运算的结果做为下次算术运算的第一个操作数〃判断算术运算是否继续 void Pan dua n() 〃判断算术运算是否继续 void biaodashiyu nsua n() 〃单运算符表达式实现函数 void qin gpi ng() 〃清除屏幕 void fan huicaida n() // 显示菜单 三、测试结果(这部分需文字与图示结合) 1 ?第一组测试用例 (1) 测试输入: (≡ΓF;I学习\匚语言程序设计实习'实验一Ilkb II丛匚语言实验一一 测试目的:测试算术运算的功能结果输出:

实验报告——2 一元稀疏多项式计算器

华北水利水电学院一元稀疏多项式计算器实验报告 2010~2011学年第一学期 09 级计算机科学与技术专业班级: 2009119 学号: 200911902 姓名:万婷婷 一、实验目的 设计一个医院稀疏多项式简单计算器 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用 二、实验要求 a)输入并建立多项式 b)输出多项式,输出形式为整数序列:n,c 1,e 1 ,c 2 ,e 2 ……c n ,e n ,其中n是多 项式的项数,c i ,e i 分别为第i项的系数和指数。序列按指数降序排列。 c)多项式a和b相加,建立多项式a+b,输出相加的多项式。 d)多项式a和b相减,建立多项式a-b,输出相减的多项式。 用带表头结点的单链表存储多项式。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(1+x+x2 +x3 +x4 +x5)+( -x3- x4) (4)(x+x2+x3)+0 (5)(x+x3)-(-x-x-3) (6) (x+x2 +x3 )+0 三、实验内容 主要算法设计 typedef struct Node { float coef; int index; struct Node *next; }LinkList; 本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。用带头结点的单链表存储多项式; 程序中共定义了5个函数:

void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中LinkList *Creat_L(LinkList *head,int m)//创建一个链表,项数为m void Printf(LinkList *L) LinkList *ADDlist(LinkList *head,LinkList *pb) LinkList *MinusList(LinkList *head,LinkList *pb) 四、程序源代码 #include #include #include #include typedef struct Node { float coef; int index; struct Node *next; }LinkList; void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中 { LinkList *q1,*q2; int flag=0; q1=h; if(p->coef==0) free(p); else { if(q1->next==NULL) { q1->next=p; }

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

多项式的运算(c语言实现)

#include"stdio.h" #include"stdlib.h" #include"conio.h" typedef struct Item{ double coef;//系数 int expn;//指数 struct Item *next; }Item,*Polyn; #define CreateItem(p) p=(Item *)malloc(sizeof(Item)); #define DeleteItem(p) free((void *)p); /************************************************************/ /* 判断选择函数 */ /************************************************************/ int Select(char *str) { char ch; printf("%s\n",str); printf("Input Y or N:"); do{ ch=getch(); }while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n'); printf("\n"); if(ch=='Y'||ch=='y') return(1); else return(0); } /************************************************************/ /* 插入位置定位函数 */ /**************************************************************/ int InsertLocate(Polyn h,int expn,Item **p) { Item *pre,*q; pre=h; q=h->next; while(q&&q->expnnext; } if(!q) { *p=pre; return(1); } else if(q->expn==expn) { *p=q; return(0); } else { *p=pre; return(-1); } } /************************************************************/ /* 插入结点函数 */ /************************************************************/ void insert(Item *pre,Item *p) {

(整理)一元稀疏多项式计算器

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 学期:2012秋季学期 任课教师: 实验题目: 一元稀疏多项式计算器 小组长: 联系电话: 电子邮件: 完成提交时间:2012 年 11 月 10 日 云南大学软件学院2012学年秋季学期

《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:算法设计整体流程控制 综合得分:(满分100分) 指导教师: 年月日

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:函数实现整体流程控制 综合得分:(满分100分) 指导教师: 年月日

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) 多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。 二、【实验设计(Design)】(20%) 在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。 三、【实现描述(Implement)】(30%) //--------函数原型说明-------- typedef struct Node { double xishu; int zhishu;//数据域 //int data; struct Node* pnext;//指针域 }Node,*pNode; pNode phead=(pNode)malloc(sizeof(Node));//创建头节点 pNode creat_list(void);创建链表 void traverse_list(pNode phead);//遍历链表 pNode sort(pNode phead);//对链表进行降序排列 pNode add(pNode phead1,pNode phead2);//两个多项式相加 pNode hebing(pNode phead)//合并同类项 pNode multi(pNode phead1,pNode phead2);//多项式相乘 pNode sub(pNode phead1,pNode phead2);//多项式相减 //多项式求导没有声明和定义函数,而是直接卸载程序里了

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

一元稀疏多项式计算器C语言课程设计

2014-2015学年第二学期学号1308210115 《软件工程》 课程设计报告 题目:一元稀疏多项式计算器 专业:计算机科学与技术 班级:计算机科学与技术(2)班 姓名: 指导教师: 成绩:

一、问题描述 (3) 二、需求分析 (3) 三、概要设计 (4) 四、详细设计 (5) 五、源代码 (6) 六、程序测试 (18) 七、使用说明 (24) 八、课设总结 (25)

一、问题描述 1.1基本要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值。 (6)计算器的仿真界面。 1.2设计目的 数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用 二、需求分析 2.1 设计开发环境: 软件方面:系统windows 7 编程软件:VC++ 6.0 2.2思路分析: ①一般情况下的一元n次多项式可写成 pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

数据结构实验,多项式计算器

实验题目:多项式运算器 实验内容:1、熟悉编程环境 2、用链式存储结构实现稀疏一元多项式运算器 实验目的和要求: 1、通过本实验,掌握VC++6.0的基本使用,包括源程序的输入,编译运行及调 试。调试的目的是找程序的运行错误,通过DEBUG菜单设置断点实现。 2、用链式存储结构实现一元多项式的运算。 熟练掌握指针和链表的基本操作,利用菜单进行功能选择。 功能基本要求:创建、显示、求和、求差、求值、销毁、清空、修改 实验算法: 1、数据结构描述: 输入的稀疏每一个多项式用一个链表存储,链表的每一个节点存储多项式的一个非零项。定义为LNode型结构体,其中保存该项的系数和指数。主 函数中用一个数组存储每一个多项式的第一项的头指针以调用多项式。 2、函数和算法描述: 主函数main定义LNode*数组a[]存储每一个多项式头节点的地址,并构建菜单以选择调用函数进行多项式的操作,对多项式进行操作的函数返回新 改动的多项式头结点地址。 Createpolyn函数用以创建一个多项式,在用户输入结束指令之前,不断的申请空间,构建LNode型结点并加至构建的链表的表尾,输入结束指令之 后,表尾设NULL并返回表头指针。 Printpolyn函数用以在屏幕上打印多项式,接收需要打印的多项式链表的头结点,构造循环体在表尾之前,不断以mx^n格式打印对应结点中的数 据。 Copypolyn函数用以复制多项式,接收需要复制的多项式a和复制位置b 的指针,构造循环体,在a到表尾之前循环,在b对应的链表中构建新的结 点,结点上的数据赋值为a中对应的值,返回b的头结点地址。 Addpolyn函数用以求两个已知多项式a、b的和存入c,先构建循环体,在a、b链表都未进行到表尾时,比较两个结点中的次数值,如果相同,将 系数相加赋于c的当前结点,如果不同,将次数较小多项式y(a或b)的结 点赋值给c当前结点,在将y链表向后推。 Subtract函数用以求两多项式的差,类似求和算法。 Value函数用以求一个多项式的值,接收x的值,构建循环体,在表尾之前循环以遍历多项式链表。内置循环体,以次数n为限循环,求出x^n的 值,乘以系数并将每一项的值叠加得值。 Destroypolyn函数用以销毁已有的多项式,将此多项式链表的空间FREE 掉,返回空指针。 Clearpolyn函数用以清空多项式,构建循环体,将多项式的各项的系数、指数置零。 3、时空分析: L= sizeof(struct LNode) 一个含有N项的多项式占用的储存空间为NL+1

C编写简易计算器附源代码超详细

超详细 一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里 使用Windows窗体应用程序,并命名为Calc,如下图所示: 二、向窗体中拖入需要的控件,如下图所示: (完成效果图) 结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name修改为btn_dot,按键【+-*/】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。 三、代码部分(含解释),采用switch多分支语句编写 using System; using System.Drawing; using System.Collections; using https://www.doczj.com/doc/653691182.html,ponentModel; using using System.Data; namespace Calc { ///

///温柔一刀C#简易计算器的实现 /// publicclass CalcForm:Form { private Button btn_0; private Button btn_1; private Button btn_2; private Button btn_3;

一元稀疏多项式计算器(数据结构)

【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【测试数据】 1,(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7) 【实现提示】 用带表头结点的单链表存储多项式。 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } }

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

C语言简单计算器的编写课程设计

C语言简单计算器的编 写课程设计 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

2013-2014学年第二学期 《高级语言程序设计》 课程设计报告 题目:简单计算器 专业:数字媒体技术 班级:13级1班 姓名:邢洪波 指导教 师:王辉 成绩: 计算机与信息工程系 二0一四年二月二十日 1设计内容及要求 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入

相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。 在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。程序基本功能要求实现完整,并有简单的验证。程序还 须有符合标准的程序设计报告。

2概要设计 系统流程图 系统流程图主要功能表

3设计过程或程序代码 #include<> #include<> #include<>/*malloc的头文件代表在内存中开辟存储空间*/ doublejisuan(chara[]) { inti=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;/*定义整型变量 i,j,k,m,n,cnt,t1,t2,t3*/ charnibo[50],zhan2[50];/*定义字符型数组*/ doublex,n,l,z=0,zhan3[50];/*定义双精度变量x,n,l,z,zhan3[50]*/ typedefstruct/*表示可以用con定义结构体变量*/ { doubled1; intd2; }dd; typedefstruct { dddata[50]; inttop; }zhan1; zhan1*shu;/*定义指针变量*/ shu=(zhan1*)malloc(sizeof(zhan1)); shu->top=0; while(a[i]!='\0')/*外循环是用while语句*/ {

一元稀疏多项式计算器实验

一元稀疏多项式计数器预习报告 姓名:刘茂学号2220 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^^11)+(7-5x^8+11x^9)=^11+11x^9+2x+7); 2、(6x^-3-x+^^9+^9)-(-6x^-3+^2-x^2+^15 )=^^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。 三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。

采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ① 若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include<> #include<> #include<> //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p);//系数为0的话释放结点 else

一元稀疏多项式计算器(数据结构)

院系:计算机科学学院 专业:软件工程 年级: 2013级 课程名称:数据结构 姓名:韦宜(201321092034)指导教师:宋中山 2015年 12 月 15日

题目:设计一个一元稀疏多项式简单计算器 班级:软件工程1301 姓名:韦宜学号:201321092034 完成日期:12月15日 一、需求分析 问题描述:设计一个一元多项式加法器 基本要求: 输入并建立多项式; (2)两个多项式相加; (3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第i 项的系数和指数,序列按指数降序排列。 (4)计算多项式在x处的值; (5)求多项式的导函数。 软件环境:Windows,UNIX,Linux等不同平台下的Visual C++ 6.0 硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

二、概要分析 本程序有五个函数: PolyNode *Input()(输入函数); PolyNode *Deri(PolyNode *head)(求导函数); PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数); void Output(PolyNode*head)(输出函数); int main()(主函数) 本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

一元多项式计算器设计与实现

一元稀疏多项式简单计算器 一、设计课题 设计一元稀疏多项式简单计算器。 二、需求分析 2.1 输入的形式和输入值的范围: 输入是从键盘输入的,输入的内容为多项式的系数和指数,数为任意的整数,指数为大于等于0的整数 2.2 输出的形式 从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值。 2.3 程序所能达到的功能 a:输入并建立多项式; b:输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei 分别是第i项的系数和指数,序列按指数降序排列; c:多项式a和b相加,建立多项式a+b; d:多项式a和b相减,建立多项式a-b; 2.4 测试数据 (1)(2x+5x^8-3.1x^11)+(7-5x^8+11x^9) = (-3.1x^11+11X^9+2X+7) (2)(X+X^3)+(-X-X^3)=0 (3)(X+X^2+X^3)+0= X+X^2+X^3 三、概要设计 3.1 设计思路 A:数据结构的选用 为了实现任意多项式的加法、减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元属;单链表抽象结构类型定义见附录2。 B:多项式的输入 采用头节点插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非00时就继续,当输入00时,就结束一个多项式的输入; C:2个多项式的加法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中。当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生 D:2个多项式的减法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相减;相加的和不为0的话,用头插法建立一个新的节点。 p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中,并且建立的接点的系数为原来的相反数;当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生,并且建立的接点的系数为原来的相反数。

简易计算器C语言代码

简易四则运算计算器 计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。 项目设计目的 掌握模块的划分; 掌握结构体定义; 掌握栈的操作; 掌握函数的定义; 掌握栈的基本操作; 掌握VC的基本绘图库; 掌握鼠标的响应操作; 目设计内容 设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。 项目设计要求 根据分析,系统要求实现以下几点基本功能: 可通过按钮输入数字、运算符; 能通过按钮实现退格、清除功能; 实现加、减、乘、除、开方运算功能; 实现括号运算; 显示运算结果; 良好的交互界面。

项目详细设计 功能模块图 根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。 计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。 计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。 计算器计算处理模块。计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。计算处理模块在按键控制模块中被调用执行。处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈,一个用来存放操作数栈。 计算器记忆处理模块。记忆处理模块使计算其具有记忆功能。记忆当前输入的表达式,给出一个最后的运算结果。可以清楚部分或全部记忆的值。 图简易计算器模块图 数据结构 该系统主要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集,操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操作符,一个用来存放操作数。 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2}, {2,2,1,1,1,2,2}, {2,2,2,2,1,2,2}, {2,2,2,2,1,2,2}, {1,1,1,1,1,3,0}, {2,2,2,2,0,2,2}, {1,1,1,1,1,0,3}}; typedef struct { char elem[Stack_Size]; int top; }SeqStack; typedef struct { int elem[Stack_Size]; int top; }SeqStackOperand;

一元多项式计算器程序设计实验报告

武汉工业学院 数学与计算机学院 《数据结构》 课程设计说明书 题目:一元多项式计算器 专业:计算机 班级:计算机类1305班 学号: 1305110053 姓名:杨钦 指导老师:左翠华 2014年12月25日

一、 设计题目 一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器。 【基本要求】 一元稀疏多项式简单计算器的基本功能是: (1) 输入并建立多项式 ; (2) 输出多项式,输出形式为整数序列:n ,c l ,e l ,c 2,e 2,…,c n ,e n ,其中n 是多项式的项数,c i 和e i ,分别是第 i 项的系数和指数,序列按指数降序排列; (3) 多项式a 和b 相加,建立多项式a +b ; (4) 多项式a 和b 相减,建立多项式a -b 。 【测试数据】 (1)(2x+5x 8-3.1x 11) + (7-5x 8+11x 9)=(-3.lx 11+11x 9+2x+7) (2)(6x -3-x+4.4x 2-1.2x 9) -(-6x -3+5.4x 2-x 2+7.8x 15)=(-7.8x 15-1.2x 9+12x -3-x) (3)(1 +x + x 2+x 3+x 4+x 5)+(-x 3-x 4)=(1+x+x 2+x 5) (4)(x+x 3)+(-x -x 3)=0 (5)(x+x 100)+(x 100 +x 200)=(x+2x 100+x 200) (6)(x+x 2+x 3)+0=x+x 2+x 3 (7) 互换上述测试数据中的前后两个多项式 【实现提示】 用带表头结点的单链表存储多项式。 【选作内容】 (1) 计算多项式在x 处的值。 (2) 求多项式 a 的导函数a ' 。 (3) 多项式a 和b 相乘,建立乘积多项式ab 。 (4) 多项式的输出形式为类数学表达式。例如,多项式 -3x8+6x3-18 的输出形式为183683-+-∧∧x x ,x15+(-8)x7-14的输出形式为147815--∧∧x x 。注意,数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为x8,项 -1x3的输出形式为-x3。

相关主题
文本预览
相关文档 最新文档