一元稀疏多項式計算器設(shè)計程序代碼
#include
#include
#include
#include
#define maxlen 10
#define large 999
typedef struct Linklistomial{
float coef;
int expn;
struct Linklistomial *next;
}Linklistomial,*Linklist;
void Insert(Linklist p,Linklist h){
if(p->coef==0) free(p);//系數(shù)為0的話釋放結(jié)點
else
{
Linklist q1,q2;
q1=h;
q2=h->next;
while(q2&&p->expnexpn) { //查找插入位置
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn) {//將指數(shù)相同相合并
q2->coef+=p->coef;
free(p);
if(!q2->coef) {//系數(shù)為0的話釋放結(jié)點
q1->next=q2->next;
free(q2);
}
}
else {//指數(shù)為新時將結(jié)點插入
p->next=q2;
q1->next=p; }
}
}
Linklist CreateLinklist(Linklist head,int m){
//建立一個頭指針為head、項數(shù)為m的一元多項式
int i;
Linklist p;
p=head=(Linklist)malloc(sizeof(struct Linklistomial));
head->next=NULL;
for(i=0;icoef,&p->expn);
Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點
}
return head;
}
void DestroyLinklist(Linklist p){ //銷毀多項式p
Linklist q1,q2;
q1=p->next;q2=q1->next;
while(q1->next) {
free(q1);
q1=q2;
q2=q2->next; }
}
void PrintLinklist(Linklist P){
Linklist q=P->next;
int flag=1; //項數(shù)計數(shù)器
if(!q){ //若多項式為空,輸出0
putchar('0');
printf("\n");
return;
}
while(q)
{
if(q->coef>0&&flag!=1) putchar('+'); //系數(shù)大于0且不是第一項
if(q->coef!=1&&q->coef!=-1) {//系數(shù)非1或-1的普通情況
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else {
if(q->coef==1)
{
if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
}
int compare(Linklist a,Linklist b){
if(a&&b)
{if(!b||a->expn>b->expn) return 1;
else if(!a||a->expnexpn) return -1;
else return 0;
}
else if(!a&&b) return -1;//a多項式已空,但b多項式非空
else return 1;//b多項式已空,但a多項式非空
}
Linklist AddLinklist(Linklist pa,Linklist pb){//求解并建立多項式a+b,返回其頭指針
Linklist qa=pa->next;
Linklist qb=pb->next;
Linklist headc,hc,qc;
hc=(Linklist)malloc(sizeof(struct Linklistomial));//建立頭結(jié)點
hc->next=NULL;
headc=hc;
while(qa||qb)
{
qc=(Linklist)malloc(sizeof(struct Linklistomial));
switch(compare(qa,qb)){
case 1:{
qc->coef=qa->coef;
qc->expn=qa->expn;
qa=qa->next;
break;}
case 0: {
qc->coef=qa->coef+qb->coef;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
break;
}
case -1: {
qc->coef=qb->coef;
qc->expn=qb->expn;
qb=qb->next;
break;}
}
if(qc->coef!=0)
{
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
else free(qc);//當(dāng)相加系數(shù)為0時,釋放該結(jié)點
}
return headc;
}
int ValueLinklist(Linklist head,int x){
//輸入x值,計算并返回多項式的值
Linklist p;
int i;
int sum=0,t;
for(p=head->next;p;p=p->next)
{
t=1;
for(i=p->expn;i!=0;)
{
if(icoef*t;
}
return sum;
}
void xiang()
{int m,n,a,x;
char flag;
Linklist pa=0,pb=0,pc;
printf(" 歡迎使用多項式操作程序\n\n");
printf("請輸入a的項數(shù):");
scanf("%d",&m);
pa=CreateLinklist(pa,m);//建立多項式a
printf("請輸入b的項數(shù):");
scanf("%d",&n);
pb=CreateLinklist(pb,n);//建立多項式
//輸出菜單
printf(" \n");
}
int main(){
int choice;
menu();
printf(" please make your choice:");
scanf("%d",&choice);
while(choice!=3)
{
switch(choice){
case 1:system("cls");xiang();getch();break;
case 2:system("cls");shu();getch();getch();break;
default:printf(" please chooose the right choice!");getch();getch();break;
}
system("cls");
menu();
printf("please make your choice:");
scanf("%d",&choice);
}
printf(" 謝謝使用該程序!\n");
}
一元稀疏多項式簡單的計算器
一元稀疏多項式簡單的計算器
其他人氣:452 ℃時間:2020-06-11 03:37:34
優(yōu)質(zhì)解答
我來回答
類似推薦
- 一元稀疏多項式簡單計算器
- 基本內(nèi)容:設(shè)計一個一元稀疏多項式簡單計算器.輸入并建立多項式、按指數(shù)降序輸出多項式、多項式相加、多
- 數(shù)據(jù)結(jié)構(gòu):一元稀疏多項式計算器
- 把一根高是10dm圓柱形木材沿著底面直徑對半鋸開,表面積增加了80平方分米,求這根圓柱形木材的表面積.
- 郭伋字細(xì)侯茂陵人為并州守素結(jié)恩德有關(guān)這個短文的答案
- she looked ———when she heard the ___news.A surprised;surprising B surprising;surprised
- 一加七分之五等于多少?
- ①f(x)=2sin^2x+sinx-2的值域; ②f(x)=sinx/(2+sinx)的值域.
- 白熊生活在什么地方
- "Living Chinese" 怎么翻譯?
- 某車間要鍛造直徑為40毫米,高為45毫米的圓柱形零件毛坯,需截取直徑30毫米的圓鋼多長?
- 為什么同周期的元素從左到右的原子半徑大小逐漸減小?
猜你喜歡
- 1I just need a person who will never give up my
- 2They heard the strang noise again.They heard________strang noise 同義句轉(zhuǎn)換
- 3生成等質(zhì)量氫氣,需四種金屬Mg Al Zn Fe的質(zhì)量由少至多怎么排列?
- 4在潮濕的天氣,當(dāng)打開電冰箱門時有“白氣”冒出,這是為什么
- 5英語中有哪些in開頭的短語
- 6如圖所示電路開關(guān)S閉合后燈L不發(fā)光,用電測筆測試電燈兩接線處和插座兩孔均能使測電筆發(fā)光,經(jīng)檢查,保險絲未斷,開關(guān)完好
- 72個點心和1杯飲料一共26元,一個點心和3杯飲料一共18元.1個點心和1杯飲料各是多少元?
- 8一篇名著的讀后感.
- 9已知a與b是非零向量,且(a+b)⊥(a-b),(a+2b)⊥(2a-b),求:3a+4b與2a+b的夾角.
- 10物體從傾角37°由靜止開始下滑它滑到底端的速率等于它從頂端自由下落到地面時速率的4/5
- 11塑料瓶底的三位數(shù)字是什么意思,不是三角形里的數(shù)字,是另外的.
- 12拗怎么讀