• 大小: 9KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: C语言  运算  加减乘  

资源简介

这是使用C语言写成。实现了一元多项式的加减乘的运算。我们使用计算机处理的对象之间通常存在着的是一种最简单的线性关系,这类数学模型可称为线性的数据结构。而数据存储结构有两种:顺序存储结构和链式存储结构。线性表是最常用且最简单的一种数据结构。所以我们做的是———–一元多项式的表示及相加,其过程其实是对线性标的操作。实验结构和链接存储结构上的运算以及熟练运用掌握的线性表的操作,实现一元n次多项式的目的是掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储的加法运算。学习实现一元n次多项式的加法是符号多项式的操作,是表处理的典型用例,需要注意的是:顺序存储结构指的是用数组方法,使用数组方法实现时,在插入和删除的方面,数组不如链表灵活,方法复杂,删除其中一个需要将其后的数组元素改变位置,使其数组保持原有的顺序结构,在查找方面较链表简单,只需要知道其下标就可以知道。链接存储结构指的是用链表方法,值得注意的是,删除和插入较为灵活,不需要变动大多数元素,但是查找过程相对于数组这种顺序存储结构来说较为复杂,耗时巨大。

资源截图

代码片段和文件信息

#include
#include
#include 

#define LEN sizeof(Poly)

typedef struct term{
float coef; //系数 
int expn; //指数 
struct term *next;
}Poly*link;
int LocateElem(link p link s link &q); 
void CreatePolyn(link &pint m); //创建多项式 
void PrintPolyn(link p); //打印多项式(表示)
int cmp(link a link b);
link AddPolyn(link pa link pb); //多项式相加 
link SubPolyn(link pa link pb); //多项式相减 
link Reverse(link p); //逆置多项式 
link MultiplyPolyn(link Alink B); //多项式相乘 
void Calculate(link pfloat x); //多项式求值 

int main()
{
link P1P2P3; //多项式 
int L1L2; //多项式长度 
printf(“                        -------------------------------------------------------------------\n“);
printf(“                        |==================       一元多项式的运算       =================|\n“);
printf(“                        |==================          1.相加(+)         =================|\n“);
printf(“                        |==================          2.相减(-)         =================|\n“);
printf(“                        |==================          3.相乘(*)         =================|\n“);
printf(“                        -------------------------------------------------------------------\n\n“);
printf(“请输入第一个多项式的项数:“);
scanf(“%d“&L1);
CreatePolyn(P1L1);
printf(“第一个多项式为:“);
printf(“P1(X)=“);
PrintPolyn(P1);
printf(“请输入第二个多项式的项数:“);
scanf(“%d“&L2);
CreatePolyn(P2L2);
printf(“第二个多项式为:“);
printf(“P2(X)=“);
PrintPolyn(P2); 
printf(“\n“);

printf(“请输入要选择的运算(+  -  *): “);
char ch1;
getchar(); //清除掉缓冲区的回车符 
scanf(“%c“&ch1);
getchar(); //清除掉缓冲区的回车符
  switch(ch1){
  case ‘+‘:{
  printf(“两个一元多项式相加:   “);
  printf(“P1(X)+P2(X)=“);
  P3=AddPolyn(P1 P2);
PrintPolyn(P3);
  }break;
  case ‘-‘:{
  printf(“两个一元多项式相减:   “);
  printf(“P1(X)-P2(X)=“);
  P3=SubPolyn(P1 P2);
PrintPolyn(P3);
  }break;
  case ‘*‘:{
  printf(“两个一元多项式相乘:   “);
  printf(“P1(X)*P2(X)=“);
  P3=MultiplyPolyn(P1 P2);
PrintPolyn(P3);
  }break;
  default:printf(“您输入了错误指令 %c !“ch1); 
 }

char ch2;
printf(“\n是否代入X进行求值?(Y/N): “);
ch2=getchar(); //清除掉缓冲区的回车符  
getchar();
switch(ch2){
case ‘Y‘:{
float x;
printf(“\n请输入多项式中X的值:“);
scanf(“%f“&x); 
Calculate(P3x);
break;
}
case ‘N‘:break;
default:printf(“你输入了错误指令 %c !“ch2); 

return 0;
}

int LocateElem(link p link s link &q){
/*遍历链表p,每一个结点与s比较指数,
若相同q指向相同指数项的结点,返回1,
若不相同,根据s所指指数大小在链表p中的位置来确定q的指向结点,返回0 
*/ 
link p1 = p->next;
link p2 = p;
while(p1){
if(s->expn > p1->expn){
p1 = p1->next;
p2 = p2->next;
}else if(s->expn == p1->expn){
q = p1; 
return 1;
}else{
q = p2;
return 0;
}
}
if(!p1){
q = p2;
return 0;
}
}

void CreatePolyn(link &pint m) 
/*创建带头结点的链表(多项式) 
且无论按什么顺序输入,或是有相同指数项
最终在多项式中都是升幂顺序! 
*/
{
link sq;
int i;
p=(link)malloc(LEN);
p->next=NULL;
for(i=0;i {
s=(link)malloc(LEN)

评论

共有 条评论