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

admin2014-10-11  27

问题   阅读以下说明和程序流程图,将应填入(n)处的字句写在答题纸对应栏内。
  【说明】
当一元多项式
中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5一2x2+7的存储结构为:

流程图图3一1用于将pc(Node结构体指针)节点按指数降序插入到多项式c(多项式POLY指针)中。流程图中使用的符号说明如下:(1)数据结构定义如下:
    #define EpSI  le一6
    structNode(    /*多项式中的一项*/
    d。uble c;    /*系数*/
    int e;   /*指数*/
    struct Node  *next:
    };
    typedef struct{    /*多项式头节点*/
    Int n;    /*多项式不为零的项数*/
    struct N0de  *head:
    }POLY;
(2)Del(POLY*C,stmct Node*p)函数,若p是空指针则删除头节点,否则删除p节点的后继。
(3)fabs(double c)函数返回实数c的绝对值。
【图3—1】

选项

答案(1)C一>head:=pC (2)pC一>next:=C一>head (3)tp:=NULL (4)t:NULL (5)t:=NULL

解析 该流程图是用于将pC(Node结构体指针)节点按指数降序插入到多项式C(多项式POLY指针)中。需要特别注意特殊情况:C为空多项式,即插入第一项时的处理;当pc的指数比C中的最大指数还大时的处理:当DC的指数与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时的处理用~lJtp,易于判断tp正是用来记录前驱的。亦可由t一>e>pC一>e时的处理:tp:=t、t:=t一>next得到验证。纵观流程,tp没有赋初值,这样,空(3)处就应该是对其赋初值,故应填tp:=NULL。再来看空(5),此时是t一>ee,注意Nc是降序排序(对指数而言)的,也就是说t以前(不包括t)的指数均大于pC,以后(包括t)的均小于pC,这样pC就应该插在t以前(据上述分析,亦即tp以后)。而(5)后的控制流是回到判断t:NULL,因此,此处应填t:=NULL。这样,就可将pC正确的插入tp之后,t之前,这个工作由空(4)的分支t==NULL完成。
转载请注明原文地址:https://kaotiyun.com/show/1aDZ777K
0

相关试题推荐
最新回复(0)