博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【數據結構】哈工大實驗一:一元多项式(代碼以及報告)
阅读量:5022 次
发布时间:2019-06-12

本文共 2221 字,大约阅读时间需要 7 分钟。

代碼見最後的附錄。

一、 实验目的

写一个代码计算一元多项式

以链表存储一元多项式,在此基础上完成对多项式的代数操作。
1.能够输入多项式(可以按各项的任意输入顺序,建立按指数降幂排列的多项式)和输出多项式(按指数降幂排列),以文件形式输入和输出,并显示。
2.能够计算多项式在某一点x=x0的值,其中x0是一个浮点型常量,返回结果为浮点数。
3.能够给出计算两个多项式加法、减法、乘法和除法运算的结果多项式,除法运算的结果包括商多项式和余数多项式。
4.要求尽量减少乘法和除法运算中间结果的空间占用和结点频繁的分配与回收操作。

二、实验要求及实验环境

Win10/code blocks

二、 设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)

1.函数列表:

bool isBlank(Node *p);//判断是不是一个空白的链表。void printLine();//打印一行横线来分隔。Node *CreateList();//创建新的多项式链表,手打输入void destroy(Node *p);//输入表头删除多项式链表。void Del(Node *p,Node *ListO);//删除节点。Node *copyList(Node *head);//复制链表Node *DecendTimeList(Node *head);//把输入的多项式链表按照降序排序。void swap(int *a, int *b);//交换参数a,bvoid Calculate(Node *head,float x);//计算把浮点数x0代入多项式的数值。Node *Input();//手动输入链表Node *CreateListFile(FILE *fp);//从文件读入链表Node *InsertNodeIn(Node *head);//头插链表void PrintRequire(int *num,int *time);//辅助头插链表,打印输入的请求。void insert(Node *head,Node *s,bool check);//按照升序插入链表Node *LocateNode(int time,Node *head);//确定这个次数的节点位置。Node *mutiList(Node *A,Node *B);//实现两个多项式相乘。void addPoly(Node *pa,Node *pb);// 实现两个多项式相加。Node *subtractPoly(Node *pa,Node *pb);// 实现两个多项式相减。Node *reverse(Node *head);// 将指定链表逆序void divList (Node *P, Node *Q);// 实现两个多项式除法Node * mulSingle (Node *Q, Node *node);//一个数乘上一个多项式。实现一个单项式与一个多项式相乘void display(Node *head, bool *newLine);//输出多项式。Node *NewList();//新建头节点。void OutputList(Node *head);//输出链表。void Fileout(File fp,Node *head);//输出文件

2.数据类型:

typedef int bool;//布尔类型,判断是否执行函数# define FALSE 0#define TRUE  1/**数据节点:一个node节点,储存多项式系数和次数*/struct Node{    int num;//系数    int time;//指数    struct Node *next;//该多项式下一个单项式};typedef struct Node Node;//定义数据类型Node

四、测试结果

1.文件输入多项式:

这里写图片描述
2.输入多项式排序:
这里写图片描述
3.文件输出:
这里写图片描述
4.计算x0的值:
这里写图片描述
5.多项式加法:

6.多项式乘法:

7.多项式除法:

a.两个多项式相等

b.两个多项式除数最高次幂大于被除数最高次幂:

c.两个多项式除数最高次幂小于被除数最高次幂:

9.多项式减法:

五、系统不足与经验体会

系统不足:有时候出错,比如说当机,死循环之类的。

解决方法:重新启动一次程序就好了。假如输入了错误字符,会调入死循环,可以ctrl+z退出重新启动一次。
经验体会:
每次更新完一个版本,做比较大的修改前一定要保存。不然可能会付出2~3个小时重新debug的代价。
项目开始前,做一个全局的规划,比如要哪些函数完成哪些功能,输入和输出的设计如何设计比较方便,这样有利于后期查看和debug,只要去找块就可以了。文件版本的名字要遵循一定的规律,否则找起来很麻烦。
总体结构确定之后,尽量不要去变动,如果一定要变动,一定要事先在程序蓝图上进行修改,免得之后自己忘掉造成麻烦,还得去找什么地方有一个小改动。
文件输入输出流没有想象中那么难解决,(虽然我觉得也不简单),情绪放松的时候一查资料就解决了问题。每次做实验要留出足够的时间,免得时间紧张,情绪着急反而浪费时间。

附錄:


凡事都要盡可能自己完成,否則未來只能有求於人。

转载于:https://www.cnblogs.com/hitWTJ/p/9865434.html

你可能感兴趣的文章
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>
ubuntu设计文件权限
查看>>
Vue双向绑定原理详解
查看>>
Android基础总结(5)——数据存储,持久化技术
查看>>
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
bootstrap
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>
20189210 移动开发平台第六周作业
查看>>
java之hibernate之基于外键的双向一对一关联映射
查看>>
rxjs一句话描述一个操作符(1)
查看>>
第一次独立上手多线程高并发的项目的心路历程
查看>>
ServiceStack 介绍
查看>>
Centos7下载和安装教程
查看>>
无谓的通宵加班之后的思索
查看>>
S1的小成果:MyKTV系统
查看>>