所以我的代码出了问题。 唯一剩下的就是我的多项式的程度打印输出。 有人能告诉我应该修改什么来修复它吗? (注意*代码必须使用这些函数,我不能使用指针使其工作)
#include <stdio.h>
// Dva polinoma,sabrati,izmnoziti i ispisati
typedef struct polinom
{
int koef[100];
int n;
}POLINOM;
POLINOM citaj();
POLINOM saberi(POLINOM, POLINOM);
POLINOM pomnozi(POLINOM, POLINOM);
void ispisi(POLINOM);
int main()
{
POLINOM pol1, pol2, zbir, przvd;
printf("1. Polinom:\n");
pol1 = citaj();
printf("\n2. Polinom:\n");
pol2 = citaj();
zbir = saberi(pol1, pol2);
printf("\n Zbir:\n");
ispisi(zbir);
przvd = pomnozi(pol1, pol2);
printf("\n Proizvod:\n");
ispisi(przvd);
getch();
}
POLINOM citaj()
{
POLINOM pol;
int i;
do
{
printf("Najveci stepen polinoma: "), scanf("%d", &pol.n);
} while (pol.n < 1 || pol.n>100);
for (i = 0; i < 100; i++)
{
if (i <= pol.n)
{
printf("(X%d)=", i), scanf("%d", &pol.koef[i]);
}
else
pol.koef[i] = 0;
}
return pol;
}
POLINOM saberi(POLINOM pol1, POLINOM pol2)
{
POLINOM zbir;
int i;
if (pol1.n > pol2.n)
zbir.n = pol1.n;
else
zbir.n = pol2.n;
for (i = 0; i < 100; i++)
zbir.koef[i] = pol1.koef[i] + pol2.koef[i];
return zbir;
}
POLINOM pomnozi(POLINOM pol1, POLINOM pol2)
{
POLINOM przvd;
int i, j;
if (pol1.n > pol2.n)
{
przvd.n = pol1.n;
for (i = 0; i <= przvd.n; i++)
for (j = 0; j <= przvd.n; j++)
przvd.koef[i] = pol1.koef[i] * pol2.koef[j];
}
else
{
przvd.n = pol2.n;
for (i = 0; i <= przvd.n; i++)
for (j = 0; j <= przvd.n; j++)
przvd.koef[i + j] += pol1.koef[i] * pol2.koef[j];
}
return przvd;
}
void ispisi(POLINOM a)
{
int i;
for (i = 0; i <= a.n; i++)
printf("(X%d)= %d ", i, a.koef[i]);
}
以下是我的代码运行示例:
$ ./a.out
1. Polinom:
Najveci stepen polinoma: ^C
sundev19:/home/jgalloway12 $ ./a.out
1. Polinom:
Najveci stepen polinoma: 5
(X0)=4
(X1)=3
(X2)=2
(X3)=1
(X4)=5
(X5)=6
2. Polinom:
Najveci stepen polinoma: 5
(X0)=1
(X1)=2
(X2)=3
(X3)=4
(X4)=5
(X5)=6
Zbir:
(X0)= 5 (X1)= 5 (X2)= 5 (X3)= 5 (X4)= 10 (X5)= 12
Proizvod:
(X0)= -4199088 (X1)= 16 (X2)= 25 (X3)= 35 (X4)= 50 (X5)= 76 $
修正了如果有人需要它,这是工作代码:
#include <stdio.h>
// Dva polinoma,sabrati,izmnoziti i ispisati
typedef struct polinom
{
int koef[100];
int n;
}POLINOM;
POLINOM citaj();
POLINOM saberi(POLINOM, POLINOM);
POLINOM pomnozi(POLINOM, POLINOM);
void ispisi(POLINOM);
int main()
{
POLINOM pol1, pol2, zbir, przvd;
printf("1. Polinom:\n");
pol1 = citaj();
printf("\n2. Polinom:\n");
pol2 = citaj();
zbir = saberi(pol1, pol2);
printf("\n Zbir:\n");
ispisi(zbir);
przvd = pomnozi(pol1, pol2);
printf("\n Proizvod:\n");
ispisi(przvd);
getch();
}
POLINOM citaj()
{
POLINOM pol;
int i;
do
{
printf("Najveci stepen polinoma: "), scanf("%d", &pol.n);
} while (pol.n < 1 || pol.n>100);
for (i = 0; i < 100; i++)
{
if (i <= pol.n)
{
printf("(X%d)=", i), scanf("%d", &pol.koef[i]);
}
else
pol.koef[i] = 0;
}
return pol;
}
POLINOM saberi(POLINOM pol1, POLINOM pol2)
{
POLINOM zbir;
int i;
if (pol1.n > pol2.n)
zbir.n = pol1.n;
else
zbir.n = pol2.n;
for (i = 0; i < 100; i++)
zbir.koef[i] = pol1.koef[i] + pol2.koef[i];
return zbir;
}
POLINOM pomnozi(POLINOM pol1, POLINOM pol2)
{
POLINOM przvd;
int i, j,k;
przvd.n = pol1.n + pol2.n ;
for (k = 0; k <= przvd.n; k++)
przvd.koef[k] = 0;
for (i = 0; i <= pol1.n; i++)
for (j = 0; j <= pol2.n; j++)
przvd.koef[i + j] += pol1.koef[i] * pol2.koef[j];
return przvd;
}
void ispisi(POLINOM a)
{
int i;
for (i = 0; i <= a.n; i++)
if(a.koef[i]!=0)
printf("(X%d)= %d ", i, a.koef[i]);
}
答案 0 :(得分:1)
此代码存在一些问题。
przvd
系数未初始化,因此+=
会添加初始垃圾。
两个多项式都被循环到更高的多项式的次数,这意味着可以访问下多项式的不存在的系数。
看起来你期望系数被神奇地初始化为0.事实并非如此。在C中,自动变量未初始化;你必须手动完成。
此外,pomnozi
的两个分支必须使用相同的(卷积)公式。如编码,第一个分支在数学上是错误的。