1、 分别输入两个多项式的系数和指数,分别以0结束,例如3*x2,请输入3 24 6 2 5 8 7 1 0第一个多项式输入完毕,请输入下一个7 0 3 4 6 8 25 1 00多项式输入完毕请输入你想要进行的运算,1代表+,2代表-26*x8 + 8*x7 + 4*x6 + 2*x5 + 3*x4 + 25*x + -6Process completed.B . 错误的输入及其输出结果:4 5 1 2 3 6 5 5 08 4 1 0 3 4 6 9 7 02概要设计抽象数据类型的定义:public Multinomial1()主程序的流程: 定义类-定义主函数- 定义两个线性表用来存储多项式
2、- 提示用户输入多项式的系数与指数- 将用户输入的多项式存入线性表- 将两个线性表的元素比较并存入同一个线性表以实现多项式相加减- -输出多项式相加减后的结果各程序模块之间的层次(调用)关系:在Alist、Blist、Clist对堆申请空间时调用LinkList()函数,将多项式存入Alist、Blist中调用Add()函数,讲Alist、Blist两个线性表比较、排序并存入Clist中调用Sort()函数。3详细设计伪码算法:构建链表:int newindex, newfactor; Scanner scanner = new Scanner(System.in); LinkedList A
3、list = new LinkedList(); LinkedList Blist = new LinkedList(); LinkedList Clist = new LinkedList(); Node pNew;第一个多项式:System.out.println(请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); while (newfactor != 0) pNew = new Node(); pNew.factor = newfact
4、or; pNew.index = newindex; Alist.Add(pNew); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); 第二个多项式:第一个多项式输入完毕,请输入第二个多项式 Blist.Add(pNew); System.out.println(多项式输入完毕两多项式相加: int Ai = 0, Bi = 0; Node pc; Node pa = Alist.head.next, pb = Blist.head.next; while (Ai Alist.size & Bi pb.index) pc
5、 = new Node(); pc.index = pa.index; pc.factor = pa.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; Ai+; Clist.size+; else if (pa.index pc.index = pb.index; pc.factor = pb.factor; pb = pb.next; Bi+; else if (pa.index = pb.index) if (pa.factor + pb.factor ! pc = new Node(); pc.index = pa.index; pc.
6、factor = pa.factor + pb.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; pb = pb.next; Clist.size+; Ai+; Bi+; else Ai+;多项式中未加的部分运算:while (Ai Alist.size) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor; Clist.Add(pc); pa = pa.next; pc = pc.next; Ai+; while (Bi pc.index = pb.index; pc.fa
7、ctor = pb.factor; pb = pb.next; Bi+; Node pc1 = Clist.head.next; for (int Ci = 0; pc1.next != null; Ci+) System.out.print(pc1.factor+*x+pc1.index+ + pc1 = pc1.next; System.out.print(pc1.factor+pc1.index); 函数和过程的调用关系图:4调试分析调试过程中遇到的问题是如何解决的:参考课本、和同学交流讨论、上网查询对设计与实现的回顾讨论和分析:算法的时空分析和改进设想:经验和体会:平时必须多写多看程序
8、,多加练习,并在写代码之前构思好算法和流程。5用户使用说明操作步骤:A. Build fileB. Run fileC. 根据提示输入多项式的系数与指数(以空格分开各项)D. 然后EnterE. 运行结果就会实现两个多项式的相加减6测试结果请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束1 5 4 6 2 3 0 45 5 2 7 9 5 0第一个多项式输入完毕,请输入第二个多项式8 3 4 9 6 1 0 22 1 4 5 66 7 1 5 3 001*x5 + 4*x6 + 2*x3 + 5*x2 + 7*x9 + 5*x0 + 8*x3 + 4*x9 + 6*
9、x141 85 5 7 9 5 5 2 4 45 4 5 1 2 4 512 0463 5 1 2 2 5 9 3 26 26 5 21 3 255 62 2 2 3 5 600 0 0 0 多项式输入完毕41*x85 + 5*x7 + 472*x5 + 6*x2 + 4*x45 + 6*x5 + 9*x3 + 26*x26 + 5*x21 + 3*x255 + 63*x2 + 4*x512 + 2*x3 + 5*x6 请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束15 4 6 4169 4 91 1 22 3 50 3 20 2 532 + 00 0Except
10、ion in thread main java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:840) at java.util.Scanner.next(Scanner.java:1461) at java.util.Scanner.nextInt(Scanner.java:2091)2050) at Multinomial1.main(Multinomial1.java:34)7附录带注释的源程序代码:链表:public class Node /定义Node类 public int index;
11、 /定义参数 public int factor; public Node last; public Node next;public class LinkedList /定义LinkedList类 public LinkedList() head = new Node(); head.last = null; tail = head; tail.next = null; public Node head; public Node tail; public int size = 0; public void Add(Node pNew) /实现线性表的插入 tail.next = pNew;
12、tail = pNew; size+; public void Sort() /排序 Node p = head.next; for (int i = 0; i size; i+) if (p.index p.next.index) p.next.next.last = p; p.last = p.next; p.next = p.next.next; p.last.next = p; head.next = p.last; else p = p.next; for (int j = 1; j size - i; j+) if (p.index p.next.next.last = p; p.
13、last = p.next; p.next = p.next.next; p.last.next = p; p = p.next;/* * (#)Multinomial1.java * * author * version 1.00 2013/3/19 */import java.util.Scanner;public class Multinomial1 /定义Multinomaill类 public Multinomial1() public static void main(String args) /主函数 int newindex, newfactor; /调用LinkedList(
14、)函数 /照此输入多项式的系数与指数 int Ai = 0, Bi = 0; /实现两个多项式的相加减数组: * (#)Multinomial.javapublic class Multinomial public static void main(String args) int Asize = 0, Bsize = 0, Csize = 0; int temp; int operator; int Afactor = new int100; int Aindex = new int100; int Bfactor = new int100; int Bindex = new int100;
15、 int Cfactor = new int100; int Cindex = new int100;分别输入两个多项式的系数和指数,分别以0结束,例如3*x2,请输入3 2 AfactorAsize = scanner.nextInt(); AindexAsize = scanner.nextInt(); Asize+; while (AfactorAsize = 0) AfactorAsize = scanner.nextInt(); if (AfactorAsize = 0) System.out.println(第一个多项式输入完毕,请输入下一个 break; BfactorBsize
16、 = scanner.nextInt(); BindexBsize = scanner.nextInt(); Bsize+; while (BfactorBsize = 0) BfactorBsize = scanner.nextInt(); if (BfactorBsize = 0) BindexBsize = scanner.nextInt();请输入你想要进行的运算,1代表+,2代表- operator = scanner.nextInt(); for (int Ai = 0; Ai Asize; Ai+) for (int Aj = 0; Aj Asize-Ai; Aj+) if (AindexAj AindexAj+1) temp = AindexAj+1; AindexAj+1 = AindexAj; AindexAj = temp; temp = AfactorAj+1; AfactorAj+1 = AfactorAj; AfactorAj = temp;