用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-11 08:09:34 浏览: 68
好的,这是一个比较复杂的问题,需要使用链表来存储多项式,然后从文件中读取多项式的系数和指数。以下是代码实现:
首先,我们需要定义一个结构体来表示多项式中的每一项:
```c
typedef struct _polyTerm {
float coef; // 系数
int exp; // 指数
struct _polyTerm *next; // 指向下一项的指针
} PolyTerm;
```
然后,我们需要定义一个函数来创建一个新的多项式项:
```c
PolyTerm *newPolyTerm(float coef, int exp) {
PolyTerm *term = (PolyTerm *)malloc(sizeof(PolyTerm));
term->coef = coef;
term->exp = exp;
term->next = NULL;
return term;
}
```
接着,我们需要定义一个函数来插入一个新的多项式项到链表中:
```c
void insertPolyTerm(PolyTerm **head, float coef, int exp) {
PolyTerm *newTerm = newPolyTerm(coef, exp);
if (*head == NULL) { // 如果链表为空,则将新项设置为头节点
*head = newTerm;
} else {
PolyTerm *prev = NULL;
PolyTerm *curr = *head;
while (curr != NULL && curr->exp > exp) { // 找到新项应该插入的位置
prev = curr;
curr = curr->next;
}
if (prev == NULL) { // 如果新项应该插入到头节点之前
newTerm->next = *head;
*head = newTerm;
} else { // 如果新项应该插入到链表中间
prev->next = newTerm;
newTerm->next = curr;
}
}
}
```
最后,我们需要定义一个函数来读取文件中的多项式,并将其存储在链表中:
```c
void input_poly(PolyTerm **head) {
FILE *fp;
fp = fopen("cp7_in.txt", "r");
if (fp == NULL) {
printf("File open error.\n");
exit(1);
}
int n = 0;
float coef;
int exp;
while (fscanf(fp, "%f %d", &coef, &exp) != EOF) {
insertPolyTerm(head, coef, exp);
n++;
if (n == 2) { // 如果已经读取了两个多项式,则打印它们的结果并释放链表内存
printPoly(*head);
clearPoly(head);
n = 0;
}
}
fclose(fp);
}
```
在上面的函数中,我们使用了两个辅助函数:一个是用来打印多项式的函数`printPoly`,另一个是用来释放链表内存的函数`clearPoly`。这些函数的实现如下:
```c
void printPoly(PolyTerm *head) {
while (head != NULL) {
if (head->coef >= 0) {
printf("+%.2fx^%d ", head->coef, head->exp);
} else {
printf("%.2fx^%d ", head->coef, head->exp);
}
head = head->next;
}
printf("\n");
}
void clearPoly(PolyTerm **head) {
PolyTerm *curr = *head;
while (curr != NULL) {
PolyTerm *temp = curr;
curr = curr->next;
free(temp);
}
*head = NULL;
}
```
现在,我们已经完成了用链表实现读取多项式并打印结果的函数`input_poly`。在主函数中,我们只需要调用`input_poly`函数即可完成读取和输出的操作:
```c
int main() {
PolyTerm *poly1 = NULL;
PolyTerm *poly2 = NULL;
input_poly(&poly1);
input_poly(&poly2);
return 0;
}
```
注意,由于文件中有n个多项式,我们需要在`input_poly`函数中循环读取两个多项式,并在读取到第2n个多项式时结束程序。
阅读全文