您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页多项式相加(含运行结果截图)

多项式相加(含运行结果截图)

来源:五一七教育网


实验一

编程环境熟悉及C语言的链表多项式相加

一.实验内容

1. 使用文件功能,编写一个使用双向链表的个人通讯录管理程序。

2. 多项式相加。

二.实验目的和要求

利用双向链表实现通讯录的建立、删除、检索和列表,并可保存至文件,可重新装入。

用链式存储结构实现一元多项式的相加运算。

通过本实验,掌握Visual C++ 6.0的基本使用,包括源程序的输入,编译运行及调试。

调试的目的是找程序的运行错误,可通过debug菜单设置断点实现。

三.实验程序:

#include

#include

struct linklist{

float coef;

int expn;

struct linklist *next;

}la,lb;

void creatpolyn(struct linklist*p,int n){

//输入n项的系数,建立一个链表

int i=0;

struct linklist *q;

q=(struct linklist*)malloc(sizeof(struct linklist));

if (i==0){

printf(\"请输入系数和指数:\\n\");

scanf(\"%f %d\

p->next=q;

i++;

}

while(ip=q;

scanf(\"%f %d\

q=(struct linklist*)malloc(sizeof(struct linklist));

p->next=q;

i++;

}

p->next=NULL;

}

int compare (int a,int b){

//比较函数当a>b时返回1当aif (a>b) return (1);

if (aif (a==b) return (0);

}

struct linklist * addpolyn(struct linklist*p,struct linklist*q){

//两个多项式相加,返回结果指针

int compare (int a ,int b);

int a,b;

float s;

struct linklist *la,*lb,*head;

struct linklist *lc,*ld,*r;

lc=(struct linklist*)malloc(sizeof(struct linklist));

ld=(struct linklist*)malloc(sizeof(struct linklist));

if((p->expn)<(q->expn)){

la=p;

lb=q;

}

else{

la=q;

lb=p;

}

head=la;

lc->next=la;

ld->next=lb;

p=lc;

q=ld;

while(la&&lb){

a=la->expn;

b=lb->expn;

switch(compare(a,b)){

case -1: //多项式la中当前节点指数小于Q

la=la->next;p=p->next;break;

case 0: //多项式la中当前节点指数等于Q

s=la->coef+lb->coef;

if(s!=0.0){

la->coef=s; //此项不为0需要修改la中当前节点的系数值

la=la->next;

p=p->next;

lb=lb->next;

q=q->next;

}

else {

p->next=la->next;

r=la;

la=la->next;

free(r);

lb=lb->next;

q=q->next;

}

break;

case 1:

q->next=lb->next;

p->next=lb;

lb->next=la;

p=p->next;

lb=q->next;

break;

}

}

if(lb){

p->next=lb;

}

return head;

}

void printer(struct linklist *r){

//结果输出函数

while (r){

printf(\"指数:%d 系数:%f\\n\

r=r->next;

}

}

main()

{

void creatpolyn(struct linklist *p,int n); //输入n项的系数,建立一个链表

struct linklist * addpolyn(struct linklist*p,struct linklist*q); //两个多项式相加,返

回结果指针

int compare (int a ,int b); //比较函数当a>b时返回1当avoid outcome(struct linklist *r); //结果输出函数

struct linklist *p=&la,*q=&lb,*r;

int n;

printf(\"请输入第一个多项式的项数:\\n\");

scanf(\"%d\

creatpolyn(p,n);

printf(\"请输入第二个多项式的项数:\\n\");

scanf(\"%d\

creatpolyn(q,n);

r=addpolyn(p,q);

print(r);

}

四.算法分析

多项式由系数和指数组成,建立两个链表分别存储系数和指数。为了方便实验过程,实验在输入的时候按照指数的由低到高输入,避免了排序。在相加过程中,将两个链表从头到尾进行比较,直到比到一个链表没有元素为止,将其中指数相同的系数进行加减运算。最后打印出多项式。

五.实验结果

经验证实验结果正确无误,所以实验程序正确。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务