为什么乘法显示输出类型不匹配咋改



#include <stdio.h>
#include <stdlib.h>
//一元多项式相加
typedef struct Node{
int floatcoef; //序数
int intexpn; //指数
struct Node* next;
}Node;


Node* creat(){
Node* head=(Node*)malloc(sizeof(Node));
Node* tail=head;
int coef;//序数
int expn;//指数
scanf("%d %d",&coef,&expn);
while(coef!=0){//////////////////
    Node* node=(Node*)malloc(sizeof(Node));
    if(node!=NULL){///////////
    node->floatcoef=coef;
    node->intexpn=expn;
                    }
    node->next=NULL;
    tail->next=node;
    tail=node;
    scanf("%d %d",&coef,&expn);
}
return head;
}
Node* addpoly(Node* leftpoint,Node* rightpoint){
Node* head1=leftpoint->next;
Node* head2=rightpoint->next;
Node* temp=leftpoint;
while(head1!=NULL&&head2!=NULL){
    if(head1->intexpn<head2->intexpn){
        temp->next=head1;
        head1=head1->next;
        temp=temp->next;
    }
    else if(head2->intexpn<head1->intexpn){
        temp->next=head2;
        head2=head2->next;
        temp=temp->next;
    }
    else{
        head1->floatcoef+=head2->floatcoef;//
        temp->next=head1;
        temp=temp->next;
        head1=head1->next;
        head2=head2->next;
    }
}
if(head1!=NULL){
    temp->next=head1;
}
else temp->next=head2;
return leftpoint;
}


Node* multiply(Node* leftpoint,Node* rightpoint){
Node* head1=leftpoint->next;
Node* head2=rightpoint->next;
Node* temp=leftpoint;
while(head1!=NULL&&head2!=NULL){
    if(head1->intexpn<head2->intexpn){
        temp->next=head1;
        head1=head1->next;
        temp=temp->next;
    }
    else if(head2->intexpn<head1->intexpn){
        temp->next=head2;
        head2=head2->next;
        temp=temp->next;
    }
    else{
        head1->floatcoef=head1->floatcoef*head2->floatcoef;//
        temp->next=head1;
        temp=temp->next;
        head1=head1->next;
        head2=head2->next;
    }
}
if(head1!=NULL){
    temp->next=head1;
}
else temp->next=head2;
return leftpoint;
}



void print(Node* h){
Node* cur=h->next;
printf("%dx^%d",cur->floatcoef,cur->intexpn);
cur=cur->next;
while(cur){
        if(cur->floatcoef==0);
    else{
        printf("+%dx^%d\n",cur->floatcoef,cur->intexpn);
        }
cur=cur->next;
}
}
int main()
{
    printf("输入序数,输入从小到大的指数,输入00时结束");
    Node* a=creat();
     printf("当前多项式:");
    print(a);
    printf("输入序数,输入从小到大的指数,输入00时结束");
    Node* b=creat();
    printf("当前多项式:");
    print(b);

    printf("\n");
    printf("两个多项式相加结果:");
    print(addpoly(a,b));


    printf("\n");
    printf("两个多项式相乘结果:");
    printf(multiply(a,b));
    return 0;
}

引用 皆我百晓生 小程序回复内容作答:
乘法显示输出类型不匹配是因为在print函数中,乘法操作后的结果是整数类型,但在printf函数中使用了%d来输出。应该将%d改为%f以输出浮点数类型。

修改后的代码如下:

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

typedef struct Node {
    float floatcoef; //系数
    int intexpn; //指数
    struct Node* next;
} Node;


Node* creat() {
    Node* head = (Node*)malloc(sizeof(Node));
    Node* tail = head;
    float coef; //系数
    int expn; //指数
    scanf("%f %d", &coef, &expn);
    while (coef != 0) {
        Node* node = (Node*)malloc(sizeof(Node));
        if (node != NULL) {
            node->floatcoef = coef;
            node->intexpn = expn;
        }
        node->next = NULL;
        tail->next = node;
        tail = node;
        scanf("%f %d", &coef, &expn);
    }
    return head;
}


Node* addpoly(Node* leftpoint, Node* rightpoint) {
    Node* head1 = leftpoint->next;
    Node* head2 = rightpoint->next;
    Node* temp = leftpoint;
    while (head1 != NULL && head2 != NULL) {
        if (head1->intexpn < head2->intexpn) {
            temp->next = head1;
            head1 = head1->next;
            temp = temp->next;
        }
        else if (head2->intexpn < head1->intexpn) {
            temp->next = head2;
            head2 = head2->next;
            temp = temp->next;
        }
        else {
            head1->floatcoef += head2->floatcoef;
            temp->next = head1;
            temp = temp->next;
            head1 = head1->next;
            head2 = head2->next;
        }
    }
    if (head1 != NULL) {
        temp->next = head1;
    }
    else temp->next = head2;
    return leftpoint;
}


Node* multiply(Node* leftpoint, Node* rightpoint) {
    Node* head1 = leftpoint->next;
    Node* head2 = rightpoint->next;
    Node* temp = leftpoint;
    while (head1 != NULL && head2 != NULL) {
        if (head1->intexpn < head2->intexpn) {
            temp->next = head1;
            head1 = head1->next;
            temp = temp->next;
        }
        else if (head2->intexpn < head1->intexpn) {
            temp->next = head2;
            head2 = head2->next;
            temp = temp->next;
        }
        else {
            head1->floatcoef = head1->floatcoef * head2->floatcoef;
            temp->next = head1;
            temp = temp->next;
            head1 = head1->next;
            head2 = head2->next;
        }
    }
    if (head1 != NULL) {
        temp->next = head1;
    }
    else temp->next = head2;
    return leftpoint;
}


void print(Node* h) {
    Node* cur = h->next;
    printf("%fx^%d", cur->floatcoef, cur->intexpn);
    cur = cur->next;
    while (cur) {
        if (cur->floatcoef != 0) {
            printf("+%fx^%d\n", cur->floatcoef, cur->intexpn);
        }
        cur = cur->next;
    }
}


int main() {
    printf("输入系数和指数,输入0 0时结束\n");
    Node* a = creat();
    printf("当前多项式:");
    print(a);
    printf("输入系数和指数,输入0 0时结束\n");
    Node* b = creat();
    printf("当前多项式:");
    print(b);

    printf("\n");
    printf("两个多项式相加结果:\n");
    print(addpoly(a, b));

    printf("\n");
    printf("两个多项式相乘结果:\n");
    print(multiply(a, b));

    return 0;
}

【以下回答由 GPT 生成】

优化后的问题:

问题标题: 如何解决乘法显示输出类型不匹配的问题?

问题内容: 我在C语言中编写了一个乘法函数,用于将两个一元多项式相乘。但是当我尝试进行乘法运算时,显示输出的类型不匹配的错误。以下是我的代码,请问应该如何修改?

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

// 一元多项式相加
typedef struct Node{
    int floatcoef; // 系数
    int intexpn;  // 指数
    struct Node* next;
} Node;

Node* creat(){
    Node* head = (Node*)malloc(sizeof(Node));
    Node* tail = head;
    int coef; // 系数
    int expn; // 指数
    scanf("%d %d", &coef, &expn);

    while(coef != 0){
        Node* node = (Node*)malloc(sizeof(Node));

        if(node != NULL){
            node->floatcoef = coef;
            node->intexpn = expn;
        }

        node->next = NULL;
        tail->next = node;
        tail = node;

        scanf("%d %d",&coef,&expn);
    }

    return head;
}

Node* addpoly(Node* leftpoint, Node* rightpoint){
    Node* head1 = leftpoint->next;
    Node* head2 = rightpoint->next;
    Node* temp = leftpoint;

    while(head1 != NULL && head2 != NULL){
        if(head1->intexpn < head2->intexpn){
            temp->next = head1;
            head1 = head1->next;
            temp = temp->next;
        }
        else if(head2->intexpn < head1->intexpn){
            temp->next = head2;
            head2 = head2->next;
            temp = temp->next;
        }
        else{
            head1->floatcoef += head2->floatcoef;
            temp->next = head1;
            temp = temp->next;
            head1 = head1->next;
            head2 = head2->next;
        }
    }

    if(head1 != NULL){
        temp->next = head1;
    }
    else{
        temp->next = head2;
    }

    return leftpoint;
}

Node* multiply(Node* leftpoint, Node* rightpoint){
    // 在这里实现你的代码
}

int main(){
    Node* left = creat();
    Node* right = creat();
    Node* result = multiply(left, right);

    // 输出乘法结果
    Node* temp = result->next;
    while(temp != NULL){
        printf("%dx^%d ", temp->floatcoef, temp->intexpn);
        temp = temp->next;
    }

    return 0;
}

感谢您的帮助!

解决方案通过补充完善multiply函数,并在main函数中输出乘法的结果。

以下是补充的代码和解决方案:

Node* multiply(Node* leftpoint, Node* rightpoint){
    Node* left = leftpoint->next;
    Node* right = rightpoint->next;
    Node* head = (Node*)malloc(sizeof(Node));
    head->next = NULL;

    // 遍历左边的多项式
    while(left){
        Node* temp = right;
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->next = NULL;
        Node* tail = newNode;

        // 逐个将左边的项与右边的项相乘
        while(temp){
            Node* node = (Node*)malloc(sizeof(Node));
            node->floatcoef = left->floatcoef * temp->floatcoef;
            node->intexpn = left->intexpn + temp->intexpn;
            node->next = NULL;
            tail->next = node;
            tail = tail->next;
            temp = temp->next;
        }

        // 将每次相乘的结果与之前结果相加
        head = addpoly(head, newNode);
        left = left->next;
    }

    return head;
}


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^