一元多项式相加程序注释

阅读程序过程中对各语句及各部分做注释,解释语句的作用、含义。注释语句时需在语句后加上//后面书写注释内容。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof(node)

typedef struct polynode
{
int coef;
int exp;
struct polynode *next;
}node;

node * create(void)
{
node *h,*r,*s;
int c,e;
h=(node *)malloc(LEN);
r=h;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
while(c!=0)
{
s=(node *)malloc(LEN);
s->coef=c;
s->exp=e;
r->next=s;
r=s;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
}
r->next=NULL;
return(h);
}

void polyadd(node *polya, node *polyb)
{
node *p,*q,*pre,*temp;
int sum;
p=polya->next;
q=polyb->next;
pre=polya;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp)
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;pre=pre->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if(p!=NULL)
pre->next=p;
else
pre->next=q;
}

void print(node * p)
{
while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->exp);

}
}

main()
{
node * polya,* polyb;
printf("Welcome to use!\n");
printf("\nPlease input the ploya include coef && exp:\n");
polya=create();
print(polya);
printf("\nPlease input the ployb include coef && exp:\n");
polyb=create();
print(polyb);
printf("\nSum of the poly is:\n");
polyadd(polya,polyb);
print(polya);
printf("\n");

}

实习报告示例

一、实习报告题头

题目: 一元稀疏多项式相加
班级: 信管199923301 姓名:丁一 学号:199935361
完成日期:2001-4-15

二、实习目的和要求

(1)进一步了解一元多项式抽象数据类型定义,掌握线性表的单链表存储结构形式。
(2)输入并建立多项式a和b;
(3)实现求和,即建立多项式c=a+b;
(4)输出和多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数升序排列

三、实习内容

设计一个程序,演示一元稀疏多项式相加的过程。
测试数据采用:A(x)=7+3x+9x8+5x17
B(x)= 8x+22x7-9x8

四、开发环境和工具

1、程序设计环境:计算机的外存:20G 内存: 128MB显示器的分辨率:1024*768打印机:hp DeskJet 640c
2、软件工具,windows 2000,visual c++

五、设计过程描述

设计中用带头结点的单链表存储一元多项式,多项式的项数存放在头结点;演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”后,由用户在键盘上输入多项式的项数及各项的系数和指数,然后进行相加运算,运算根据一元多项式相加的运算规则进行:

对于两个一元多项式中所有指数相同的项,对应指数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去,复抄时应比较相应的指数值的大小,保证多项式序列的升序排列。

一元多项式的单链表存储结构形式如下:
typedef struct {
float coef;
int expn;
} term;

typedef struct Lnode {
term data;
struct Lnode *next;
} Lnode,*Linklist;

抽象数据类型一元多项式定义如下:
ADT Polynomial {
数据对象:D={ai|ai∈TermSet,I=1,2,…,m, m≥0 TermSet中的每个元素包含一个表示系数的实数和表示指数的整数 }
数据关系:R1={i-1,ai>| ai-1,ai∈D,且ai-1中的指数值< ai中的指数值,I=1,2,…n}
基本操作:CreatePolyn(&p,m)
操作结果:输入m项的系数和指数,建立一元多项式p.cmp(term a,term b) 依a的指数值<(或=)(或>b的指数值,分别返回-1,0,+1
AddPolyn(&pa,&pb)
初始条件:一元多项式pa和pb已存在。
操作结果:完成多项式相加运算,即pc=pa+pb.
PrintPolyn(P)
初始条件:一元多项式p已存在。
操作结果:打印输出一元多项式p
程序流程图如下:

七、附录(源程序代码)

#include
#include
typedef struct {
float coef;
int expn;
} term;

typedef struct Lnode {
term data;
struct Lnode *next;
} Lnode,*Linklist;

void main() {
Linklist L1;
Linklist L2;
Linklist L3;
void CreatPolyn(Linklist &L,int m);
void PrintPolyn(Linklist &pa,Linklist &pb,Linklist &pc,Linklist &L3);
int m1,m2;
cout<
cin>>m1;
cout<
cin>>m2;
CreatPolyn(L1,m1);
CreatPolyn(L2,m2);
CreatPolyn(L3,0);
Linklist pa,pb,pc;
pa=L1->next;
pb=L2->next;
pc=L3;
PrintPolyn(pa,pb,pc,L3);
} //主函数

void CreatPolyn(Linklist &L,int m) {
int i; Linklist p;
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
for(i=m;i>0;--i) {
p=(Linklist)malloc(sizeof(Lnode));
cout<
cin>>(p->data).coef>>(p->data).expn;
p->next=L->next;
L->next=p;
}
} //逆序创建带头结点单链表

int cmp(term a,term b) {
if(a.expn
else {
if(a.expn==b.expn) return 0;
else return 1;
}
} //比较指数项

void PrintPolyn(Linklist &pa,Linklist &pb,Linklist &pc,Linklist &L3) {
while(pa&&pb) {
term a,b; float sum;
a=pa->data;
b=pb->data;
switch(cmp(a,b)) {
case -1: pc=pc->next=(Linklist)malloc(sizeof(Lnode));
(pc->data).expn=a.expn;
(pc->data).coef=a.coef;
pa=pa->next;
break;
case 0: pa=pa->next;
pb=pb->next;
sum=a.coef+b.coef;
if(sum==0) break;
else {
pc=pc->next=(Linklist)malloc(sizeof(Lnode));
(pc->data).expn=a.expn;
(pc->data).coef=sum;
}
break;
case 1: pc=pc->next=(Linklist)malloc(sizeof(Lnode));
(pc->data).expn=b.expn;
(pc->data).coef=b.coef;
pb=pb->next;
break;
} //switch
} //while
if(!pa) {
pc->next=pb;
} else { pc->next=pa;
}
pc=L3->next;
while(pc) {
cout<<(pc->data).coef<<(pc->data).expn<
pc=pc->next;
}
}//进行加法运算并输出和多项式

八、测试结果

测试数据采用:A(x)=7+3x+9x8+5x17
B(x)= 8x+22x7-9x8
运行结果:
please input the length of linklist1:
4
please input the length of linklist1:
3
input the coef and expn:
5 17
9 8
3 1
7 0
-9 8
22 7
8 1
和多项式为:
7 0
11 1
22 7
5 17
温馨提示:答案为网友推荐,仅供参考
相似回答