阅读以下应用说明、图和C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。 【说明】 以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有: cr

admin2009-02-15  56

问题 阅读以下应用说明、图和C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。
    【说明】
   以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有:
   createList():创建按指数降序链接的多项式链表,以表示多项式:
   reverseList():将多项式链表的表元链接顺序颠倒:
   multiplyList(ListL1,ListL2)计算多项式L1和多项式L2的乘积多项式。
【C++程序】
#include <iostream.h>
class List;
class Item {
    friend class List;
    private:
        double quot  ;
        int exp ;
        Item *next;
    Public:
        Item(double_quot,int_exp)
        {  (1)  ;}
};
class List{
   private:
       Item *list;
   Public:
       List(){
           list=NULL:
       }
   void reverseList();
   void multiplyList(List L1,List L2);
   void createList();
};
void List::createList()
{   Item *p,*U,*pre;
   int exp;
   double quot;
   list = NULL;
   while (1) {
       cout << "输入多项式中的一项(系数、指数) :" << endl;
       cin >> quot >> exp:
       if ( exp<0 )
           break ;                  //指数小于零,结束输入
       if ( quot=0 )
          continue;
       p = list;
       while (  (2)  ) {        //查找插入点
           pre = p;
           p = p->next;
       }
       if  ( p != NULL && exp = p->exp )  {
           p->quot += quot;
           continue ;
       }
       u =(3);
       if (p == list)
           list = u;
       else
           pre->next = u;
       u ->next = p;
   }
}
void List::reverseList()
{   Item *p, *u;
   if ( list==NULL )
       return;
   p = list ->next;
   list -> next = NULL;
   while ( p != NULL)  {
       u = p -> next;
       p ->next = list;
       list = p;
       p = u;
   }
}
void List::multiplyList ( List L1, List L2 )
{   Item *pL1,*pL2,*u;
   int k, maxExp;
   double quot;
   maxExp =(4):
   L2.reverseList();
   list=NULL;
   for ( k = maxExp;k >= 0;k-- ){
       pL1 = L1.list;
       while ( pL1 != NULL && pL1 -> exp > k )
           pL1 = pL1 ->next;
       pL2 = L2.1ist;
       while (pL2 NULL &&(5))
           pL2 = pL2 -> next;
       quot = 0.0;
       while (pL1 != NULL && pL2 != NULL){
           if(pL1->exp+pL2->exp==k)  {
                 (6)  
              pL1 = pL1 -> next;
              pL2 = pL2 -> next;
           } else if ( pL1 -> exp + pL2 -> exp > k )
                   pL1 = pL1 -> next;
               else
                   pL2 = pL2 -> next;
       }
       if ( quot !=0.0 ) {
           u = new item( quot, k );
           u -> next = list;
           list = u;
       }
   }
   reverseList ();
   L2. reverseList ():
}
void main()
{   List L1,L2,L;
   cout << "创建第一个多项式链表\n";
   L1.createList();
   cout << "创建第二个多项式链表\n";
   L2.createList();
   L.multiplyList (L1,L2);
}

选项

答案(1)quot=_quot; exp=exp; next=NULL; (2)p!=NULL && exp <p--> exp (3)newItem (quot, exp) (4)L1.list--> exp + L2.1ist--> exp (5)pL1--> exp + pL2--> exp <k (6)quot+=pL1-->quot*pL2-->quot

解析 阅读本试题C++程序可知,程序主要由类Item和类List组成。类Item定义多项式中的项,它定义了 3个私有数据成员,即系数quot、指数exp和指向多项式的下一项的指针next。该类中定义了一个带有2个参数的构造函数,其作用是创建系数为_quot,指数为_exp的项(即创建类Item的一个对象),因此(1)空缺处所填写的语句是“quot=_quot;exp=_exp;next=NULL;”。
   类List定义了多项式的操作,数据成员list是多项式链表的链头指针。类的成员函数createList()的功能是:创建按照指数降序顺序链接的多项式。其创建的方法是:不断将新的项插入到链表中的合适位置上。若链表中存在一项p,其指数大于待插入项的指数,则待插入项应该是p的前驱。该成员函数在链表上遍历,直至找到满足上述条件的项。若链表中不存在“指数大于待插入项的指数”的项,那么待插入项将成为新的链尾。因此(2)空缺处所填写的循环判断条件是“p!=NULL&&exp<p->exp”。(3)空缺处应根据读入的指数和系数创建要插入的项,即(3)空缺处所填写的内容是“new ltem(quot,exp)”。若链表中存在指数与待插入项的指数相等,则应合并同类项。
   成员函数multiplyList(L1,L2)用于计算多项式L1和L2的乘积。首先计算L1和L2的乘积多项式的最高幂次,即多项式L1和L2的最高次项的指数之和。由于多项式L1和L2的各项是按照指数降序排列的,两个多项式的第一项分别是最高次幂项,这两项的指数之和就是乘积多项式的最高次幂,因此(4)空缺处所填写的内容是“L1.1ist->exp+L2.list->exp”。
   为了实现系数的乘积求和计算,当多项式L1从幂次高至幂次低逐一考虑各项的系数时,多项式L2应从幂次低至幂次高的顺序考虑各项的系数,以便将两个多项式中所有幂次和为众的两项系数相乘后累加。由于应用程序中所使用的数据结构是单链表,因此成员函数先将其中多项式L2的链接顺序颠倒,待计算完成后再将多项式L2的链接顺序颠倒,即恢复多项式L2原来的链接顺序。乘积多项式从最高次(L1与L2的幂次和)幂系数至0次幂系数的顺序逐一计算。
   为求A次幂这一项的系数,对于L1的考查顺序是从最高次幂项至最低次幂项,而L2的考查顺序是从最低幂次项至最高次项。首先跳过多项式L1中高于k次幂的项,设低于k次幂的项最高次幂是j次幂,对于多项式L2,跳过低于k-j次幂的项,因此(5)空缺处所填写的内容是“pL1->exp+pL2->exp<k”。
   考虑多项式L1和L2剩余各项的循环,若两多项式的当前项幂次和为k,则累计它们系数的乘积,并分别准备考虑下一项,因此(6)空缺处所填写的语句是“quot+=pL1->quot*pL2->quot”:若两个多项式的当前项幂次和大于A,则应该考虑幂次和更小的项,即应准备考虑多项式L1的下一项:若两个多项式的当前项幂次和小于A,则应该考虑幂次和更大的项,准备考虑多项式L2的下一项;若所有幂次和为A的项的系数乘积之和不等于0,则应在乘积多项式中有这一项,生成这一项的新节点(让指针u指向该节点),并将它插在乘积多项式的末尾。
转载请注明原文地址:https://jikaoti.com/ti/YvW7FFFM
0

最新回复(0)