p50_52test.cpp
上传用户:chaiyuqiu
上传日期:2022-08-03
资源大小:27k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. const int MaxTerms = 100;
  2. class Polynomial; //多项式类的前视声明
  3. class term {  //多项式中项的类定义
  4. friend Polynomial; //定义Polynomial类为term类的友元类
  5. private:
  6. float coef; //系数
  7. int exp; //指数
  8. };
  9. class Polynomial {
  10. public:
  11. //在定义2.3中列出的多项式的公共操作
  12. //   ……
  13.        Polynomial ( ); //返回多项式p(x)=0
  14.    int operator ! ( ); //若*this是零多项式, 则返回1, 否则返回0。
  15.    int Coef (int e); //返回多项式*this中指数e的系数。
  16.    int LeadExp ( ); //返回多项式*this中最大的指数。
  17.    Polynomial Add (Polynomial poly); //返回多项式*this与多项式poly的和。
  18.    Polynomial Mult (Polynomial poly);        //返回多项式*this与多项式poly的乘积。
  19.    void NewTerm (float c, int e);
  20.    float Eval ( float x); //计算多项式*this在变量为x时的值。
  21. private:
  22.     static term termArray[MaxTerms]; //存放多项式的数组
  23.     static int free; //多项式有效项数的下一位置
  24.     //要求在类定义之外定义:
  25.     // term Polynomial::termArray[MaxTerms];
  26.     // int Polynomial::free = 0; //在termArray中下一个空闲位置
  27.     int start, finish ; //多项式开始与结束位置
  28. };
  29. #include <iostream.h>
  30. void Polynomial::NewTerm ( float c, int e ) {
  31. //把一个新的项加到多项式C (x)中
  32.     if ( free >= MaxTerms ) {
  33. cout << "Too many terms in polynomials" << endl;  return;
  34.     }
  35.     termArray[free].coef = c;  termArray[free].exp = e;  free++;
  36. }
  37. Polynomial Polynomial::Add ( Polynomial B ) {
  38. //返回两个多项式A(x) {在*this中}与B(x)的和
  39.     Polynomial C;   int a = start;   int b = B.start;   C.start = free; //a, b分别为两多项式检测指针
  40.     float c; //c为结果多项式的存放指针
  41.     while ( a <= finish && b <= B.finish )
  42. if ( termArray[a].exp == termArray[b].exp)  { //比较对应项的指数
  43.      c = termArray[a].coef + termArray[b].coef; //相等,系数相加
  44.      if ( c ) NewTerm ( c, termArray[a].exp ); //和不为0,建立新项
  45.      a++;  b++;
  46. }
  47. else if ( termArray[a].exp < termArray[b].exp ) {
  48.     NewTerm ( termArray[b].coef, termArray[b].exp ); //不等,建立新项
  49.     b++;
  50. }
  51. else if ( termArray[a].exp < termArray[b].exp ) {
  52.     NewTerm ( termArray[a].coef, termArray[a].exp );  //不等,建立新项
  53.     a++;
  54. }
  55.     for ( ; a<=finish; a++ ) //加A(x)中剩余的项
  56. NewTerm ( termArray[a].coef, termArray[a].exp );
  57.     for ( ; b<=B.finish; b++ ) //加B(x)中剩余的项
  58. NewTerm ( termArray[b].coef, termArray[b].exp );
  59.     C.finish = free-1;
  60.     return C;
  61. }