阅读以下说明和程序流程图,将应填入(n)处的字句写在对应栏内。 [说明] 当一元多项式中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指受和对应系数。 为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中

admin2010-12-17  26

问题 阅读以下说明和程序流程图,将应填入(n)处的字句写在对应栏内。
   [说明]
   当一元多项式中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指受和对应系数。
   为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:
   
   流程图图3-1用于将pC(Node结构体指针)节点按指数降序插入到多项式C(多项式POLY指针)中。
   流程图中使用的符号说明如下:
   (1)数据结构定义如下:
   #define EPSI 1e-6
   struct Node{    /*多项式中的一项*/
   double c;    /*系数*/
   int e;    /*指数*/
   Struct Node *next;
   };
   typedef struct{    /*多项式头节点*/
   int n;    /*多项式不为零的项数*/
   struct Node *head;
   }POLY;
   (2)Del(POLY *C,struct Node *p)函数,若p是空指针则删除头节点,否则删除p节点的后继。
   (3)fabs(double c)函数返回实数C的绝对值。
   [图3-1]
   
(5)

选项

答案t:=NULL

解析 该流程图是用于将pC(Node结构体指针)节点按指数降序插入到多项式C(多项式POLY指针)中。需要特别注意特殊情况:C为空多项式,即插入第一项时的处理;当pC的指数比C中的最大指数还大时的处理;当pC的指数与C中某项的指数相同时,进行系数相加,若相加后为0时的处理。
   根据结构体POLY的声明,可知C->head为NULL意味着多项式为空,将pC作为第一项插入,故空(1)应填C->head:=pC。
   pC->e>C->head->e意味着pC的指数比C中的最大指数还大,此时应将将pC作为第一项插入,处理方式同上,故空(2)应填pC->next:=C->head。
   先分析空(4),控制流可以从两条路到达空(4)处,一是t==NULL(到了多项式C的末尾),亦即pC的指数比C中最小的还小,此时须将pC插入到末尾;一是t->e=:pC->e(找到同指数项,进行合并),显然t!=NULL,此时不必在作任何操作。因此可通过判断t是否为NULL区分这两种情况,故空(4)处应填t:NULL。
   要将pC插入到末尾,此时t==NULL,因此须正确记录其前驱方可插入(单链表),注意到空(4)分支t==NULL时的处理用到tp,易于判断tp正是用来记录前驱的。亦可at->e>pC->e时的处理:tp:=t、t:=t->next得到验证。纵观流程,tp没有赋初值,这样,空(3)处就应该是对其赋初值,故应填tp:=NULL。
   再来看空(5),此时是t->e<pC->e,注意到C是降序排序(对指数而言)的,也就是说t以前(不包括t)的指数均大于pC,以后(包括t)的均小于pC,这样pC就应该插在t以前(据上述分析,亦即tp以后)。而(5)后的控制流是回到判断t:NULL,因此,此处应填t:=NULL。这样,就可将pC正确的插入tp之后,t之前,这个工作由空(4)的分支t==NULL完成。
转载请注明原文地址:https://kaotiyun.com/show/cvDZ777K
0

最新回复(0)