1、1 1 设计题目设计题目 用 C 语言实现一元多项式的加减法计算 问题描述输入并建立两个多项式并输出多项式 2 2 开发环境、采用的语言开发环境、采用的语言 开发环境:vc6.0/windows xp 采用的语言:C 语言 3 3 设计思想设计思想 我的设计思想是输入按幂项从大到小输入一元多项, 并将一元多项式相等幂项进行 加减运算, 在加法运算中将无相等幂项直接输入到结果单链表中, 在减法运算中将被减 的一元多项式的无相等幂项直接输入到结果单链表中, 将减项的一元多项式的无相等幂 项变号后输出到结果单链表中, 输入 2 个方程式之后可以得出 2 式相加、 相减的全部结 果, 也是简化了算法运
2、行时间难度。 虽然浪费了一些计算能力, 但是简化了代码复杂度。 4 4 程序总的流程图程序总的流程图 图一:程序流程图 输入二个一元多项式 开始 计算两个一元 多项式的和差 输出计算结果和二个 输入的一元多项式 选择是在输入两个多项 式在运算或者结束计算 结束 1 5 5 数据结构说明及模块算法说明数据结构说明及模块算法说明 数据结构说明:使用单链表来表示一元多项式: typedef struct linklist int mi; /mi是幂项 int xishu; /xishu是系数 struct linklist *next; /next *list; 6 6 模块算法说明模块算法说明 l
3、ist creatpoly(void) 创建一个新的一元多项式,用 do 循环输入一元多项式,以“系数,幂项”的格式 输入数据,当系数与幂项同时为零时停止输入。 void printpoly(list head) 输出一个一元多项式,将多项式从头到尾输出,使用一个 IF 语句来区分第一项前 是否有加号,使用一个 whlie 在当 p-不为 NULL 时,进行循环输出+axb 的形式,当 a 为零时输出空白,当 b 为零时输出+ax,当 anext = NULL; p = head; do printf(“第%d次- 系数,幂:“, i); i+; scanf_s(“%d,%d“, if (a
4、!= 0 | n != 0) s = (list)malloc(sizeof(struct linklist); s-xishu = a; s-mi = n; s-next = NULL; p-next = s; p = s; while (a != 0 | n != 0); printf(“n“); return(head); void printpoly(list head) list p; int first = 1; p = head-next; 6 while (p != NULL) if (first) if (p-xishu = 1) printf(“x%d“, p-mi); e
5、lse if (p-xishu = 0) printf(“); else if (p-mi = 0) printf(“%d“, p-xishu); else printf(“%dx%d“, p-xishu, p-mi); first = 0; else if (p-xishu 0) if (p-mi = 1) printf(“+%dx“, p-xishu); else if (p-mi = 0) printf(“+%d“, p-xishu); else printf(“+%dx%d“, p-xishu, p-mi); else if (p-xishu mi = 1) printf(“%dx“,
6、 p-xishu); else if (p-mi = 0) printf(“%d“, p-xishu); else printf(“%dx%d“, p-xishu, p-mi); else printf(“); p = p-next; printf(“n“); list addpoly(list pa, list pb) /*两个多项式的加法运算*/ int n; 7 list pc, s, p; /*pc是新产生的链表头结点指针*/ pa = pa-next; pb = pb-next; pc = (list)malloc(sizeof(struct linklist); /*产生附加的表头结点*/ pc-next = NULL; p = pc; /* P 指向PC链表的最后结点*/ while (pa != NULL /* 建新结点*/ s-mi = pa-mi;