一元多项式实验报告
(2023)数据结构利用链表计算一元多项式课程设计实验报告(一)

(2023)数据结构利用链表计算一元多项式课程设计实验报告(一)2023数据结构课程设计实验报告——利用链表计算一元多项式实验背景和目的在本课程设计实验中,我们旨在通过使用链表数据结构,实现对一元多项式的计算功能。
通过本次实验,我们将深入学习和掌握链表的基础知识和应用技能,掌握实现链表操作的代码实现方式,提高编程实践能力和解决问题的能力。
思路和方法首先,我们需要定义链表节点数据结构,包含多项式中的系数和指数两个数据成员。
然后,我们需要实现一元多项式的相加、相减、求导、求值等基本操作。
其中,相加和相减操作需要利用链表遍历的方式,比较两个多项式中的指数,进行对应系数的加减,并将结果存储到新的链表中。
求导操作只需要遍历链表,将每一项的指数减一,系数乘以指数值,再将其插入到新的链表中即可。
求值操作仅需要遍历链表,根据指数和系数计算多项式值即可。
在具体实现过程中,我们需要注意边界条件的判断和处理,如何处理空链表、单项式情况等。
还需要精细设计代码逻辑,避免重复遍历链表,浪费时间和空间资源。
结果分析和展示经过数次测试和调试,我们最终实现了一元多项式的链表计算功能。
我们在终端输入多项式的系数和指数,再根据指令进行相应的操作。
结果能够准确输出,并且经过大量数据测试,程序运行稳定,没有出现崩溃和错误的情况。
总结和反思通过本次实验,我们进一步深入学习了链表数据结构的应用方法和相关算法。
我们学会了如何通过遍历链表实现复杂计算操作,如一元多项式的求导、求值等。
在实现过程中,我们对代码结构和逻辑设计进行反复思考和优化,提高了自己的编程能力和解决问题的能力。
同时,我们也需要进一步加强数据结构的学习,提升自己的算法水平,为后续的专业学习和职业发展打下坚实的基础。
可能的改进和优化方案虽然我们已经实现了一元多项式链表计算功能,但是我们也发现了以下几点可以改进和优化的方案:•异常处理:在用户输入有误或者数据不规范的情况下,程序可能会出现崩溃或者不符合预期的结果。
一元多项式加减乘除运算

中国计量学院实验报告实验课程:算法与数据结构实验名称:一元二项式班级:学号:姓名:实验日期: 2013-5-7一.实验题目:①创建2个一元多项式②实现2个多项式相加③实现2个多项式相减④实现2个多项式相乘⑤实现2个多项式相除⑥销毁一元多项式实验成绩:指导教师:二.算法说明①存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。
链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。
创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
②加法算法三.测试结果四.分析与探讨实验数据正确,部分代码过于赘余,可以精简。
五.附录:源代码#include<>#include<>#include<>typedef struct Polynomial {float coef;int expn;struct Polynomial *next;}*Polyn,Polynomial;出多项式a和b\n\t2.多项式相加a+b\n\t3.多项式相减a-b\n");printf("\t4.多项式相除a*b\n\t5.多项式相除a/b\n\t6.销毁多项式\n");printf("\t7.退出\n*********************************** ***********\n");printf("执行:");scanf("%d",&flag);switch(flag){case(1):printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);break;case(2):pc=AddPolyn(pa,pb);printf("多项式a+b:");PrintPolyn(pc);DestroyPolyn(pc);break;case(3):pd=SubtractPolyn(pa,pb);printf("多项式a-b:");PrintPolyn(pd);DestroyPolyn(pd);break;case(4):pf=MultiplyPolyn(pa,pb);printf("多项式a*b:");PrintPolyn(pf); DestroyPolyn(pf);break;case(5):DevicePolyn(pa,pb);break;case(6):DestroyPolyn(pa);DestroyPolyn(pb);printf("成功销毁2个一元二项式\n");printf("\n接下来要执行的操作:\n1 重新创建2个一元二项式 \n2 退出程序\n");printf("执行:");scanf("%d",&i);if(i==1){// Polyn pa=0,pb=0,pc,pd,pf;//定义各式的头指针,pa与pb在使用前付初值NULLprintf("请输入a的项数:");scanf("%d",&m);pa=CreatePolyn(pa,m);//建立多项式aprintf("请输入b的项数:");scanf("%d",&n);pb=CreatePolyn(pb,n);//建立多项式bbreak;}if(i==2)return 0; case(7): return 0;} } } }。
数据结构实验报告-一元多项式

数据结构实验报告-一元多项式
实验目的
1.使用C语言编写一元多项式运算的程序
2.理解和掌握链表的基本概念和操作
3.熟悉链表在实际问题中的应用
实验内容
1.设计一元多项式数据结构,支持多项式的输入、输出、加、减、乘、求导等计算。
2.使用链表来实现多项式数据结构。
3.编写测试程序,测试多项式数据结构的正确性和效率。
实验步骤
1.设计一元多项式数据结构,包括多项式中的每一项所包含的系数和指数,以及链表节点结构体定义。
typedef struct node
{
float coef; // 系数
int expn; // 指数
struct node *next; // 指向下一个节点的指针
} Node, *pNode;
2.按照上述定义的结构体,实现多项式的输入函数。
3.利用链表实现多项式的加法函数。
6.编写测试程序,测试多项式数据结构的正确性和效率。
实验结果
1.输入第一个多项式为 3x^3+2x^2+3 第二个多项式为 2x^3+x^2+4x+1
2.经过程序的处理,两个多项式的加法结果为 5.00x^3+
3.00x^2+
4.00x+4.00
两个多项式的乘法结果为
6.00x^6+10.00x^5+5.00x^4+10.00x^3+14.00x^2+19.00x+3.00
第一个多项式求导结果为 9.00x^2+4.00x
1.链表可以有效地实现多项式数据结构的存储和操作,具有较好的效率和灵活性。
2.通过本次实验,能够更加深入地理解数据结构中链表的应用,有助于提高编程能力和实际问题解决能力。
一元多项式的相加实验报告

一元多项式的相加实验报告一元多项式的相加实验报告引言:一元多项式是数学中常见的概念,它由一个变量和一系列常数乘积的和组成。
在本实验中,我们将研究一元多项式的相加运算,并通过实验验证相加运算的性质和规律。
实验目的:1. 了解一元多项式的基本概念和相加运算规则;2. 掌握使用编程语言进行一元多项式相加的方法;3. 验证一元多项式相加的性质和规律。
实验过程:1. 准备工作:a. 确定一元多项式的表示方式:我们选择使用数组来表示一元多项式,数组的每个元素表示多项式中对应项的系数;b. 确定一元多项式的相加规则:将相同次数的项的系数相加得到新的多项式的对应项的系数;c. 编写程序:使用编程语言编写一段代码,实现一元多项式的相加运算。
2. 实验步骤:a. 输入两个一元多项式的系数:通过程序提示用户输入两个一元多项式的系数,以数组的形式保存;b. 进行相加运算:将两个一元多项式的对应项系数相加,得到新的一元多项式的系数;c. 输出相加结果:将相加得到的新的一元多项式的系数输出,以验证相加运算的正确性。
实验结果:我们进行了多次实验,以下是其中一次实验的结果:假设输入的两个一元多项式分别为:P(x) = 2x^3 + 4x^2 + 3x + 1Q(x) = 5x^2 + 2x + 6根据相加规则,我们将对应项系数相加,得到新的一元多项式的系数:R(x) = 2x^3 + (4+5)x^2 + (3+2)x + (1+6)= 2x^3 + 9x^2 + 5x + 7因此,相加运算的结果为:P(x) + Q(x) = 2x^3 + 9x^2 + 5x + 7实验结论:通过多次实验,我们验证了一元多项式的相加运算的正确性。
根据实验结果,我们可以得出以下结论:1. 一元多项式的相加运算是可行的,可以通过将相同次数的项的系数相加得到新的多项式的对应项的系数;2. 一元多项式的相加结果仍然是一元多项式,其次数和各项的系数均可能发生变化;3. 一元多项式的相加运算满足交换律和结合律。
实验一一元多项式运算

实验一一元多项式的运算1.问题定义及需求分析1.1课题目的和任务问题描述:设计一个一元多项式简单计算器。
实验要求:1)采用顺序表或链表等数据结构。
2)输入并建立多项式。
3)输出运算结果的多项式。
1.2数据形式输入数据形式:通过键盘输入。
输入值的范围:多项式的项数和指数的输入数据为int型,输入值范围为-32768至32767;多项式系数的输入值范围为float型,范围为1.2e-38至3.4e+38。
输出数据形式:输出到显示器。
1.3程序功能实现两个一元多项式之间的加法、减法和乘法运算。
1.4测试数据4 //第一个多项式的项数1 4 //第一项的系数和指数3 3 //第二项的系数和指数-2 2 //第三项的系数和指数6 0 //第四项的系数和指数5 //第二个多项式的项数-3 5 //第一项的系数和指数2 2 //第二项的系数和指数-6 0 //第三项的系数和指数-1 -1 //第四项的系数和指数1.2 -2 //第五项的系数和指数2.概要设计2.1抽象数据类型需要定义一个多项式类型的数据类型,里面包含一个int型的指数和一个float型的系数,再定义一个多项式节点,里面包含一个多项式类型的数据,和一个指向下一个节点的指针。
通过对多项式节点的操作,实现对输入数据的运算。
2.23.详细设计3.1存储结构实现多项式结构体:typedef struct{float coef;int expn;}Poly;typedef struct LNode{Poly data;struct LNode* next;}LNode,*LinkList;多项式类型的定义:typedef LinkList polynomial;3.2负责模块的伪码算法(1)int MultiplyPolyn(polynomial& a,polynomial& b){//多项式相乘 if(a,b中均没有项){return 0;}c=(polynomial)malloc(sizeof(LNode));//开辟一个c储存相乘结果 c->next=NULL;ha=a->next;//ha为a中的项hb=b->next;//hb为b中的项for(;hb不空;下一项){//将a中第一项与b中所有项相乘ha的系数*hb的系数;ha的指数*hb的指数;开辟一个新节点E,将数据存入,并把E连到c后}Sort(c);//对c中多项式排序ha=ha->next;//ha指向下一个项while(ha!=NULL){//将a中第二项与b中所有项相乘,存入d,然后将c和d相加得到新的c,再以此对a中其余各项做相同操作,最终得到乘法运算后的chb=b->next;//hb为b的第一项d=(polynomial)malloc(sizeof(LNode));//开辟一个d储存相乘结果d->next=NULL;for(;hb不空;下一项){//将a中第一项与b中所有项相乘 ha的系数*hb的系数;ha的指数*hb的指数;开辟一个新节点E,将数据存入,并把E连到d后;}Sort(d);//对d中多项式排序ha=ha->next;//ha 指向下一项AddPolyn(c,d);//将c ,d 相加得到新的c}t=a;a=c;//a 指向运算结果DestroyPolyn(b);//销毁初始的两个多项式DestroyPolyn(t);}(2)void DestroyPolyn(polynomial& L){//销毁多项式while(L!=NULL){p=L;L=L->next;//指向后一项free(p);}}(3)void Sort(polynomial& L){//对多项式的指数进行冒泡排序 for(多项式长度){for(j=L;j->next->next!=NULL;j=j->next){if(j->next 指数 <j->next->next 指数){//将大的冒到前面 p=j->next;q=j->next->next;p->next=q->next;q->next=p;j->next=q;}}}}4. 调试分析4.1问题分析与解决方法(1)多项式相乘对于多项式相乘,考虑到两个一元多项式的相乘,可以利用两个一元多项式相加的算法来实现,因为乘法运算可以分解为一系列的加法运算,所以只需循环执行加法运算,就可以完成多项式的相乘。
一元多项式相加实验报告

一元多项式相加实验报告1. 引言本实验旨在研究一元多项式的相加操作。
一元多项式是数学中的一个重要概念,常用于代数运算和函数表达。
相加操作是多项式运算中的基本操作之一,通过对多项式的系数进行相加,可以得到一个新的多项式。
2. 实验目的本实验的主要目的是通过编写代码实现一元多项式的相加操作,并对相加操作进行测试和验证。
具体的实验目标包括: - 设计一种数据结构来表示一元多项式 -实现一元多项式的相加操作 - 编写测试代码,对相加操作进行验证3. 实验方法本实验使用Python编程语言实现一元多项式的相加操作。
具体步骤如下:3.1 设计数据结构首先,我们需要设计一种数据结构来表示一元多项式。
在本实验中,我们选择使用列表来表示一元多项式。
列表的每个元素表示一个项,项由系数和指数组成。
3.2 实现相加操作基于设计的数据结构,我们可以编写代码实现一元多项式的相加操作。
相加操作的基本思路是遍历两个多项式的项,将对应指数的系数相加,并将结果保存到一个新的多项式中。
3.3 编写测试代码为了验证相加操作的准确性,我们需要编写一些测试代码。
测试代码的主要功能是创建一些多项式,并调用相加操作进行计算。
通过比较计算结果和预期结果,可以验证相加操作的正确性。
4. 实验结果经过实验,我们成功地实现了一元多项式的相加操作。
在测试代码中,我们通过比较计算结果和预期结果,验证了相加操作的准确性。
5. 结论与讨论在本实验中,我们通过编写代码实现了一元多项式的相加操作,并进行了测试和验证。
实验结果表明,相加操作的实现是正确的。
然而,相加操作只是一元多项式运算中的基本操作之一。
在实际应用中,还需要考虑其他运算,如相减、乘法和除法等。
此外,实验中使用的数据结构可能还可以进行优化,以提高运算效率。
总的来说,本实验为进一步研究和应用一元多项式提供了基础。
通过进一步的研究和实践,可以深入理解一元多项式的运算规则,并将其应用于更广泛的数学和工程领域。
一元多项式相加问题实验报告

一元多项式相加问题一.问题描述设计算法实现一元多项式的简单运算。
二.数据结构设计分析任意一元多项式的描述方法可知,一个一元多项式的每一个子项都由“系数---指数”两部分组成,所以可以将它抽象成一个由“系数----指数对”构成的线性表。
基于这样的分析,可以采用一个带有头结点的单链表来表示一个一元多项式。
具体数据类型定义为:typedef struct node{float cofe; //系数域int exp; //指数域struct node* next; //指针域指向下一个子项}*polynode,poly;Polynode head_a,head_b,head_c;这三个指针分别作为链表A,B和C的头指针。
三.功能设计1.输入并建立多项式的功能模块此模块要求按照“系数---指数对”的输入格式输入各个子项,输入一个子项,通过遍历链表比较指数的大小,将新结点插在合适的位置,使多项式的指数按递增的顺序存储。
当遇到输入结束标志是停止输入,而转去执行程序下面的部分。
具体函数构造为:polynode creat_polynode(){polynode A ,p,q,s; //建立这种类型的头指针,尾指针,遍历指针和动态指针float a;int b;A=new poly;A->next=NULL;q=A;p=A;cin>>a;cin>>b;while(a!=0||b!=0){s=new poly;s->cofe=a;s->exp=b;while(q->next){if(q->next->exp<b)q=q->next; //遍历链表,若指数大于原链表指数,指针后移一个else{s->next=q->next;q->next=s;break; //若不是,将结点插入指针后面}}if(q->next==NULL){s->next=p->next;p->next=s;p=s; //q遍历到链表尾仍未插入,将结点插入最后,改变尾指针使其指向新结点}q=A; //让q返回头指针处,以便下一次遍历链表cin>>a;cin>>b;}if(p!=NULL)p->next=NULL;return A;}2.多项式相加的功能模块此模块根据在1中建立的两个多项式进行相加运算,并存放在以C为头指针的一个新链表中。
课程设计报告--一元多项式计算

课程设计报告一元多项式计算订票系统系别专业年级学生姓名学号任课教师二○一二年三月一、题目内容实验二一元多项式计算**1.任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减、相乘,并将结果输出;2.在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;实验三订票系统1.任务:通过此系统可以实现如下功能:1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:当航班信息改变可以修改航班数据文件。
2.要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
二、解题分析(一)、一元多项式计算分析:①能够按照多项式变量的指数降序创建一个多项式;②能够对已创建的多项式进行显示;③能够对已创建的多项式之间的加法运算;④能够对已创建的多项式之间的减法运算;⑤能够对已创建的多项式之间的乘法运算;⑥能够实现计算器退出操作。
(二)、订票系统:①能够按照规定输入航班的各个信息;②能够对已输入的航班信息进行显示;③能够对已创建的信息按照要求进行排序;④能够对已创建的信息进行查找;⑤能够完成订票,退票操作;⑥能够实现系统退出操作。
三、所用数据结构的描述(用伪代码)(一)、一元多项式计算:1、定义节点类型:typedef struct node{float coef;int expn;struct node * next; }PLOY;2、查找位置插入新链节程序:void insert(PLOY *head,PLOY *inpt){PLOY *pre,*now;int signal=0;pre=head;/*pre定义为现在的前一个链节*/if(pre->next==NULL)pre->next=inpt;else {now=pre->next;while(signal==0) {if(inpt->expn<now->expn) { /*当新链节小于现在的连接时向后移一个链节*/if(now->next==NULL) {now->next=inpt;signal=1; }else {pre=now;now=pre->next; }}else if(inpt->expn>now->expn){ /*如果发现比现在的链节大了就插入到这个连接的前面*/inpt->next=now;pre->next=inpt;signal=1; }else {now->coef=now->coef+inpt->coef;signal=1;free(inpt);/*与当前链节相等指数*/if(now->coef==0) {pre->next=now->next;free(now); }}}}}3、输入多项式:PLOY *creat(char ch) {PLOY *head,*inpt;float x;int y;head=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/head->next=NULL;printf("请输入一元多项式%c:(格式是:系数指数;以0 0 结束!)\n",ch);scanf("%f %d",&x,&y);while(x!=0) {inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=x;inpt->expn=y;inpt->next=NULL;insert(head,inpt);/*不然就查找位置并且插入新链节*/printf("请输入一元多项式%c的下一项:(以0 0 结束!)\n",ch);scanf("%f %d",&x,&y); }return head; }4、输出多项式:void print(PLOY *fun) {PLOY *printing;int flag=0;printing=fun->next;/*正在被打印的链节*/if(fun->next==NULL) { /*如果函数为空打印0*/printf("0\n");return; }while(flag==0) {if(printing->coef>0&&fun->next!=printing)printf("+");/*为正数时打印"+"号*/if(printing->coef==1);/*如果为"1"就不用打印系数了*/else if(printing->coef==-1)printf("-");/*如果为"-1"就打印"-"号就行了*/elseprintf("%f",printing->coef);/*其余情况都得打印*/if(printing->expn!=0) printf("x^%d",printing->expn);/*如果指数为"0"不打印指数项*/else if((printing->coef==1)||(printing->coef==-1))printf("1");if(printing->next==NULL)flag=1;/*如果现在的链节没有下一个就结束*/elseprinting=printing->next; }printf("\n"); }(二)、订票系统:1、定义结构体:typedef struct plane{char ID[10]; /*航班代号*/char BePlace[10];/*飞机起飞地点*/char EnPlace[10];/*飞机降落终点*/char data[15];/*飞机起飞时间*/int max;/*飞机最大乘客人数*/int price;/*飞机票价*/int num;/*飞机已售票数*/}PLANE;PLANE ti[N];2、输入信息:void input(int i){printf("请输入航班代号:\n");scanf("%s",ti[i].ID);printf("请输入起飞地点:\n");scanf("%s",ti[i].BePlace);printf("请输入降落地点:\n");scanf("%s",ti[i].EnPlace);printf("请输入起飞时间:\n");scanf("%s",ti[i].data);printf("请输入航班的最大载客人数:\n");scanf("%d",&ti[i].max);printf("请输入航班的票价:\n");scanf("%d",&ti[i].price);ti[i].num=0;}3、订票功能:void book(){int i;system( "cls" );printf("欢迎进入售票窗口!\n");i=search();if(i!=-1){if(ti[i].num>=ti[i].max)printf("\n该趟航班票已售完!");else{ti[i].num++;printf("\n订票成功!\n");}}elseprintf("该航班不存在!\n");getchar();getchar(); /*按任意健*/menu();}四、部分算法的描述(用伪代码)(一)、一元多项式计算:1、加法:PLOY *addPLOY(PLOY *head,PLOY *pre){ /*多项式相加*/PLOY *inpt;int flag=0;while(flag==0) {if(pre->next==NULL)flag=1;/*当现在指向空时跳出循环*/else {pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt); }/*否则把当前"g(x)"的链节插入到"y(x)"中*/ }return head; }2、减法:PLOY *minusPLOY(PLOY *head,PLOY *pre){ /*多项式相减*/PLOY *inpt;int flag=0;while(flag==0) {if(pre->next==NULL)flag=1;/*当现在指向空时跳出循环*/else {pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=0-pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt); }/*否则把当前"g(x)"的链节插入到"y(x)"中*/ }return head; }3、乘法:PLOY *byPLOY(PLOY *head1,PLOY *head2) { /*多项式相乘*/PLOY *inpt,*res,*pre;int flag=0;res=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/res->next=NULL;head1=head1->next;pre=head2;while(flag==0) {if(pre->next==NULL) {pre=head2;/*当现在指向空时跳出循环*/head1=head1->next;continue; }if(head1==NULL) {flag=1;/*当现在指向空时跳出循环*/continue; }pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=pre->coef*head1->coef;inpt->expn=pre->expn+head1->expn;inpt->next=NULL;insert(res,inpt);/*把当前"g(x)"的链节插入到"y(x)"中*/ } return res; }(二)、订票系统:1、排序:void order() {/*排序模块(按平均成绩)*/int i,j;struct plane s;system( "cls" );for(i=0;i<n;i++) {/*冒泡法排序*/for(j=i+1;j<n;j++)if(strcmp(ti[i].data,ti[j].data)>0){s=ti[i];ti[i]=ti[j];ti[j]=s;}}browse();}2、查找:int search() { /*查找模块*/int i,k;struct plane s;k=-1;system( "cls" );printf("\n\n请输入要订票的起飞地点:");scanf("%s",s.BePlace); /*输入要到达的地方*/printf("\n\n请输入要订票的降落地点:");scanf("%s",s.EnPlace);printf("\n\n请输入要订票的起飞时间:");scanf("%s",s.data); /*输入出发的时间*/for(i=0;i<n;i++) {/*查找要修改的数据*/if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strcmp(s.data,ti[i].data)==0){k=i; /*找到要修改的记录*/printf_one(k);break; } /*调用显示一个记录的函数*/}if(k==-1){printf("\n\nNO exist!");return -1;}elsereturn k;}3、保存:void save(){int w=1;FILE *fp;int i;system( "cls" );if((fp=fopen("\\ticket.txt","wt"))==NULL) {/*以输出打开方式,在此前的记录被覆盖*/printf("\nCannot open file\n");return ;}for(i=0;i<n;i++)if(fwrite(&ti[i],sizeof(struct plane),1,fp)!=1){printf("file write error\n");w=0;}if(w==1)printf("file save ok!\n");fclose(fp);getchar();getchar();menu();}4、载入void load(){FILE*fp;int i,w;w=1;system( "cls" );if((fp=fopen("\\ticket.txt","rt"))==NULL){printf("\nCannotopen file\n");w=0;return ;}n=0;for(i=0;!feof(fp);i++){fread(&ti[i],sizeof( struct plane),1,fp);n++;}n=n-1; fclose(fp);if(w==1)printf("Load file ok!");getchar();getchar();menu();}五、算法复杂度的简单分析(一)、一元多项式计算:1、加法:O(n)2、减法:O(n)3、乘法:O(n)(二)、订票系统:1、排序:O(n^2)2、查找:O(n)3、保存:O(n)4、载入:O(n)六、程序测试数据(一)、一元多项式计算:1.F(x)=f(x)+g(x)=(2x^7+3x^5+2x^4+3x^1)+(2x^6+3x^2+43x^1)=(2x^7+2x^6+ 3x^5+2x^4+3x^2+46)2.F(x)=f(x)-g(x)=(3x^5+8x^2)-(54x^3+2x^2+5x^1)=(162x^8+6x^7+15x^6+43 2x^5+16x^4)3.F(x)=f(x)*g(x)=(3x^4+5x^3+3x^2)*(2x^4+2x^2+3x^1)=(6x^8+10x^7+12x^6 +19x^5+21x^4+9x^3)(二)、订票系统:部分截图:1.菜单2排序3.查询4.订票5退票七、程序清单#include <stdio.h>#include <string.h>#include <stdlib.h>#include<malloc.h>#define N 1000typedef struct node{/*定义节点类型*/float coef;int expn;struct node * next; }PLOY;typedef struct plane{char ID[10]; /*航班代号*/char BePlace[10];/*飞机起飞地点*/char EnPlace[10];/*飞机降落终点*/char data[15];/*飞机起飞时间*/int max;/*飞机最大乘客人数*/int price;/*飞机票价*/int num;/*飞机已售票数*/}PLANE;PLANE ti[N];int n;/*当前的航班数目*/void menu();void menu1();void start()/{ /*用户选择界面*printf("************************************\n");printf(" 欢迎进入一元多项式计算系统 \n");printf("************************************\n");printf("请选择操作:\n");printf("0.退出\n");printf("1.两个一元多项式相加\n");printf("2.两个一元多项式相乘\n");printf("3.两个一元多项式相减\n"); }void insert(PLOY *head,PLOY *inpt){ /*查找位置插入新链节程序*/ PLOY *pre,*now;int signal=0;pre=head;/*pre定义为现在的前一个链节*/if(pre->next==NULL)pre->next=inpt;else {now=pre->next;while(signal==0) {if(inpt->expn<now->expn) / { /*当新链节小于现在的连接时向后移一个链节*if(now->next==NULL) {now->next=inpt;signal=1; }else {pre=now;now=pre->next; }}else if(inpt->expn>now->expn){ /*如果发现比现在的链节大了就插入到这个连接的前面*/inpt->next=now;pre->next=inpt;signal=1; }else {now->coef=now->coef+inpt->coef;signal=1;free(inpt);/*与当前链节相等指数*/if(now->coef==0) {pre->next=now->next;free(now); }}}}}PLOY *creat(char ch) { /*输入多项式*/PLOY *head,*inpt;float x;int y;head=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/head->next=NULL;printf("请输入一元多项式%c:(格式是:系数指数;以0 0 结束!)\n",ch);scanf("%f %d",&x,&y);while(x!=0) {inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=x;inpt->expn=y;inpt->next=NULL;insert(head,inpt);/*不然就查找位置并且插入新链节*/printf("请输入一元多项式%c的下一项:(以0 0 结束!)\n",ch);scanf("%f %d",&x,&y); }return head; }PLOY *addPLOY(PLOY *head,PLOY *pre){ /*多项式相加*/PLOY *inpt;int flag=0;while(flag==0) {if(pre->next==NULL)flag=1;/*当现在指向空时跳出循环*/else {pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt); }/*否则把当前"g(x)"的链节插入到"y(x)"中*/ }return head; }PLOY *minusPLOY(PLOY *head,PLOY *pre){ /*多项式相减*/PLOY *inpt;int flag=0;while(flag==0) {if(pre->next==NULL)flag=1;/*当现在指向空时跳出循环*/else {pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=0-pre->coef;inpt->expn=pre->expn;inpt->next=NULL;insert(head,inpt); }/*否则把当前"g(x)"的链节插入到"y(x)"中*/ }return head; }PLOY *byPLOY(PLOY *head1,PLOY *head2) { /*多项式相乘*/PLOY *inpt,*res,*pre;int flag=0;res=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/res->next=NULL;head1=head1->next;pre=head2;while(flag==0) {if(pre->next==NULL) {pre=head2;/*当现在指向空时跳出循环*/head1=head1->next;continue; }if(head1==NULL) {flag=1;/*当现在指向空时跳出循环*/continue; }pre=pre->next;inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/inpt->coef=pre->coef*head1->coef;inpt->expn=pre->expn+head1->expn;inpt->next=NULL;insert(res,inpt); } /*把当前"g(x)"的链节插入到"y(x)"中*/return res; }void print(PLOY *fun) { /*输出多项式*/PLOY *printing;int flag=0;printing=fun->next;/*正在被打印的链节*/if(fun->next==NULL) { /*如果函数为空打印0*/printf("0\n");return; }while(flag==0) {if(printing->coef>0&&fun->next!=printing)printf("+");/*为正数时打印"+"号*/if(printing->coef==1);/*如果为"1"就不用打印系数了*/else if(printing->coef==-1)printf("-");/*如果为"-1"就打印"-"号就行了*/elseprintf("%f",printing->coef);/*其余情况都得打印*/if(printing->expn!=0) printf("x^%d",printing->expn);/*如果指数为"0"不打印指数项*/else if((printing->coef==1)||(printing->coef==-1))printf("1");if(printing->next==NULL)flag=1;/*如果现在的链节没有下一个就结束*/elseprinting=printing->next; }printf("\n"); }int Polynomial_solve() {PLOY *f,*g;int sign=-1;/*设置标志*/start();while(sign!=0) {scanf("%d",&sign);switch(sign) {case 0:exit(0);break;/*退出*/printf("你选择的操作是多项式相加:\n");f=creat('f');/*输入多项式f(x)*/printf("f(x)=");print(f);g=creat('g');/*输入多项式g(x)*/printf("g(x)=");print(g);printf("F(x)=f(x)+g(x)=");f=addPLOY(f,g);/*两个多项式相加*/print(f);sign=-1;/*复位标志*/start();/*回复用户选择界面*/break; }case 2: {printf("你选择的操作是多项式相乘:\n");f=creat('f');/*输入多项式f(x)*/printf("f(x)=");print(f);g=creat('g');/*输入多项式g(x)*/printf("g(x)=");print(g);printf("F(x)=f(x)*g(x)=");f=byPLOY(f,g);/*两个多项式相加*/print(f);sign=-1;/*复位标志*/start();/*回复用户选择界面*/break; }case 3: {printf("你选择的操作是多项式相减:\n");f=creat('f');/*输入多项式f(x)*/printf("f(x)=");print(f);g=creat('g');/*输入多项式g(x)*/printf("g(x)=");print(g);printf("F(x)=f(x)-g(x)=");f=byPLOY(f,g);/*两个多项式相加*/print(f);sign=-1;/*复位标志*/start();/*回复用户选择界面*/break; }default: {printf("输入有误!请重新选择操作!\n");/*选择错误,返回选择界面*/break; }}}}void input(int i){printf("请输入航班代号:\n");scanf("%s",ti[i].ID);printf("请输入起飞地点:\n");scanf("%s",ti[i].BePlace);printf("请输入降落地点:\n");scanf("%s",ti[i].EnPlace);printf("请输入起飞时间:\n");scanf("%s",ti[i].data);printf("请输入航班的最大载客人数:\n");scanf("%d",&ti[i].max);printf("请输入航班的票价:\n");scanf("%d",&ti[i].price);ti[i].num=0;}void enter(){int i;system( "cls" );printf("请输入航班的数目(0-%d)?:",N);scanf("%d",&n); /*要输入的记录个数*/printf("\n请输入数据\n\n");for(i=0;i<n;i++){printf("\n请输入第 %d 航班记录.\n",i+1);input(i); }/*调用输入函数*/getchar();menu();}void printf_one(int i) { /*显示一个记录的函数*/printf("%11s %6s %10s %6s %6d %6d %6d",ti[i].ID,ti[i].BePlace,ti[i].EnP lace,ti[i].data,ti[i].price,ti[i].max,ti[i].num);}void browse(){int i;system( "cls" );puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i<n;i++){printf_one(i);printf("\n");}getchar();getchar();void order(){/*排序模块(按平均成绩)*/int i,j;struct plane s;system( "cls" );for(i=0;i<n;i++){/*冒泡法排序*/for(j=i+1;j<n;j++)if(strcmp(ti[i].data,ti[j].data)>0){s=ti[i];ti[i]=ti[j];ti[j]=s;}}browse();}void search_time(){int i,m=0;struct plane s;system( "cls" );printf("\n\nEnter the time:");scanf("%s",s.data); /*输入出发的时间*/puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i<n;i++){if(strcmp(s.data,ti[i].data)==0){m++;if((m!=0)&&(m%10==0)) {/*目的是分屏显示*/printf("\n\nPress any key to contiune . . .");getchar();puts("\n\n");}printf_one(i);printf("\n");}/*调用显示一个记录的函数*/}puts("\n--------------------------------------------------------------------"); getchar(); /*按任意健*/getchar();menu1();}void serch_end(){int i,m=0;struct plane s;system( "cls" );printf("\n\nEnter the end Place:");scanf("%s",s.EnPlace); /*输入要到达的地方*/puts("\n--------------------------------------------------------------------"); printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n"); for(i=0;i<n;i++){if(strcmp(ti[i].EnPlace,s.EnPlace)==0){m++;if((m!=0)&&(m%10==0)) {/*目的是分屏显示*/printf("\n\nPress any key to contiune . . .");getchar();puts("\n\n");}printf_one(i);printf("\n");}/*调用显示一个记录的函数*/}puts("\n--------------------------------------------------------------------"); getchar(); /*按任意健*/getchar();menu1();}void menu1(){int n,w1;do{system( "cls" ); /*清屏*/puts("\t\t\t\t 飞机售票操作!\n\n");puts("\t\t*********************MENU*********************\n\n");puts("\t\t\t\t1.按照时间排序");puts("\t\t\t\t2.按照时间查找航班");puts("\t\t\t\t3.按照地点查找航班");puts("\t\t\t\t4.返回主菜单");puts("\n\n\t\t**********************************************\n");printf("Choice your number(1-4): [ ]\b\b");scanf("%d",&n);if(n<1||n>4){/*对选择的数字作判断*/w1=1;printf("your choice is not between 1 and 4,Please input again:");getchar();getchar();}else w1=0;} while(w1==1);switch(n){/*选择功能* /case 1:order();break;case 2:search_time();break;case 3:serch_end();break;case 4:menu();break; }}int search(){ /*查找模块*/int i,k;struct plane s;k=-1;system( "cls" );printf("\n\n请输入要订票的起飞地点:");scanf("%s",s.BePlace); /*输入要到达的地方*/printf("\n\n请输入要订票的降落地点:");scanf("%s",s.EnPlace);printf("\n\n请输入要订票的起飞时间:");scanf("%s",s.data); /*输入出发的时间*/for(i=0;i<n;i++){ /*查找要修改的数据*/if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strc mp(s.data,ti[i].data)==0){k=i; /*找到要修改的记录*/printf_one(k);break; }/*调用显示一个记录的函数*/}if(k==-1){printf("\n\nNO exist!");return -1;}elsereturn k;}void book(){int i;system( "cls" );printf("欢迎进入售票窗口!\n");i=search();if(i!=-1){if(ti[i].num>=ti[i].max)printf("\n该趟航班票已售完!");else{ti[i].num++;printf("\n订票成功!\n");}}elseprintf("该航班不存在!\n");getchar();getchar(); /*按任意健*/menu();}void back(){int i,k=-1;struct plane s;system( "cls" );printf("欢迎进入退票窗口!\n");printf("\n\n输入航班代号:");scanf("%s",s.ID); /*输入要到达的地方*/for(i=0;i<n;i++){/*查找要修改的数据*/if(strcmp(s.ID,ti[i].ID)==0){k=i; /*找到要修改的记录*/printf_one(k);break; }/*调用显示一个记录的函数*/}if(k==-1)printf("\n\nNO exist!");else{ti[i].num--;printf("\n退票成功!\n");}getchar(); /*按任意健*/getchar(); /*按任意健*/menu();}void save(){int w=1;FILE *fp;int i;system( "cls" );if((fp=fopen("\\ticket.txt","wt"))==NULL) { /*以输出打开方式,在此前的记录被覆盖*/printf("\nCannot open file\n");return ;}for(i=0;i<n;i++)if(fwrite(&ti[i],sizeof(struct plane),1,fp)!=1){printf("file write error\n");w=0;}if(w==1)printf("file save ok!\n");fclose(fp);getchar();getchar();menu();}void load(){FILE*fp;int i,w;w=1;system( "cls" );if((fp=fopen("\\ticket.txt","rt"))==NULL){printf("\nCannotopen file\n");w=0;return ;}n=0;for(i=0;!feof(fp);i++){fread(&ti[i],sizeof( struct plane),1,fp);n++;}n=n-1;fclose(fp);if(w==1)printf("Load file ok!");getchar();getchar();menu();}void menu(){int n,w1;do{system( "cls" ); /*清屏*/ /*清屏*/puts("\t\t\t\t 飞机售票管理系统!\n\n");puts("\t\t*********************MENU*********************\n\n");puts("\t\t\t\t1.输入新航班");puts("\t\t\t\t2.浏览 ");puts("\t\t\t\t3.航班操作");puts("\t\t\t\t4.订票");puts("\t\t\t\t5.退票");puts("\t\t\t\t6.保存");puts("\t\t\t\t7.载入");puts("\t\t\t\t8.退出");puts("\n\n\t\t**********************************************\n");printf("Choice your number(1-8): [ ]\b\b");scanf("%d",&n);if(n<1||n>8) { /*对选择的数字作判断*/w1=1;printf("your choice is not between 1 and 8,Please input enter to choice again:");getchar();getchar();}else w1=0;} while(w1==1);switch(n){ /*选择功能*/case 1:enter();break; /*输入模块*/case 2:browse();break; /*浏览模块*/case 3:menu1();break; /*查找模块*/case 4:book();break; /*订票模块*/case 5:back();break; /*退票模块*/case 6:save();break; /*保存模块*/case 7:load();break; /*加载模块*/case 8:exit(0);}}int Ticket_system(){menu();}int main(){char ucflag;hchar ucchar[2];do{printf("**********欢迎进入系统!**********\n"); printf("* 1:一元多项式求解. *\n"); printf("* 2:飞机售票操作. *\n"); printf("* 0:退出. *\n"); printf("*********************************\n"); printf("请选择:\n");scanf(" %c",&ucflag);gets(ucchar);if(strlen(ucchar))ucflag='3';switch(ucflag-'0'){case 0:printf("谢谢使用!\n");break;case 1:Polynomial_solve();break;case 2:Ticket_system();break;default:printf("输入错误!请重新输入!\n");break;}}while(ucflag!='0');return 0;}欢迎下载,资料仅供参考!!!资料仅供参考!!!h。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验题目一元多项式的加法运算班级:姓名:学号:日期:一、需求分析1.程序的基本功能:(1 ) 输入两个稀疏的一元n次多项式。
(2) 分别输出这两个多项式。
(3) 计算两个多项式的和。
多项式相加的运算规则为:对于两个一元多项式中指数相同的子项,对应的系数相加,若和非灵,将其构成和多项式中的一个子项;对于两个一元多项式中指数不同的子项,则分别复制到和多项式中去。
(4) 输出和多项式。
2.输入输出要求:(1) 输入多项式:按照指数递增的顺序和指定的输入格式输入各个的子项:“系数、指数”(当输入子项个数达到预设数量的时候停止)。
(2) 输出多项式:在文本界面下,采用类似数学表达式的方式输出多项式、例如:多项式A=3+6x3-2x8+12x20,可在屏幕显示为:A=3+6x^3-2x^8+12x^20要求:a.系数值为1的非零项输出形式中省略系数1,如子项“1x8”的输出形式为“x8”,项“-1x3”的输出形式为“x3”。
b.指数为0的输出形式中省略指数部分,如“3x0”的输出形式应为“3”;指数为“1”的项输出时略去“1”。
c.多项式第一项系数为正时,不输出“+”,其他项要输出“+”、“-”符号。
3.测试数据:① (x+3x6-8.6x11)+(6-3x6+21x9)=6+x+21x9-8.6x11② (3x-3-x+4.1x2-1.2x9)+(-3x-3-5.1x2+7.8x12)=-x-x2-1.2x9+7.8x12③ (x+x3)+(-x-x3)=0④ (x+x100)+(x100+x200)=x+2x100+x200⑤ (x+x2+x3)+0= x+x2+x3二、概要设计1.抽象数据类型的定义:对于一元n次多项式P(x,n)=P0+P1x1+P2x2+……+P n x n而言,每一个子项都是由“系数”和“指数”两部分来组成的,因此可将多项式抽象成一个“系数、指数对”构成的线性表,其中多项式的每一个系数非零的子项作为线性表中的一个元素。
因此,定义一个带有头结点的单链表来表示一元n次多项式。
2.本程序包括以下四个模块:(1 ) 主程序模块:main(){输入多项式A;输入多项式B;分别输出多项式A,B;计算A与B的和多项式C;输出和多项式C;}(2) 输入模块:PolyLink Creat(){初始化带头结点的单链表(多项式链表);按指数递增的顺序,逐对输入多项式的各个子项,并插入到多项式的链表中去;}(3) 加法模块:PolyLink merge(PolyLink A,PolyLink B){对于两个一元多项式中指数相同的子项,对应的系数相加,若和非灵,将其构成和多项式中的一个子项;对于两个一元多项式中指数不同的子项,则分别复制到和多项式中去。
}(4) 输出模块:int putout(PolyLink H){从单链表H的第一个结点开始,逐个输出各结点所表示的子项的值。
}3.各个模块之间的层次关系:三、详细设计1.多项式的数据类型定义:typedef struct pnode{float coef;int exp;struct pnode *next;}PolyNode,*PolyLink;PolyLink A,B,C;2.伪码算法:int main() //主函数{PolyLink Creat(); PolyLink merge(PolyLink A,PolyLink B);int putout(PolyLink H);PolyLink A,B,C;cout<<"下面建立链表A(按指数递增的顺序且系数不为0)"<<endl;A=Creat();cout<<endl<<"多项式A为:";putout(A);cout<<endl<<endl;cout<<"下面建立链表B(按指数递增的顺序且系数不为0)"<<endl;B=Creat();cout<<endl<<"多项式B为:";putout(B);cout<<endl<<endl<<endl;cout<<"下面计算多项式A与B的和"<<endl<<endl;cout<<"(";putout(A);cout<<")+(";putout(B);cout<<")=";C=merge(A,B);putout(C);cout<<endl<<endl;return 0;}PolyLink Creat() //创建新链表{PolyLink H;PolyNode *s,*r;int n,y,i=1;float x;H=new PolyNode;H->next=NULL;r=H;cout<<"请确定本表中项的个数:";cin>>n;while(i<=n){cout<<"请依次输入第"<<i<<"项的系数与指数:";cin>>x>>y;s=new PolyNode;s->coef=x;s->exp=y;r->next=s;r=r->next;i++;}r->next=NULL;return H;}PolyLink merge(PolyLink A,PolyLink B) //计算多项式A、B的和{float c;PolyLink C;PolyNode *pa,*pb,*s,*r;pa=A->next;pb=B->next;C=A;r=C;C->next=NULL;while(pa&&pb){if(pa->exp<pb->exp){s=pa;pa=pa->next;r->next=s;r=r->next;}else if(pa->exp>pb->exp){s=pb;pb=pb->next;r->next=s;r=r->next;}else if(pa->exp==pb->exp){c=pa->coef+pb->coef;if(c==0){pa=pa->next;pb=pb->next;}else if(c!=0){pa->coef+=pb->coef;pb=pb->next;s=pa;pa=pa->next;r->next=s;r=r->next;}}}r->next=pa?pa:pb;return C;}int putout(PolyLink H) //输出多项式H {PolyNode *q;q=H->next;int flag=1;if(!q){cout<<"0";return 0; //若多项式为空,输出}while (q){if(q->coef>0&&flag!=1) //系数大于且不是第一项cout<<"+";if(q->coef!=1&&q->coef!=-1) //系数非或-1{cout<<q->coef;if(q->exp==1)cout<<"X";else if(q->exp)cout<<"X^"<<q->exp;}else{if(q->coef==1) //系数为{if(!q->exp)cout<<"1";else if(q->exp==1)cout<<"X";else if(q->exp)cout<<"X^"<<q->exp;}if(q->coef==-1) //系数为-1{ if(!q->exp)cout<<"-1";else if(q->exp==1)cout<<"-X";else cout<<"-X^"<<q->exp;} }q=q->next;flag++;}return 0;}3.四、调试分析1.调试中遇到的问题及对问题的解决方法:(1)遇到的问题:①在输入多项式时,输入了实型的系数,忽略了程序中指定的类型为整型,从而产生了错误的输出结果。
②在多项式相加时,两个多项式直接相加并按指数递增输出,忽略了相加后系数为零的项的输出方式应不予输出,不符合数学上的表示方式。
(2)解决方法:①将程序中对整型的定义改为浮点型。
②在多项式加法函数中,对于两多项式中指数相等的项系数相加时,要考虑系数和为零的情况,此时应删除结点,不要将其作为和多项式中的一项。
2.算法的时间复杂度:假设两个多项式分别有m 项和n 项,那么建立两个多项式的时间复杂度为O (m ),O (n ),两个多项式相加的时间复杂度为O (m+n ),输出含有n 个子项的多项式的复杂度为O(n),因此算法的总时间复杂度为O (m+n )。
五、使用说明及测试结果1.使用说明putoutCreat merge①输入多项式前,先输入该多项式的项的个数。
②输入多项式时,按指数递增的次序输入。
③程序运行界面:下面建立链表A(按指数递增的顺序且系数不为0)请确定本表中的想的个数:3请依次输入第一项的系数与指数:1 1请依次输入第一项的系数与指数:3 6请依次输入第一项的系数与指数:-8.6 11多项式A为:x+3x^6-8.6x^11下面建立链表B(按指数递增的顺序且系数不为0)请确定本表中的想的个数:3请依次输入第一项的系数与指数:6 0请依次输入第一项的系数与指数:-3 6请依次输入第一项的系数与指数:21 9多项式A为:6-3x^6+21x^9下面计算多项式A与B的和(x+3x^6-8.6x^11)+(6-3x^6+21x^9)=6+x+21x^9-8.6x^112.测试结果:①输入A: x+3x6-8.6x11输入B: 6-3x6+21x9输出C: 6+x+21x9-8.6x11②输入A:3x-3-x+4.1x2-1.2x9输入B:-3x-3-5.1x2+7.8x12输出C:x-x2-1.2x9+7.8x12③输入A:x+x3输入B:-x-x3输出C:0④输入A:x+x100输入B:x100+x200输出C:x+2x100+x200⑤输入A:x+x2+x3输入B:0输出C:x+x2+x3六、源程序略。