一元多项式怎么存入计算机?
将多项式对应的x0,x1,x2,x3......xn的系数存储在数组下标为0,1,2,3...n的位置中,
数组的数据就是系数,下标的值就是指数
系数为0的项不能省略
1.相乘的核心程序
for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
c[i + j] = a[i] * b[j] + c[i + j];
}
样例:输入两个一元多项式,计算它们的乘积并输出
2.多项式输入函数
这个 C 语言函数的主要目的是从用户那里获取多项式的系数并将其存储到一个整数数组中。以下是函数的详细解释:
void input(int y[], int m) // 多项式输入函数
{
for (int i = 0; i < m; i++)
{
scanf("%d", &y[i]); // 使用 scanf 从用户输入读取整数,并将其存储到数组中
}
}
void:函数没有返回值。
input:函数名。
(int y[], int m):函数接受两个参数,一个是整数数组 `y`,另一个是整数 `m`。`y` 用于存储多项式的系数,而 `m` 表示多项式的阶数或数组的大小。
函数通过 `for` 循环遍历数组的每个元素,从 `i = 0` 到 `i = m - 1`。在每次循环中,使用 `scanf` 函数从标准输入读取一个整数,并将其存储到数组 `y` 的相应位置(即 `y[i]`)
这个函数适用于在程序运行时动态地从用户获取多项式的系数。例如,如果你调用 `input(y, 3)`,并依次输入 2、5 和 7,那么数组 `y` 将包含这个多项式的系数,即 [2, 5, 7]
3.多项式输出函数
continue语句的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环
注意!continue语句并没有使整个循环终止
在一条if条件判断中,可以有无数条else if,但是只能有一个else
void output(int a[], int x)
{
int sum = 0;
for (int i = 0; i < x; i++)
{
if (a[i] == 0) // 某次幂的项不存在,直接跳过这次循环
{
continue;
}
else if (i == 0) // 0次幂的系数直接输出
{
printf("%d", a[i]);
}
else if (i == 1) // 1次幂的情况不输出“^1”(1次方)
{
if (a[i] == 1) // 系数为1不需要写1,只需要写+
{
printf("+X");
}
else if (a[i] == -1) // 系数为-1时不需要写-1,只需要写-
{
printf("-X");
}
else if (a[i] > 0) // 系数大于0
{
printf("+%dX", a[i]);
}
else if (a[i] < 0) // 系数小于0
{
printf("-%dX", -a[i]); // 注意取相反数
}
}
else
{
if (a[i] == 1) // 系数为1的时候不需要写1,只需要写+
{
printf("+X^%d", i);
}
else if (a[i] == -1) // 系数为-1的时候不需要写1,只需要写-
{
printf("-X^%d", i);
}
else if (a[i] > 0) // 系数大于0
{
printf("+%dX^%d", a[i], i);
}
else if (a[i] < 0) // 系数小于0
{
printf("-%dX^%d", -a[i], i); // 注意取相反数
}
}
}
}
4.多项式相乘函数
void multiply(int a[], int m, int b[], int n, int c[])
{
for (int i = 0; i < m + n; i++)
{
c[i] = 0;
}
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
c[j + k] = a[j] * b[k] + c[j + k];
}
}
}
整合
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
#define N 100 //这里没有;符号
//多项式多项式输入
void input(int y[], int n)
{
for (int i = 0; i < n; i++)
{
(void)scanf("%d", &y[i]);
}
}
//多项式输出函数
void output(int y[], int x)
{
for (int i = 0; i < x; i++)
{
if (y[i] == 0)
{
continue;
}
else if (i == 0)
{
printf("%d", y[i]);
}
else if (i == 1)
{
if (y[i] ==1)
{
printf("+X");
}
else if (y[i] == -1)
{
printf("-X");
}
else if (y[i] > 0)
{
printf("+%dX", y[i]);
}
else if (y[i] < 0)
{
printf("%dX", y[i]);
}
}
else
{
if (y[i] == 1)
{
printf("+X^%d", i);
}
else if (y[i] == -1)
{
printf("-X^%d", i);
}
else if (y[i] > 0)
{
printf("+%dX^%d", y[i], i);
}
else if (y[i] < 0)
{
printf("%dX^%d", y[i], i);
}
}
}
}
void xiangcheng(int a[], int m, int b[], int n, int c[])
{
for (int i = 0; i < m + n; i++)
{
c[i] = 0;
}
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
c[m + n] = a[m] * b[n] + c[m + n];
}
}
}
int main()
{
int m, n, max, t, wi;
int o = 1;
int P[N], Q[N], R[N];
int index;
for (int i = 0; i < N; i++)
{
P[i] = 0;
Q[i] = 0;
}
printf("请输入一元多项式P(X)的项数m: ");
scanf("%d", &m);
printf("请输入P(X)的系数,按指数由小到大输入:");
input(P, m);
printf("您输入的多项式P(X)=");
output(P, m);
printf("\n\n请输入一元多项式P(X)的项数n:");
scanf("%d", &n);
printf("请输入P(X)的系数,按指数由小到大输入:");
input(Q, n);
printf("您输入的多项式P(X)=");
output(Q, n);
xiangcheng(P, m, Q, n, R);
printf("\n\n结果");
output(R, m + n);
return 0;
}