一元多项式计算
程序所能达到的功能:
1.实现一元多项式的输入;
2.实现一元多项式的输出;
3.计算两个一元多项式的和并输出结果;
4.计算两个一元多项式的差并输出结果;

效果图

#include<stdio.h>
#include<malloc.h> //头文件
typedef struct Polynomial{   //定义一个指针类型Polynomial float coef;  //系数 int expn;    //指数 struct Polynomial *next;
} *Polyn, Polynomial; //Polyn 为结点指针类型
void Insert(Polyn p, Polyn h) {if(p->coef==0) free(p) ; //系数为 0 的话释放结点else{Polyn q1, q2;q1=h; q2=h->next;   //h是头指针,q1指向头指针,q2指向头指针的下一位 while(q2&&p->expn<q2->expn) { //查找插入位置q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn) { //将指数相同的项合并q2->coef+=p->coef;free(p) ;  //释放结点 if(!q2->coef) { //系数为 0 的话释放结点q1->next=q2->next;free(q2) ;   //释放指针q2 }}else{ //指数为新时将结点插入p->next=q2;q1->next=p;}}
} //InsertPolyn CreatePolyn(Polyn head, int m) {//建立一个头指针为 head、 项数为 m 的一元多项式int i;Polyn p; //p是指针 p=head=(Polyn) malloc(sizeof(struct Polynomial) ) ;head->next=NULL;for(i=0; i<m; i++) {p=(Polyn) malloc(sizeof(struct Polynomial) ) ; //建立新结点以接收数据printf("请输入第%d 项的系数与指数: ", i+1) ;scanf("%f %d", &p->coef, &p->expn) ; //中间用空格隔开 Insert(p, head) ; //调用 Insert 函数插入结点}return head;
} //CreatePolyn
void DestroyPolyn(Polyn p) {//销毁多项式 pPolyn q1, q2;q1=p->next;  //q1指向指针p的下一位 q2=q1->next;  //q2指向指针q1的下一位 while(q1->next) {free(q1) ;  //释放指针q1 q1=q2; //指针后移q2=q2->next;}}
void PrintPolyn(Polyn P) {Polyn q=P->next;int flag=1; //项数计数器if(!q) { //若多项式为空, 输出 0putchar(' 0' ) ;printf("\n") ;return;}
while (q) {if(q->coef>0&&flag!=1) putchar(' +' ) ; //系数大于 0 且不是第一项if(q->coef!=1&&q->coef!=-1) {//系数非 1 或-1 的普通情况printf("%g", q->coef) ;if(q->expn==1) putchar(' X' ) ;else if(q->expn) printf("X^%d", q->expn) ;}else{if(q->coef==1) {if(!q->expn) putchar(' 1' ) ;else if(q->expn==1) putchar(' X' ) ;else printf("X^%d", q->expn) ;}if(q->coef==-1) {if(!q->expn) printf("-1") ;else if(q->expn==1) printf("-X") ;else printf("-X^%d", q->expn) ;}}q=q->next;flag++;} //whileprintf("\n") ;
} //PrintPolyn
int compare(Polyn a, Polyn b) {if(a&&b) {if(!b|| a->expn>b->expn) return 1;else if(!a|| a->expn<b->expn) return -1;else return 0;
}else if(!a&&b) return -1; //a 多项式已空, 但 b 多项式非空else return 1; //b 多项式已空, 但 a 多项式非空
} //compare
Polyn AddPolyn(Polyn pa, Polyn pb) {//求解并建立多项式 a+b, 返回其头指针Polyn qa=pa->next;Polyn qb=pb->next;Polyn headc, hc, qc;hc=(Polyn) malloc(sizeof(struct Polynomial) ) ; //建立头结点hc->next=NULL;headc=hc;while(qa|| qb) {qc=(Polyn) malloc(sizeof(struct Polynomial) ) ;switch(compare(qa, qb) ) {case 1:{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}case 0:{qc->coef=qa->coef+qb->coef;qc->expn=qa->expn;qa=qa->next;qb=qb->next;break;}case -1:{qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}} //switch
if(qc->coef!=0) {qc->next=hc->next;hc->next=qc;hc=qc;}else free(qc) ; //当相加系数为 0 时, 释放该结点} //whilereturn headc;
} //AddPolyn
Polyn SubtractPolyn(Polyn pa, Polyn pb) {//求解并建立多项式 a+b, 返回其头指针Polyn h=pb;Polyn p=pb->next;Polyn pd;while(p) { //将 pb 的系数取反p->coef*=-1;p=p->next;}pd=AddPolyn(pa, h) ;for(p=h->next; p; p=p->next) //恢复 pb 的系数p->coef*=-1;return pd;
} //SubtractPolyn
int main() {int m, n, flag=0;float x;Polyn pa=0, pb=0, pc, pd, pe, pf; //定义各式的头指针, pa 与 pb 在使用前付初值 NULLprintf("** 欢 迎 您 的 使 用**\n") ;printf("请输入多项式 a 的项数: ") ;scanf("%d", &m) ;pa=CreatePolyn(pa, m) ; //建立多项式 aprintf("**\n") ;printf("请输入多项式 b 的项数: ") ;scanf("%d", &n) ;pb=CreatePolyn(pb, n) ; //建立多项式 b
//输出菜单printf("**\n") ;printf("功能项: \n\t1. 输出多项式 a 和 b\n\t2. 建立多项式 a+b\n\t3. 建立多项式a-b\n") ;printf("\t4. 退 出 \n** 请 输 入 功 能 项 编 号\n") ;for(; ; flag=0) {printf("执行操作: ") ;scanf("%d", &flag) ;if(flag==1) {printf("多项式 a: ") ; PrintPolyn(pa) ;printf("多项式 b: ") ; PrintPolyn(pb) ; printf("请输入功能项编号\n") ;continue;}if(flag==2) {pc=AddPolyn(pa, pb) ;printf("多项式 a+b: ") ; PrintPolyn(pc) ;DestroyPolyn(pc) ; printf("请 输 入 功 能 项 编 号\n") ; continue;}if(flag==3) {pd=SubtractPolyn(pa, pb) ;printf("多项式 a-b: ") ; PrintPolyn(pd) ;DestroyPolyn(pd) ; printf("请 输 入 功 能 项 编 号\n") ; continue;}if(flag==4) break;if(flag<1|| flag>4) printf("Error!!!\n") ; continue;
} //forDestroyPolyn(pa) ;DestroyPolyn(pb) ;return 0;
}

数据结构实验题——一元多项式计算相关推荐

  1. 数据结构实验-稀疏一元多项式计算

    (实验)自行为稀疏一元多项式设计存储结构,并实现如下功能: ① 输入:从键盘输入多项式的各项系数和指数,创建一元多项式: ② 输出:按给定格式输出一元多项式:(例如:3*x20-x7+10) ③ 多项 ...

  2. 算法与数据结构实验题 10.23 寡人的难题

    算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...

  3. 时间计算题100道_高考物理答题小技巧(选择题、实验题、计算题)

    高考里,物理是说难也容易得分的科目.其实就三个大题,选择题,实验题和计算题,今天让我们一起看看高考物理这些题型答题时的一些小技巧吧! 选择题 1.注意看清题目,比如选择的是错误的.可能的.不正确的.或 ...

  4. 算法与数据结构实验题 10.16 被Gank的亚索

    算法与数据结构实验题 10.16 被Gank的亚索 ★实验任务 "哈撒给~",亚索一个Q打中了残血的维克多并挂上了点燃,正当亚索准备单杀维克多时,突然一声大喝!从两边草丛中窜出了两 ...

  5. 一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平

    一维数组实验题:计算平均数.中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数.中位数和众数.用函数编程计算40个输入数据(是取值1-10之间的任意整数)的平 ...

  6. 数据结构实验:一元多项式计算器

    一.实验内容及要求 1.任务描述: 实验内容: 设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法.减法和乘法运算.其中多项式描述为: Am(x)=A0+A1x1+A2x ...

  7. 算法与数据结构实验题 6.4 Summary

    ★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...

  8. 算法与数据结构实验题 5.18 小孩的游戏

    ★实验任务 一群小孩子在玩游戏,游戏规则是这样子,给了一些卡片,上面有数字,现在要把卡片按照某一种序列排好,让这些数字重新链接组合成一个大数,求最大的数是什么. ★数据输入 第一行一个整数N 接下来N ...

  9. 算法与数据结构实验题 10.23 寡人的难题——Kurskal算法

    ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的道路,奈何国库空虚,寡人只能选择其中一些道路, ...

最新文章

  1. Hadoop-虚拟机环境准备
  2. 10 个 Linux 中方便的 Bash 别名
  3. 初学__Python——Python中文支持、Python计算器
  4. 使用Python批量处理行、列和单元格
  5. Ceph的架构(一)
  6. (8) ebj学习: Jpa的SINGLE_TABLE,JOINED,TABLE_PER_CLASS三种继承策略
  7. php的excel源码下载,PHPExcel-5 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  8. js字符串的字典序_27. 字符串的排列
  9. -bash: xxxx.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
  10. 常用脚本--在线重建或重整实例下所有索引
  11. html调后台接口_接口测试平台代码实现62: 多接口用例2
  12. Android修改Eclipse 中的Default debug keystore路径,以及修改android的AVD默认路径
  13. 去年北京居民服务消费快速增长 占消费支出半壁江山
  14. python 查询ip工具
  15. OpManager12——一个完整的网络管理解决方案
  16. oracle 加权久期,债券 加权久期 怎么计算
  17. RabbitMQ使用实践
  18. CocoaPods 使用小结
  19. uva 10827 - Maximum sum on a torus
  20. 红黑树(算法导论版)

热门文章

  1. 【读书笔记】区块链思维
  2. java word模板poi生成文件_poi读写word模板 / java生成word文档
  3. android 代码浅黄色,Android工程中让人很不爽的“黄色警告”
  4. 去掉Chrome自动填充表单浅黄色背景色
  5. 在服务器上设置虚拟传入,如何配置 SMTP 虚拟服务器以进行邮件传递
  6. 绝对管用的eclipse连接夜神模拟器方法
  7. c语言中出现nan错误,c语言中浮点运算的inf和nan错误
  8. 学习FPGA之二:云端加速
  9. 扫描识别工具Dynamic Web TWAIN使用教程:移动浏览器捕获(上)
  10. 计算机二级打字的速度有要求么,打字速度几个要求和技巧