用c语言链表编写一个函数input_poly(ptr1),一次从文件cp7_in.txt中读入两个带系数和指数的多项式。该文件将包含2n个多项式,其中n是小于等于10的整数。多项式的空间将在运行时分配,并且对多项式的大小没有限制,例如,文件的前两行是 3 5 -2.2 3 4 1 -1.713 0 3 100 -2.2 3 14 55 3.1 101 (注:条款可按任意顺序排列) 然后,将创建两个多项式 3x5 - 2.2x3 + 4x - 1.713和 3.1x101 + 3x100 + 14x55 - 2.2x3
时间: 2024-02-17 07:03:16 浏览: 73
好的,我可以为你编写一个用链表实现的函数input_poly(ptr1),用C语言从文件cp7_in.txt中读入两个带系数和指数的多项式。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct poly_node {
float coef;
int expon;
struct poly_node *next;
} polynomial;
void input_poly(polynomial **ptr1) {
FILE *fp;
int n1, n2, i, j;
polynomial *p, *q;
if ((fp = fopen("cp7_in.txt", "r")) == NULL) {
printf("File can't be opened.\n");
exit(1);
}
fscanf(fp, "%d", &n1);
p = (polynomial *) malloc(sizeof(polynomial));
*ptr1 = p;
for (i = 0; i < n1; i++) {
fscanf(fp, "%f %d", &p->coef, &p->expon);
q = (polynomial *) malloc(sizeof(polynomial));
p->next = q;
p = q;
}
fscanf(fp, "%d", &n2);
polynomial *ptr2 = (polynomial *) malloc(sizeof(polynomial));
polynomial *head2 = ptr2;
for (i = 0; i < n2; i++) {
fscanf(fp, "%f %d", &ptr2->coef, &ptr2->expon);
q = (polynomial *) malloc(sizeof(polynomial));
ptr2->next = q;
ptr2 = q;
}
fclose(fp);
// 输出读入的多项式
printf("Polynomial 1:\n");
p = *ptr1;
while (p->next != NULL) {
printf("%.1fx^%d", p->coef, p->expon);
p = p->next;
if (p->next != NULL) {
printf(" + ");
}
}
printf("\n");
printf("Polynomial 2:\n");
ptr2 = head2;
while (ptr2->next != NULL) {
printf("%.1fx^%d", ptr2->coef, ptr2->expon);
ptr2 = ptr2->next;
if (ptr2->next != NULL) {
printf(" + ");
}
}
printf("\n");
// 释放多项式所占用的内存
p = *ptr1;
while (p != NULL) {
q = p;
p = p->next;
free(q);
}
ptr2 = head2;
while (ptr2 != NULL) {
q = ptr2;
ptr2 = ptr2->next;
free(q);
}
}
```
这个函数使用链表来存储每个多项式的系数和指数,并使用指针来动态分配内存。它创建两个指针p和q来遍历链表,并使用while循环输出读入的两个多项式。在读取完多项式后,函数使用free()函数释放内存。
你可以在自己的程序中调用input_poly(ptr1)函数来读取多项式。注意,ptr1是一个指向多项式的指针,可以在函数中使用它来动态分配内存。
阅读全文