#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;
}
【相关推荐】