1.实验题目:
线性表的操作和应用(顺序存储)。用顺序存储实现一元多项式,并进行加、减、乘运算。
2.实验步骤:
(1)一元多项式结构体创建 (2)初始化
(3)一元多项式赋值 (4)打印一元多项式
(5)加法运算 (6)减法运算
(7)乘法运算文章来源:https://www.toymoban.com/news/detail-789094.html
3.代码实践:
全部代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
//用顺序存储实现一元多项式,并进行加,减,乘运算
// 一个系数 ,一个指数 --- 指数用数组元素下标代替
typedef struct
{
int elem[MAX]; //静态数组分配
int length;
}Sqlist, * Linklist;
//检查初始化
void Initlist(Linklist L1L2)
{
if (L1L2)
{
printf("初始化成功\n");
L1L2->length = 0;
}
else
{
printf("初始化失败\n");
}
}
//输入一元多项式系数 + 实际确定length值 (直接给length赋值也可以,就不用多次一举)
Creatlist(Linklist L1L2, int len12)
{
for (int n = 0; n < len12; n++)
{
printf("请输入第%d位多项式 X^%d 的系数: ", n + 1, n);
int m;
scanf("%d", &m);
L1L2->elem[n] = m;
L1L2->length += 1;
}
printf("\n");
}
//打印一元多项式
void print(Linklist L, int len)
{
for (int n = 0; n < len; n++)
{
printf("%dX^%d ", L->elem[n], n);
if (n != len - 1)
printf("+ ");
}
printf("\n");
}
//加法运算
void AddPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{ //判断L1,L2 数组下标是否相同,相同的系数相加
printf("一元多项式的加法运算:\n");
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] + L2->elem[n];
}
printf("L1+L2= L3: F(X)= ");
print(L3, L3->length);
}
//减法运算
SubPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{ //判断L1,L2数组元素下标是否相同,相同的则系数相加
printf("一元多项式的减法运算:\n");
//L1 - L2
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] - L2->elem[n];
}
printf("L1-L2= L3: F(X)= ");
print(L3, L3->length);
//L2 - L1
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L2->elem[n] - L1->elem[n];
}
printf("L2-L1= L3: F(X)= ");
print(L3, L3->length);
}
//乘法运算
MultiplyPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{
printf("一元多项式的乘法运算:\n");
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] * L2->elem[n];
}
printf("L1*L2= L3: F(X)= ");
print(L3, L3->length);
}
int main()
{
//创建顺序表L1,L2,L3
Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist)); //L1,L2,L3 是 指针 ,没初始化不好用
Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist)); // L1,L2,L3 的初始化 并不代表 数组 的初始化
Linklist L3 = (Sqlist*)malloc(sizeof(Sqlist));
//检查初始化是否成功
printf("L1 ");
Initlist(L1);
printf("L2 ");
Initlist(L2);
printf("L3 ");
Initlist(L3);
//设定结构体的 length 值
printf("请设定L1 的length的值:");
int len1;
scanf("%d", &len1);
printf("请设定L2 的length的值:");
int len2;
scanf("%d", &len2);
if (len1 >= len2)
L3->length = len1;
else
L3->length = len2;
//数组赋值 + 实际确定length值
printf("请给 L1 输入一元多项式的值\n");
Creatlist(L1, len1);
printf("请给 L2 输入一元多项式的值\n");
Creatlist(L2, len2);
//打印L1,L2的内容
printf("一元多项式L1: \n F(X)= ");
print(L1, len1);
printf("一元多项式L2: \n F(X)= ");
print(L2, len2);
//合成版块
int input =1;
printf("\n***** 输入0:退出程序 *****\n");
printf("***** 输入1:加法运算 *****\n");
printf("***** 输入2:减法运算 *****\n");
printf("***** 输入3:乘法运算 *****\n");
while (input)
{
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出程序\n");
break;
case 1: //加法运算
AddPolyn(L1, L2, L3, L3->length);
break;
case 2: //减法运算
SubPolyn(L1, L2, L3, L3->length);
break;
case 3: //乘法运算
MultiplyPolyn(L1, L2, L3, L3->length);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
}
(1)主函数 模块
int main()
{
//创建顺序表L1,L2,L3
Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist)); //L1,L2,L3 是 指针 ,没初始化不好用
Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist)); // L1,L2,L3 的初始化 并不代表 数组 的初始化
Linklist L3 = (Sqlist*)malloc(sizeof(Sqlist));
//检查初始化是否成功
printf("L1 ");
Initlist(L1);
printf("L2 ");
Initlist(L2);
printf("L3 ");
Initlist(L3);
//设定结构体的 length 值
printf("请设定L1 的length的值:");
int len1;
scanf("%d", &len1);
printf("请设定L2 的length的值:");
int len2;
scanf("%d", &len2);
if (len1 >= len2)
L3->length = len1;
else
L3->length = len2;
//数组赋值 + 实际确定length值
printf("请给 L1 输入一元多项式的值\n");
Creatlist(L1, len1);
printf("请给 L2 输入一元多项式的值\n");
Creatlist(L2, len2);
//打印L1,L2的内容
printf("一元多项式L1: \n F(X)= ");
print(L1, len1);
printf("一元多项式L2: \n F(X)= ");
print(L2, len2);
//合成版块
int input =1;
printf("\n***** 输入0:退出程序 *****\n");
printf("***** 输入1:加法运算 *****\n");
printf("***** 输入2:减法运算 *****\n");
printf("***** 输入3:乘法运算 *****\n");
while (input)
{
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出程序\n");
break;
case 1: //加法运算
AddPolyn(L1, L2, L3, L3->length);
break;
case 2: //减法运算
SubPolyn(L1, L2, L3, L3->length);
break;
case 3: //乘法运算
MultiplyPolyn(L1, L2, L3, L3->length);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
}
(2)一元多项式结构体创建版块
// 一个系数 ,一个指数 --- 指数用数组元素下标代替
typedef struct
{
int elem[MAX]; //静态数组分配
int length;
}Sqlist, * Linklist;
(3)检查初始化版块
//检查初始化
void Initlist(Linklist L1L2)
{
if (L1L2)
{
printf("初始化成功\n");
L1L2->length = 0;
}
else
{
printf("初始化失败\n");
}
}
(4)一元多项式赋值 模块
//输入一元多项式系数 + 实际确定length值
Creatlist(Linklist L1L2, int len12)
{
for (int n = 0; n < len12; n++)
{
printf("请输入第%d位多项式 X^%d 的系数: ", n + 1, n);
int m;
scanf("%d", &m);
L1L2->elem[n] = m;
L1L2->length += 1;
}
printf("\n");
}
(5)一元多项式打印 模块
//打印一元多项式
void print(Linklist L, int len)
{
for (int n = 0; n < len; n++)
{
printf("%dX^%d ", L->elem[n], n);
if (n != len - 1)
printf("+ ");
}
printf("\n");
}
(6)加法运算 版块
//加法运算
void AddPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{ //判断L1,L2 数组下标是否相同,相同的系数相加
printf("一元多项式的加法运算:\n");
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] + L2->elem[n];
}
printf("L1+L2= L3: F(X)= ");
print(L3, L3->length);
}
(7)减法运算 模块
//减法运算
SubPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{ //判断L1,L2数组元素下标是否相同,相同的则系数相加
printf("一元多项式的减法运算:\n");
//L1 - L2
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] - L2->elem[n];
}
printf("L1-L2= L3: F(X)= ");
print(L3, L3->length);
//L2 - L1
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L2->elem[n] - L1->elem[n];
}
printf("L2-L1= L3: F(X)= ");
print(L3, L3->length);
}
(8)乘法运算 模块
//乘法运算
MultiplyPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{
printf("一元多项式的乘法运算:\n");
for (int n = 0; n < L3->length; n++)
{
L3->elem[n] = L1->elem[n] * L2->elem[n];
}
printf("L1*L2= L3: F(X)= ");
print(L3, L3->length);
}
4.代码运行结果
文章来源地址https://www.toymoban.com/news/detail-789094.html
到了这里,关于数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!