C语言实现一元多项式加法运算
#include<stdio.h> #include<stdlib.h>
typedef struct LinkNode{ float coef; //系数 int exp; //指数 struct LinkNode *next; //指向下一项的指针 }Polynomial;
Polynomial *createPoly(){ Polynomial head = (Polynomial)malloc(sizeof(Polynomial)); //创建头结点 head->coef = 0; head->exp = -1; head->next = NULL; Polynomial *tail = head; //创建尾指针 int flag = 1; //标记,表示是否继续添加项 while(flag){ float c; int e; printf('Please enter the coefficient and exponent (separated by spaces): '); scanf('%f %d',&c,&e); if(e < 0) continue; //指数为负数则不添加 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = c; p->exp = e; p->next = NULL; tail->next = p; tail = p; printf('Do you want to add another term? (0 for no, 1 for yes): '); scanf('%d',&flag); } return head; }
void printPoly(Polynomial *p){ if(p->next == NULL){ printf('0\n'); return; } while(p->next != NULL){ p = p->next; if(p->coef > 0 && p->exp != 0) printf('+'); //系数为正数时,需要添加'+'号 if(p->coef == -1 && p->exp != 0) printf('-'); //系数为-1时,只需要添加'-'号 else if(p->coef == 1 && p->exp != 0) ; //系数为1时,不需要添加系数 else printf('%.1f',p->coef); //其他情况下,需要添加系数 if(p->exp == 0){ printf('%.1f',p->coef); //指数为0时,只需要输出系数 continue; } printf('x'); if(p->exp != 1) printf('^%d',p->exp); //指数不为1时,需要输出指数 } printf('\n'); }
Polynomial *addPoly(Polynomial *p1, Polynomial *p2){ Polynomial head = (Polynomial)malloc(sizeof(Polynomial)); //创建头结点 head->coef = 0; head->exp = -1; head->next = NULL; Polynomial *tail = head; //创建尾指针 while(p1->next != NULL && p2->next != NULL){ //当两个多项式都还有项没有加完时 if(p1->next->exp > p2->next->exp){ //p1的指数比p2的指数大 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = p1->next->coef; p->exp = p1->next->exp; p->next = NULL; tail->next = p; tail = p; p1 = p1->next; } else if(p1->next->exp < p2->next->exp){ //p1的指数比p2的指数小 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = p2->next->coef; p->exp = p2->next->exp; p->next = NULL; tail->next = p; tail = p; p2 = p2->next; } else{ //p1的指数和p2的指数相等 float c = p1->next->coef + p2->next->coef; if(c != 0){ //系数和不为0,需要添加一项 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = c; p->exp = p1->next->exp; p->next = NULL; tail->next = p; tail = p; } p1 = p1->next; p2 = p2->next; } } while(p1->next != NULL){ //p2的项已经加完了,把p1剩下的项加到结果中 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = p1->next->coef; p->exp = p1->next->exp; p->next = NULL; tail->next = p; tail = p; p1 = p1->next; } while(p2->next != NULL){ //p1的项已经加完了,把p2剩下的项加到结果中 Polynomial p = (Polynomial)malloc(sizeof(Polynomial)); p->coef = p2->next->coef; p->exp = p2->next->exp; p->next = NULL; tail->next = p; tail = p; p2 = p2->next; } return head; }
int main(){ printf('Please enter the first polynomial:\n'); Polynomial *p1 = createPoly(); printf('The first polynomial is: '); printPoly(p1); printf('Please enter the second polynomial:\n'); Polynomial *p2 = createPoly(); printf('The second polynomial is: '); printPoly(p2); Polynomial *result = addPoly(p1,p2); printf('The result is: '); printPoly(result); return 0; }
原文地址: https://www.cveoy.top/t/topic/lRHA 著作权归作者所有。请勿转载和采集!