資源簡介
這是使用C語言寫成。實現了一元多項式的加減乘的運算。我們使用計算機處理的對象之間通常存在著的是一種最簡單的線性關系,這類數學模型可稱為線性的數據結構。而數據存儲結構有兩種:順序存儲結構和鏈式存儲結構。線性表是最常用且最簡單的一種數據結構。所以我們做的是———–一元多項式的表示及相加,其過程其實是對線性標的操作。實驗結構和鏈接存儲結構上的運算以及熟練運用掌握的線性表的操作,實現一元n次多項式的目的是掌握線性表的基本操作,插入、刪除、查找,以及線性表合并等運算在順序存儲的加法運算。學習實現一元n次多項式的加法是符號多項式的操作,是表處理的典型用例,需要注意的是:順序存儲結構指的是用數組方法,使用數組方法實現時,在插入和刪除的方面,數組不如鏈表靈活,方法復雜,刪除其中一個需要將其后的數組元素改變位置,使其數組保持原有的順序結構,在查找方面較鏈表簡單,只需要知道其下標就可以知道。鏈接存儲結構指的是用鏈表方法,值得注意的是,刪除和插入較為靈活,不需要變動大多數元素,但是查找過程相對于數組這種順序存儲結構來說較為復雜,耗時巨大。
代碼片段和文件信息
#include
#include
#include?
#define?LEN?sizeof(Poly)
typedef?struct?term{
float?coef; //系數?
int?expn; //指數?
struct?term?*next;
}Poly*link;
int?LocateElem(link?p?link?s?link?&q);?
void?CreatePolyn(link?&pint?m); //創建多項式?
void?PrintPolyn(link?p); //打印多項式(表示)
int?cmp(link?a?link?b);
link?AddPolyn(link?pa?link?pb); //多項式相加?
link?SubPolyn(link?pa?link?pb); //多項式相減?
link?Reverse(link?p); //逆置多項式?
link?MultiplyPolyn(link?Alink?B); //多項式相乘?
void?Calculate(link?pfloat?x); //多項式求值?
int?main()
{
link?P1P2P3; //多項式?
int?L1L2; //多項式長度?
printf(“????????????????????????-------------------------------------------------------------------\n“);
printf(“????????????????????????|==================???????一元多項式的運算???????=================|\n“);
printf(“????????????????????????|==================??????????1.相加(+)?????????=================|\n“);
printf(“????????????????????????|==================??????????2.相減(-)?????????=================|\n“);
printf(“????????????????????????|==================??????????3.相乘(*)?????????=================|\n“);
printf(“????????????????????????-------------------------------------------------------------------\n\n“);
printf(“請輸入第一個多項式的項數:“);
scanf(“%d“&L1);
CreatePolyn(P1L1);
printf(“第一個多項式為:“);
printf(“P1(X)=“);
PrintPolyn(P1);
printf(“請輸入第二個多項式的項數:“);
scanf(“%d“&L2);
CreatePolyn(P2L2);
printf(“第二個多項式為:“);
printf(“P2(X)=“);
PrintPolyn(P2);?
printf(“\n“);
printf(“請輸入要選擇的運算(+??-??*):?“);
char?ch1;
getchar(); //清除掉緩沖區的回車符?
scanf(“%c“&ch1);
getchar(); //清除掉緩沖區的回車符
? switch(ch1){
? case?‘+‘:{
? printf(“兩個一元多項式相加:???“);
? printf(“P1(X)+P2(X)=“);
? P3=AddPolyn(P1?P2);
PrintPolyn(P3);
? }break;
? case?‘-‘:{
? printf(“兩個一元多項式相減:???“);
? printf(“P1(X)-P2(X)=“);
? P3=SubPolyn(P1?P2);
PrintPolyn(P3);
? }break;
? case?‘*‘:{
? printf(“兩個一元多項式相乘:???“);
? printf(“P1(X)*P2(X)=“);
? P3=MultiplyPolyn(P1?P2);
PrintPolyn(P3);
? }break;
? default:printf(“您輸入了錯誤指令?%c?!“ch1);?
?}
char?ch2;
printf(“\n是否代入X進行求值?(Y/N):?“);
ch2=getchar(); //清除掉緩沖區的回車符??
getchar();
switch(ch2){
case?‘Y‘:{
float?x;
printf(“\n請輸入多項式中X的值:“);
scanf(“%f“&x);?
Calculate(P3x);
break;
}
case?‘N‘:break;
default:printf(“你輸入了錯誤指令?%c?!“ch2);?
}?
return?0;
}
int?LocateElem(link?p?link?s?link?&q){
/*遍歷鏈表p,每一個結點與s比較指數,
若相同q指向相同指數項的結點,返回1,
若不相同,根據s所指指數大小在鏈表p中的位置來確定q的指向結點,返回0?
*/?
link?p1?=?p->next;
link?p2?=?p;
while(p1){
if(s->expn?>?p1->expn){
p1?=?p1->next;
p2?=?p2->next;
}else?if(s->expn?==?p1->expn){
q?=?p1;?
return?1;
}else{
q?=?p2;
return?0;
}
}
if(!p1){
q?=?p2;
return?0;
}
}
void?CreatePolyn(link?&pint?m)?
/*創建帶頭結點的鏈表(多項式)?
且無論按什么順序輸入,或是有相同指數項
最終在多項式中都是升冪順序!?
*/
{
link?sq;
int?i;
p=(link)malloc(LEN);
p->next=NULL;
for(i=0;i {
s=(link)malloc(LEN)
- 上一篇:VC++簡單多人聊天室源碼
- 下一篇:數據結構第三章作業答案參考C語言
評論
共有 條評論