一元稀疏多项式简单计算器 ----综合题2

高级功能里面有几个没有做 ...


二、一元稀疏多项式简单计算器

问题描述

设计一个一元稀疏多项式简单计算器

基本要求

一元稀疏多项式简单计算器的基本功能是:

(1)输入并建立多项式;

(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;

(3)多项式a和b相加,建立多项式a+b;

(4)多项式a和b相减,建立多项式a-b。

测试数据

(1)(2x+5x3-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)

(2)(6x-3-X+4.4X2-1.2X9)-(-6X-3+5.4X2-X2+7.8X15)=(-7.8X15-1.2X9+12X-3-X)

(3)(1+X+X2+X3+X4+X5)+(-X3-X4)=(1+X+X2+X5)

(4)(X+X3)+(-X-X3)=0

实现提示

用带表头结点的单链表存储多项式。

选作内容

  1. 计算多项式在X处的值。
  2. 计算多项式a的导函数a’。
  3. 多项式a和b相乘,建立乘积多项式ab。
  4. 多项式的输出形式为类数学表达式。例如,多项式-3x8+6x3-18的输出形式为-3x^8+6x^3-18。注意,系数为1的非零次项的输出形式中略去系数1,如1x8的输出形式为x^8。
  5. 计算器的仿真界面。

 


 界面

一元稀疏多项式简单计算器 ----综合题2_第1张图片


源码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define MAX 101
#define STOP -12923966
void wait(){
	cout << "\n请按任意键继续\n" << flush;
	getch();
}
struct domath{
  int c;
  int x;
}LINEADD[MAX],LINESUB[MAX],LINE1[MAX],LINE2[MAX],LINE1b[MAX],LINE2b[MAX],LINE3[MAX];
void refreash();
void input_lines();
void show_pcline();
void test();
void show_pcline();
void ADD();
void backup();
void makeup(domath* LINE);
void SUB();
void math_UI(domath* LINE);
void math_out();
void calUI();

int main()
{
  refreash();
  char choice;
  while (1)
  { system("cls");
    cout << "\n\n\n\n";
    cout << "\t\t                       多项式计算器  \n";
    cout << "\t\t           ======================================\n";
    cout << "\t\t             1:输入多项式          \n";
    cout << "\t\t             2:输出多项式               \n";
    cout << "\t\t             3:多项式a和b相加,建立多项式a+b        \n";
    cout << "\t\t             4:多项式a和b相减,建立多项式a-b         \n";
    cout << "\n";
    cout << "\t\t           =======================================pro   \n";
    cout << "\t\t             5:类数学表达式     \n";
		cout << "\t\t             6:计算器的仿真界面        \n";

    cout << "\t\t             z:清空数据        \n";
    cout << "\n";
    cout << "\t\t             0:退出        \n";
    cout << "\n";
    cout << "\t\t请选择:" << flush;

    choice = getch();
    system("cls");
      switch(choice)
      {
        case '1':
        input_lines();
          break;
        case '2':
        show_pcline();
          break;
        case '3':
        ADD();
          break;
				case '4':
				SUB();
					break;
				case '5':
				math_out();
					break;
					case '6':
					calUI();
						break;

        case 't':
        test();
        break;
        case '0':
          exit(0);
      }
    }
}
//refreash
void refreash(){
  int i;
  for(i=0;i>LINE[100].c;                      //this is n
  for(i=0;in?x_max:n;
    }//find x_max
		for(i=0;in?maxa:n;
	}
	for(i=0;LINE2[i].c!=STOP;i++){
		n =LINE2[i].x;
		maxb=maxb>n?maxb:n;
	}
	maxa=maxa>maxb?maxa:maxb;//get max
	for(i=0;in?maxa:n;
	}
	for(i=0;LINE2[i].c!=STOP;i++){
		n =LINE2[i].x;
		maxb=maxb>n?maxb:n;
	}
	maxa=maxa>maxb?maxa:maxb;//get max
	for(i=0;i1||LINE[i].c<0)
			{
				if(LINE[i].c>0&&i>0)  cout<<"+"<0&&i>0)  cout<<"+"<     x      \n";
	cout << "\t\t                           \n";
	cout << "\n\n";
	wait();

}
//test
void test()
{
  refreash_one(LINE1);
  LINE1[0].c=1;
  LINE1[0].x=1;
  LINE1[1].c=1;
  LINE1[1].x=3;
  LINE1[100].c=2;
  refreash_one(LINE2);
	LINE2[0].c=1;
	LINE2[0].x=1;
	LINE2[1].c=1;
	LINE2[1].x=3;
  LINE2[100].c=2;
  backup();
  makeup(LINE1);
	cout<<"LINE1[100].c:"<

老娘这回基本上没有写备注,,我好懒的其实----

makeup()函数比较难 因为我一开始小看这个题了 ,后来发现如果有沙雕输入1x+2x+3x这样的同类项还得合并,这就是全部难点了我认为


Thank you for reading my essay.

你可能感兴趣的:(一元稀疏多项式简单计算器 ----综合题2)