1.實驗題目:
線性表的操作和應用(順序存儲)。用順序存儲實現(xiàn)一元多項式,并進行加、減、乘運算。
2.實驗步驟:
(1)一元多項式結構體創(chuàng)建? (2)初始化
(3)一元多項式賦值? ? ? ? ? ? ?(4)打印一元多項式
(5)加法運算? ? ? ? ? ? ? ? ? ? ? ? (6)減法運算
(7)乘法運算文章來源:http://www.zghlxwxcb.cn/news/detail-789094.html
3.代碼實踐:
? ?全部代碼:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
//用順序存儲實現(xiàn)一元多項式,并進行加,減,乘運算
// 一個系數(shù) ,一個指數(shù) --- 指數(shù)用數(shù)組元素下標代替
typedef struct
{
int elem[MAX]; //靜態(tài)數(shù)組分配
int length;
}Sqlist, * Linklist;
//檢查初始化
void Initlist(Linklist L1L2)
{
if (L1L2)
{
printf("初始化成功\n");
L1L2->length = 0;
}
else
{
printf("初始化失敗\n");
}
}
//輸入一元多項式系數(shù) + 實際確定length值 (直接給length賦值也可以,就不用多次一舉)
Creatlist(Linklist L1L2, int len12)
{
for (int n = 0; n < len12; n++)
{
printf("請輸入第%d位多項式 X^%d 的系數(shù): ", 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 數(shù)組下標是否相同,相同的系數(shù)相加
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數(shù)組元素下標是否相同,相同的則系數(shù)相加
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()
{
//創(chuàng)建順序表L1,L2,L3
Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist)); //L1,L2,L3 是 指針 ,沒初始化不好用
Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist)); // L1,L2,L3 的初始化 并不代表 數(shù)組 的初始化
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;
//數(shù)組賦值 + 實際確定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)主函數(shù) 模塊
int main()
{
//創(chuàng)建順序表L1,L2,L3
Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist)); //L1,L2,L3 是 指針 ,沒初始化不好用
Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist)); // L1,L2,L3 的初始化 并不代表 數(shù)組 的初始化
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;
//數(shù)組賦值 + 實際確定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)一元多項式結構體創(chuàng)建版塊
// 一個系數(shù) ,一個指數(shù) --- 指數(shù)用數(shù)組元素下標代替
typedef struct
{
int elem[MAX]; //靜態(tài)數(shù)組分配
int length;
}Sqlist, * Linklist;
(3)檢查初始化版塊
//檢查初始化
void Initlist(Linklist L1L2)
{
if (L1L2)
{
printf("初始化成功\n");
L1L2->length = 0;
}
else
{
printf("初始化失敗\n");
}
}
(4)一元多項式賦值 模塊
//輸入一元多項式系數(shù) + 實際確定length值
Creatlist(Linklist L1L2, int len12)
{
for (int n = 0; n < len12; n++)
{
printf("請輸入第%d位多項式 X^%d 的系數(shù): ", 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 數(shù)組下標是否相同,相同的系數(shù)相加
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數(shù)組元素下標是否相同,相同的則系數(shù)相加
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.代碼運行結果
文章來源地址http://www.zghlxwxcb.cn/news/detail-789094.html
到了這里,關于數(shù)據(jù)結構中: 一元多項式的運算(相加,相減,相乘)------用C語言 / C++來實現(xiàn)。 數(shù)據(jù)結構線性表的操作和應用(順序存儲)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!