1999年下午高程的一道考题,谁能给解释一下阿

xzhy80 2006-10-10 09:16:28
1999年下午第五题


【程序5说明】

本程序实现两个多项式相乘。多项式用链表表示,链表上的各表元按多项式的幂指数降序链接。例如:

f(x)=5.7x15+4.8x6+9.65

设两个多项式f(x)和g(x)分别为

f(x)=fnxn+ ... +f1x+f0 g(x)=gmxm+ ... +g1x+g0

其积多项式为 s(x)=f(x)g(x)=skxk+ ... +s1x+s0

其中 k=n+m , si= (0≤i≤k)


#include <stdio.h>

#include <malloc.h>

typedef struct elem { int index; double coef; struct elem *next;

} POLYNODE;



//这段程序中
有一个变量u
按照答案来看
只有赋值项
没有取出来
想请问这段程序中
u的作用


POLYNODE * inpoly()

{ POLYNODE *u, *v, *h = NULL, *p; int index; double coef;

printf(“Input index(<0 for finish) “); scanf(“%d”, &index);

while (index >=0 ) {

printf(“Input coef “); scanf (“%1f”, &coef);

p = (POLYNODE *)malloc(sizeof(POLYNODE));

p->index = index; p->coef = coef;

v = h ;

while (v != NULL && index < v->index) { u = v; v = v->next;}

if (v == NULL || index > v->index)

{ p->next = v; if (v == h ) ____h=p____; else ____u->next=p____;}

else v->coef += coef;

printf(“Input index(<0 for finish) “); scanf(“%d”, &index);

}

return h;

}


//这段程序中
有一个变量u
按照答案来看
只有赋值项
没有取出来
想请问这段程序中
u的作用
...全文
1033 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzyan80 2006-10-11
  • 打赏
  • 举报
回复
up
tomtom123 2006-10-11
  • 打赏
  • 举报
回复
MARK
mekiss 2006-10-11
  • 打赏
  • 举报
回复
UP
etomahawk 2006-10-11
  • 打赏
  • 举报
回复
晕,变形了...

补充一下:
插入前:
u指向第三个节点位置,v指向第四个节点位置

插入后:
u指向第三个节点位置,v指向第五个节点位置
etomahawk 2006-10-11
  • 打赏
  • 举报
回复
假设链表的如下,
插入前:
h u v
| | |
[] -> [] -> [] -> [] -> [] ->...

插入后:
h u v
| | |
[] -> [] -> [] ->(新节点) -> [] -> [] ->...

#include <stdio.h>
#include <malloc.h>

typedef struct elem
{
int index;
double coef;
struct elem *next;
}POLYNODE;

POLYNODE * inpoly()
{
POLYNODE *u, *v, *h = NULL, *p;
int index;
double coef;

//Input the index...
printf(“Input index(<0 for finish) “);
scanf(“%d”, &index);

while (index >= 0 )
{
printf(“Input coef “);
scanf (“%1f”, &coef);

//创建一个新的节点
p = (POLYNODE *) malloc (sizeof(POLYNODE));
p->index = index;
p->coef = coef;
v = h ;

//为当前输入的节点找到一个合适的位置,条件:Index >= v-> Index
while (v != NULL && index < v->index)
{
u = v;
v = v->next;
}

//如果v为空,或v所在的节点的幂指数已经幂指数
if (v == NULL || index > v->index)
{
p->next = v;

//如果结果的列表中没有数据的话,Header等于当前的结点
if (v == h )
____h=p____;
else
//否则,插入到当前的位置前,在这里u->next=v,要插入到v的前面就用u->next
____u->next=p____;
}
else
//如果幂指数相等的话,系数直接相加就可以了。。。
v->coef += coef;

//输入下一个节点
printf(“Input index(<0 for finish) “);
scanf(“%d”, &index);
}
//返回头结点......
return h;
}
xzhy80 2006-10-10
  • 打赏
  • 举报
回复
给解释一下阿
rickerliang 2006-10-10
  • 打赏
  • 举报
回复
最烦就是n年前的试题,啥注释也没有
xzhy80 2006-10-10
  • 打赏
  • 举报
回复
在定
xzhy80 2006-10-10
  • 打赏
  • 举报
回复
给解释解释阿
adintr 2006-10-10
  • 打赏
  • 举报
回复
mark, 头晕,不想看
xzhy80 2006-10-10
  • 打赏
  • 举报
回复
保存完以后
怎么取出来的呢
飞哥 2006-10-10
  • 打赏
  • 举报
回复
保存前一个节点的指针
xzhy80 2006-10-10
  • 打赏
  • 举报
回复

ding
yingchungui 2006-10-10
  • 打赏
  • 举报
回复
首先注意它是一个指针,
然后,你画一个链表结点图就知道了
xzhy80 2006-10-10
  • 打赏
  • 举报
回复
ding

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧