/*

  • 这段代码实现了一个多项式的存储和打印功能 */

#include<stdio.h> #include<string.h> #include<stdlib.h>

typedef struct node { int coef; // 系数 int expn; // 指数 struct node *next; // 下一个节点的指针 }Node, *List;

/*

  • 创建一个多项式链表
  • 参数i为多项式的项数
  • 返回一个指向链表头节点的指针 */ List Creat(int i) { List head; // 头节点 head = (List)malloc(sizeof(Node)); // 分配内存空间 List pre, pnew; // 前一个节点和新节点 pre = head; char a,b; for(int j = 0; j <= i; j++) { pnew = (List)malloc(sizeof(Node)); // 输入每一项的系数和指数 scanf('%c%d,%d%c', &a, &pnew->coef, &pnew->expn, &b); pre -> next = pnew; // 将新节点连接到链表中 pre = pnew; // 更新前一个节点为当前节点 } return head; }

/*

  • 打印多项式
  • 参数head为链表头节点的指针 */ void Print(List head) { List q = head->next->next; // 从第一个节点开始打印 int flag = 1; // 标记是否为第一个节点 if(!q) { putchar('0'); // 如果链表为空,则打印0 printf("\n"); return; } while(q) { if(q->coef > 0 && flag != 1) { // 如果系数大于0且不是第一个节点,则打印+ putchar('+'); } if(q->coef != 1 && q->coef != -1) { // 如果系数不是1或-1,则打印系数 printf('%d', q->coef); if(q->expn == 1) { // 如果指数为1,则打印X putchar('X'); } else if (q->expn) { // 如果指数不为0,则打印X^指数 printf('X^%d', q->expn); } } else { if(q->coef == 1) { // 如果系数为1 if(!q->expn) { // 如果指数为0,则打印1 putchar('1'); } else if (q->expn == 1) { // 如果指数为1,则打印X putchar('X'); } else { // 否则打印X^指数 printf('X^%d', q->expn); } } if(q->coef == -1) { // 如果系数为-1 if(!q->expn) { // 如果指数为0,则打印-1 printf('-1'); } else if(q->expn == 1) { // 如果指数为1,则打印-X printf('-X'); } else { // 否则打印-X^指数 printf('-X^%d', q->expn); } } } q = q->next; // 更新当前节点为下一个节点 flag++; // 更新标记 } }

int main() { int i; scanf('%d', &i); // 输入多项式的项数 List head; head = Creat(i); // 创建链表 Print(head); // 打印链表

C语言实现多项式存储和打印:代码详解及优化

原文地址: http://www.cveoy.top/t/topic/mOLg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录