版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算器的設(shè)計第一章需求分析1.1加減乘除的運(yùn)算 設(shè)計一個簡單的計算器,能夠在有限位數(shù)內(nèi)實(shí)現(xiàn)加、減、乘、除運(yùn)算,并支持括號和小數(shù)。1.2進(jìn)制轉(zhuǎn)換通過該計算器可以實(shí)現(xiàn)二進(jìn)制、十進(jìn)制、八進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)換和運(yùn)算。這個程序首先要求選擇一種數(shù)值轉(zhuǎn)換的種類,例如我們可以選擇二進(jìn)制輸入,十進(jìn)制輸出,這樣就要求我們把輸入的二進(jìn)制轉(zhuǎn)換成十進(jìn)制。由于按照我們要求的輸入,輸出,總共有6種情況。所以我們不能一一寫出來每個程序的執(zhí)行過程,對于不同的情況我們只需要定義不同的輸入函數(shù)和輸出函數(shù),根據(jù)不同的情況,調(diào)用不同的輸入函數(shù)和輸出函數(shù),這樣做是為了對于多進(jìn)制的情況,這樣能簡化程序。我定義了二進(jìn)制輸入,十進(jìn)制輸入,十六進(jìn)制輸入,二進(jìn)制輸出,十進(jìn)制輸出,十六進(jìn)制輸出,這樣就能滿足各種需要。1.3一元多項式的運(yùn)算通過C語言實(shí)現(xiàn)多項式的的計算功能,輸入多項式的項數(shù)、每項的系數(shù)和指數(shù),將兩個多項式進(jìn)行加減進(jìn)行加減運(yùn)算。該內(nèi)容包括輸入并建立多項式、多項式相加、多項式相減、多項式求值及輸出多項式。本項功能使用鏈?zhǔn)酱鎯Y(jié)構(gòu)存儲一元多項式,可以方便的計算簡單的一元多項式的基本運(yùn)算。1.4實(shí)現(xiàn)形式要求采用鏈表結(jié)構(gòu)進(jìn)行實(shí)現(xiàn)第二章功能描述2.1全局功能模塊圖計算器計算器二級制十進(jìn)制八進(jìn)制十六進(jìn)制的轉(zhuǎn)換和運(yùn)算二級制十進(jìn)制八進(jìn)制十六進(jìn)制的轉(zhuǎn)換和運(yùn)算加減乘除的運(yùn)算一元多項式的計算減加加減乘除八到十二到十十六到十減加加減乘除八到十二到十十六到十圖1全局功能圖全局功能模塊圖說明:該計算器主要實(shí)現(xiàn)四則運(yùn)算、進(jìn)制的轉(zhuǎn)換以及一元多項式的加減運(yùn)算。在四則運(yùn)算中主要功能有整型數(shù)據(jù)的加減乘除運(yùn)算,進(jìn)制轉(zhuǎn)換分為二進(jìn)制轉(zhuǎn)換為十進(jìn)制、八進(jìn)制轉(zhuǎn)換為十進(jìn)制、十六進(jìn)制轉(zhuǎn)換為十進(jìn)制,一元多項式的計算分為加法運(yùn)算和減法運(yùn)算,以下是對計算器功能實(shí)現(xiàn)的具體說明。2.2四則運(yùn)算功能描述計算器可以進(jìn)行簡單的加減乘除運(yùn)算,可以判斷用戶的錯誤輸入并且進(jìn)行限制提示,比如:輸入的左右括號不匹配,除數(shù)為0,輸入非法字符時,都會有相應(yīng)的提示,對用戶比較友好。在進(jìn)行加減乘除的運(yùn)算過程中,程序的運(yùn)算部分建立了兩個堆棧,分別用來存儲操作符和操作數(shù)。接收的用戶輸入可細(xì)分為四種,分別是數(shù)字,加減乘除操作符及左括號,右括號,等號。根據(jù)個符號的優(yōu)先級進(jìn)行計算式的運(yùn)算。此程序調(diào)用的函數(shù)主要有<math.h>/*數(shù)學(xué)函數(shù)的定義*/<conio.h>/*屏幕操作函數(shù)*/<stdio.h>/*I/O函數(shù)*/<stdlib.h>/*庫函數(shù)*/<stdarg.h>//<ctype.h>/*字符操作函數(shù)*/?;臼褂?用→←↑↓控制鼠標(biāo)圖形移動,當(dāng)*變量長度參數(shù)表*/<graphics.h>/*圖形函數(shù)*/<string.h>/*字符串函數(shù)*移動到相應(yīng)得按鈕時按回車鍵輸入當(dāng)前數(shù)字或執(zhí)行對應(yīng)的函數(shù)。加法:輸入一個被加數(shù)數(shù),按“+”,輸入被加數(shù),按“=”,輸出結(jié)果。乘法:輸入一個數(shù),按“*”,輸入另個數(shù),按“=”,輸出結(jié)果。除法:輸入一個被除數(shù),按“+”,輸入另個除數(shù),按“=”,輸出結(jié)果。求余:輸入一個數(shù),按“mod”,按“=”,輸出結(jié)果。取整:輸入一個數(shù),按“int”,按“=”,輸出結(jié)果。2.3進(jìn)制轉(zhuǎn)換功能描述輸入一個八進(jìn)制數(shù),按“8->10”,按“=”,輸出十進(jìn)制結(jié)果。十六進(jìn)制轉(zhuǎn)十進(jìn)制:輸入一個十六進(jìn)制數(shù),按下“jz”+“16->10”按“=”2.4一元多項式運(yùn)算功能描述一元多項式的計算是常用的數(shù)學(xué)計算,在計算機(jī)計算中是非常普遍的,為了更加方便的進(jìn)行此類運(yùn)算,在此設(shè)計了一個簡單的一元多項式計算器,用于對一元多項式進(jìn)行創(chuàng)建,輸出,以及一元多項式之間的相加,相減。該程序簡單,清晰,明了,用戶易懂易用,能較好得實(shí)現(xiàn)一元多項式的計算功能[2]。程序的基本功能:(1)建立多項式(2)輸出多項式(3)兩個多項式相加,建立并輸出和多項式(4)兩個多項式相減,建立并輸出差多項式(5)兩個多項式相乘,建立并輸出乘多項式第三章功能的設(shè)計3.1四則運(yùn)算設(shè)計思路系統(tǒng)在進(jìn)行加減乘除的運(yùn)算時,程序中主要運(yùn)用堆棧這一數(shù)據(jù)邏輯結(jié)構(gòu)。并建立了兩個堆棧,當(dāng)遇到數(shù)字時直接壓入操作數(shù)堆棧;當(dāng)遇到加減乘除或左括號時進(jìn)行優(yōu)先級判斷:如果傳入的操作符優(yōu)先級大于棧頂操作符的優(yōu)先級則操作符入棧,如果傳入的操作符優(yōu)先級小于等于棧頂操作數(shù)的優(yōu)先級則將棧頂操作符彈出,另外從操作數(shù)堆棧彈出兩操作數(shù)進(jìn)行運(yùn)算,運(yùn)算結(jié)果壓入操作數(shù)堆棧;當(dāng)遇到右括號時從兩堆棧中彈出數(shù)據(jù)進(jìn)行運(yùn)算(每次結(jié)果壓入操作數(shù)堆棧),直至遇到左括號從堆棧中彈出為止;當(dāng)遇到等號時從兩堆棧中彈出數(shù)據(jù)進(jìn)行運(yùn)算,直至操作符堆棧為空。switch(act)/*根據(jù)運(yùn)算符號計算*/{case1:result=num1+num2;break;/*做加法*/case2:result=num1-num2;break;/*做減法*/case3:result=num1*num2;break;/*做乘法*/case4:result=num1/num2;break;/*做除法*/3.2進(jìn)制轉(zhuǎn)換設(shè)計思路在進(jìn)行十六進(jìn)制轉(zhuǎn)化為十進(jìn)制或八進(jìn)制時,需要注意的是:先輸入一個十六進(jìn)制數(shù)據(jù),再輸入“sft”然后輸入“16->10”或“16->8”,最后輸入“=”,輸出轉(zhuǎn)換后的結(jié)果。3.2.1十六進(jìn)制轉(zhuǎn)換為十進(jìn)制本段程序的作用是將十六進(jìn)制轉(zhuǎn)化為十進(jìn)制,該程序是作為十六進(jìn)制轉(zhuǎn)化為其他進(jìn)制的橋梁。十六進(jìn)制向十進(jìn)制的轉(zhuǎn)換分成兩個大的步驟,一是從十六進(jìn)制向二進(jìn)制的轉(zhuǎn)換,由于十六進(jìn)制和二進(jìn)制的特殊關(guān)系,它們之間的轉(zhuǎn)換非常簡單。二是從二進(jìn)制轉(zhuǎn)換為十進(jìn)制,相對而言,這種轉(zhuǎn)換復(fù)雜一些。所以該模塊的核心是實(shí)現(xiàn)二進(jìn)制數(shù)向十進(jìn)制數(shù)的轉(zhuǎn)換。方法是將要轉(zhuǎn)換的二進(jìn)制數(shù)預(yù)先放到AX寄存器中,判斷AX中數(shù)的符號,若為負(fù)數(shù),則將負(fù)號送入輸出緩沖區(qū),并求AX的絕對值;若AX中的數(shù)為正數(shù),則不做其他處理,此時AX中即為無符號二進(jìn)制數(shù)。然后將無符號二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),可采用將AX除以10,得到第一個商和第一個余數(shù),第一個余數(shù)就是所求十進(jìn)制數(shù)的個位:將第一個商除以10,得到第二個商和余數(shù),第二個余數(shù)就是所求十進(jìn)制數(shù)的十位數(shù),重復(fù)以上過程,一直循環(huán)到商為0時,得到的余數(shù)就是所求十進(jìn)制數(shù)的最高位數(shù)。這就是數(shù)制轉(zhuǎn)換中常用的“除模留余倒排列”法則。cd1=strlen(str7);for(i=0,j=1;i<cd1;i++,j++){if(str7[i]=='1')num=num+1*pow(16,cd1-j);elseif(str7[i]=='2')num=num+2*pow(16,cd1-j);elseif(str7[i]=='3')num=num+3*pow(16,cd1-j);elseif(str7[i]=='4')num=num+4*pow(16,cd1-j);elseif(str7[i]=='5')num=num+5*pow(16,cd1-j);elseif(str7[i]=='1')num=num+1*pow(16,cd1-j);elseif(str7[i]=='6')num=num+6*pow(16,cd1-j);elseif(str7[i]=='7')num=num+7*pow(16,cd1-j);elseif(str7[i]=='8')num=num+8*pow(16,cd1-j);elseif(str7[i]=='9')num=num+9*pow(16,cd1-j);elseif(str7[i]=='A')num=num+10*pow(16,cd1-j);elseif(str7[i]=='B')num=num+11*pow(16,cd1-j);elseif(str7[i]=='C')num=num+12*pow(16,cd1-j);elseif(str7[i]=='D')num=num+13*pow(16,cd1-j);elseif(str7[i]=='E')num=num+14*pow(16,cd1-j);elseif(str7[i]=='F')num=num+15*pow(16,cd1-j);}3.2.2二進(jìn)制轉(zhuǎn)換為十進(jìn)制由二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的基本做法是,把二進(jìn)制數(shù)首先寫成加權(quán)系數(shù)展開式,然后按十進(jìn)制加法規(guī)則求和。這種做法稱為"按權(quán)相加"法。本段程序的作用是將二進(jìn)制轉(zhuǎn)化為十進(jìn)制,可作為二進(jìn)制轉(zhuǎn)化為其他進(jìn)制的橋梁。zj=num1;result=0;for(i=0;i<=cd;i++){result=result+fmod((int)(zj),10)*pow(2,i);zj=(int)(zj/10);}3.2.3八進(jìn)制轉(zhuǎn)換為十進(jìn)制本段程序的作用是將八進(jìn)制轉(zhuǎn)化為十進(jìn)制,可作為八進(jìn)制轉(zhuǎn)化為其他進(jìn)制的橋梁。zj=num1;result=0;for(i=0;i<=cd;i++){result=result+fmod((int)(zj),10)*pow(8,i);zj=(int)(zj/10);}3.3一元多項式運(yùn)算設(shè)計思路輸入多項式采用頭插法的方式,輸入多項式中一個項的系數(shù)和指數(shù),就產(chǎn)生一個新的節(jié)點(diǎn),建立起它的右指針,并用頭節(jié)點(diǎn)指向它;為了判斷一個多項式是否輸入結(jié)束,定義一個結(jié)束標(biāo)志,當(dāng)輸入非0時就繼續(xù),當(dāng)輸入0時,就結(jié)束一個多項式的輸入。創(chuàng)建一元多項式的關(guān)鍵程序如下,由用戶決定一元多項式的項數(shù),項數(shù)系數(shù)和指數(shù)。#include<stdlib.h>#include<stdio.h>#include<ctype.h>typedefstructterm{//項的表示,多項式的項作為LinkList的數(shù)據(jù)元素floatcoef;//系數(shù)intexpn;//指數(shù)structterm*next;}termterm*CreatPolyn(term*P,intm){//算法2.22//輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表Pif(m<=0)returnNULL;term*h=P=(term*)malloc(sizeof(term)),*q;P->coef=0.0;inti;printf("依次輸入%d個非零項\n",m);for(i=1;i<=m;++i){//依次輸入m個非零項scanf("%f%d",&P->coef,&P->expn);if(P->coef)q=P;P=P->next=(term*)malloc(sizeof(term));}q->next=NULL;free(P);returnh;}//CreatPolyn3.3.1一元多項式的相加它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數(shù)相等的話,系數(shù)就應(yīng)該相加;相加的和不為0的話,用頭插法建立一個新的節(jié)點(diǎn)。p的指數(shù)小于q的指數(shù)的話,就應(yīng)該復(fù)制q節(jié)點(diǎn)到多項式中。p的指數(shù)大于q的指數(shù)的話,就應(yīng)該復(fù)制p節(jié)點(diǎn)到多項式中。當(dāng)?shù)诙€多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點(diǎn)產(chǎn)生。當(dāng)?shù)谝粋€多項式空,第二個多項式不為空時,將第二多項式用新節(jié)點(diǎn)產(chǎn)生。一元多項式加法的關(guān)鍵程序如下:term*APolyn(term*Pa,term*Pb){//算法2.23//多項式加法:Pa=Pa+Pb,利用兩個多項式的結(jié)點(diǎn)構(gòu)成"和多項式"。term*h,*qa=Pa,*qb=Pb,*p,*q;floatsum;h=p=(term*)malloc(sizeof(term));p->next=NULL;while(qa&&qb){//Pa和Pb均非空switch(Compare(qa,qb)){case-1://多項式PA中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qb;p=qb;qb=qb->next;break;case0://兩者的指數(shù)值相等sum=qa->coef+qb->coef;if(sum!=0.0){//修改多項式PA中當(dāng)前結(jié)點(diǎn)的系數(shù)值p->next=qa;qa->coef=sum;p=qa;qa=qa->next;}else{//刪除多項式PA中當(dāng)前結(jié)點(diǎn)q=qa;qa=qa->next;ree(q);}q=qb;qb=qb->next;free(q);break;case1://多項式PB中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qa;p=qa;qa=qa->next;break;}//switch}//whileif(Pa)p->next=qa;//鏈接Pa中剩余結(jié)點(diǎn)if(Pb)p->next=qb;//鏈接Pb中剩余結(jié)點(diǎn)q=h;h=h->next;free(q);returnh;}//APolynterm*A(term*Pa,term*Pb){intn;puts("再輸入一一元多項式的項數(shù)");scanf("%d",&n);//輸入nPb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);//輸出Poly(Pa)if(Pb&&Pb->coef>0)printf("+");PrintfPoly(Pb);Pa=APolyn(Pa,Pb);printf("=");//輸出“=”Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}3.3.2一元多項式的相減它從兩個多項式的頭部開始,兩個多項式的某一項都不為空時,如果指數(shù)相等的話,系數(shù)就應(yīng)該相減;相加的和不為0的話,用頭插法建立一個新的節(jié)點(diǎn)。p的指數(shù)小于q的指數(shù)的話,就應(yīng)該復(fù)制q節(jié)點(diǎn)到多項式中。p的指數(shù)大于q的指數(shù)的話,就應(yīng)該復(fù)制p節(jié)點(diǎn)到多項式中,并且建立的節(jié)點(diǎn)的系數(shù)為原來的相反數(shù);當(dāng)?shù)诙€多項式空,第一個多項式不為空時,將第一個多項式用新節(jié)點(diǎn)產(chǎn)生。當(dāng)?shù)谝粋€多項式空,第二個多項式不為空時,將第二個多項式用新節(jié)點(diǎn)產(chǎn)生,并且建立的節(jié)點(diǎn)的系數(shù)為原來的相反數(shù)。一元多項式減法關(guān)鍵程序如下:term*BPolyn(term*Pa,term*Pb){//多項式減法:Pa=Pa-Pb,利用兩個多項式的結(jié)點(diǎn)構(gòu)成"差多項式"。term*p=Pb;//創(chuàng)建指針while(p){p->coef*=-1;p=p->next;}returnAPolyn(Pa,Pb);}//BPolynterm*B(term*Pa,term*Pb){intn;puts("再輸入一一元多項式的項數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);printf("-");putchar('(');PrintfPoly(Pb);putchar(')');Pa=BPolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}第四章程序流程圖圖2流程圖程序流程圖的說明:首先開始后輸出功能選擇菜單,在選擇菜單中1代表四則運(yùn)算,2代表進(jìn)制轉(zhuǎn)換,3代表一元多項式的計算,0表示退出。當(dāng)選擇1時,調(diào)用四則運(yùn)算程序,在四則運(yùn)算程序中輸出子菜單,根據(jù)提示選擇要進(jìn)行的算法,輸入數(shù)據(jù)得到運(yùn)行結(jié)果出現(xiàn)問句是否結(jié)束運(yùn)行是:結(jié)束,否:回到開始;當(dāng)選擇2時,調(diào)用進(jìn)制轉(zhuǎn)換程序,輸出子菜單,根據(jù)提示選擇進(jìn)制轉(zhuǎn)換,操作步驟同上;當(dāng)選擇3時,調(diào)用一元多項式的計算程序,在子菜單中輸入要計算的多項式,選擇要進(jìn)行的加減運(yùn)算,運(yùn)行。當(dāng)選擇0時,結(jié)束程序。第五章程序運(yùn)行結(jié)果圖5.1四則運(yùn)算運(yùn)行結(jié)果圖3四則運(yùn)算結(jié)果圖3是四則運(yùn)算運(yùn)行結(jié)果,在主菜單中選擇1基本四則運(yùn)算,然后選擇2減法基本運(yùn)算輸入數(shù)據(jù)3426即得到運(yùn)行結(jié)果為85.2一元多項式加減運(yùn)行結(jié)果圖4一元多項式結(jié)果圖4是一元多項式運(yùn)算結(jié)果,在主菜單中選3一元多項式運(yùn)算,在提示下輸入3個非零項,得出運(yùn)算結(jié)果,若還要繼續(xù)運(yùn)算則輸入要輸入的項數(shù)4,再輸入4個非零項:34564523得出運(yùn)算結(jié)果。5.3運(yùn)行初始狀態(tài)圖5初始菜單圖5為程序的初始狀態(tài)及主菜單,在該對話框中選擇要進(jìn)行的功能。第六章總結(jié)附錄附錄一參考文獻(xiàn)[1]嚴(yán)蔚敏.數(shù)據(jù)結(jié)構(gòu).北京:清華大學(xué)出版社,2010年[2]蘇士華.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.機(jī)械工程出版社附錄二程序源代碼#include<stdlib.h>#include<stdio.h>#include<ctype.h>voidcomputer1();voidcomputer2();voidcomputer3();intsum(intx,inty);//加intsubstract(intx,inty);intmultipe(intx,inty);intdiver(intx,inty);intBtoD(char*,char*);typedefstructterm{//項的表示,多項式的項作為LinkList的數(shù)據(jù)元素floatcoef;//系數(shù)intexpn;//指數(shù)structterm*next;}term;term*CreatPolyn(term*P,intm){//算法2.22//輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表Pif(m<=0)returnNULL;term*h=P=(term*)malloc(sizeof(term)),*q;P->coef=0.0;inti;printf("依次輸入%d個非零項\n",m);for(i=1;i<=m;++i){//依次輸入m個非零項scanf("%f%d",&P->coef,&P->expn);if(P->coef)q=P;P=P->next=(term*)malloc(sizeof(term));}q->next=NULL;free(P);returnh;}//CreatPolynterm*selsort(term*h){term*g,*p,*q;if(!h)returnNULL;floatf;inti,fini=1;for(g=h;g->next&&fini;g=g->next){fini=0;for(p=h,q=h->next;q;p=p->next,q=q->next)if(p->expn<q->expn){f=p->coef;i=p->expn;p->coef=q->coef;p->expn=q->expn;q->coef=f;q->expn=i;fini=1;}}for(g=h,p=g->next;p;)if(g->expn==p->expn){g->coef+=p->coef;g->next=p->next;q=p;p=p->next;free(q);}elseif(g->next){g=g->next;p=p->next;}returnh;}voidPrintfPoly(term*P){term*q=P;if(!q){putchar('0');return;}if(q->coef!=1){printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}elseif(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);q=q->next;while(q){if(q->coef>0)putchar('+');if(q->coef!=1){printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}elseif(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);q=q->next;}}Compare(term*a,term*b){if(a->expn<b->expn)return-1;if(a->expn>b->expn)return1;return0;}term*APolyn(term*Pa,term*Pb){//算法2.23//多項式加法:Pa=Pa+Pb,利用兩個多項式的結(jié)點(diǎn)構(gòu)成"和多項式"。term*h,*qa=Pa,*qb=Pb,*p,*q;floatsum;h=p=(term*)malloc(sizeof(term));p->next=NULL;while(qa&&qb){//Pa和Pb均非空switch(Compare(qa,qb)){case-1://多項式PA中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qb;p=qb;qb=qb->next;break;case0://兩者的指數(shù)值相等sum=qa->coef+qb->coef;if(sum!=0.0){//修改多項式PA中當(dāng)前結(jié)點(diǎn)的系數(shù)值p->next=qa;qa->coef=sum;p=qa;qa=qa->next;}else{//刪除多項式PA中當(dāng)前結(jié)點(diǎn)q=qa;qa=qa->next;free(q);}q=qb;qb=qb->next;free(q);break;case1://多項式PB中當(dāng)前結(jié)點(diǎn)的指數(shù)值小p->next=qa;p=qa;qa=qa->next;break;}//switch}//whileif(Pa)p->next=qa;//鏈接Pa中剩余結(jié)點(diǎn)if(Pb)p->next=qb;//鏈接Pb中剩余結(jié)點(diǎn)q=h;h=h->next;free(q);returnh;}//APolynterm*A(term*Pa,term*Pb){intn;puts("再輸入一一元多項式的項數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);if(Pb&&Pb->coef>0)printf("+");PrintfPoly(Pb);Pa=APolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}term*BPolyn(term*Pa,term*Pb){//算法2.23//多項式減法:Pa=Pa-Pb,利用兩個多項式的結(jié)點(diǎn)構(gòu)成"差多項式"。term*p=Pb;while(p){p->coef*=-1;p=p->next;}returnAPolyn(Pa,Pb);}//BPolynterm*B(term*Pa,term*Pb){intn;puts("再輸入一一元多項式的項數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);printf("-");putchar('(');PrintfPoly(Pb);putchar(')');Pa=BPolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}term*CPolyn(term*Pa,term*Pb){//算法2.23//多項式乘法:Pa=Pa*Pb,利用兩個多項式的結(jié)點(diǎn)構(gòu)成"積多項式"。if(!Pb)returnNULL;term*pa=Pa,*p,*q,*r,*s,*t;r=p=(term*)malloc(sizeof(term));while(pa){p->coef=pa->coef;p->expn=pa->expn;q=p;p=p->next=(term*)malloc(sizeof(term));pa=pa->next;}q->next=NULL;free(p);pa=Pa;t=s=(term*)malloc(sizeof(term));while(pa){q=s;s=s->next=(term*)malloc(sizeof(term));pa=pa->next;}q->next=NULL;free(s);pa=Pa;while(pa){pa->coef*=Pb->coef;pa->expn+=Pb->expn;pa=pa->next;}Pb=Pb->next;while(Pb){p=r;s=t;while(p){s->coef=p->coef*Pb->coef;s->expn=p->expn+Pb->expn;p=p->next;s=s->next;}Pa=APolyn(Pa,t);Pb=Pb->next;}returnPa;}//CPolynterm*C(term*Pa,term*Pb){intn;puts("再輸入一一元多項式的項數(shù)");scanf("%d",&n);Pb=CreatPolyn(Pb,n);Pb=selsort(Pb);putchar('(');PrintfPoly(Pa);putchar(')');printf("*");putchar('(');PrintfPoly(Pb);putchar(')');printf("=");Pa=CPolyn(Pa,Pb);Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}voidmain(){inti;pri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 29539-2025家用和類似用途吸油煙機(jī)與換氣扇能效限定值及能效等級
- GB/T 46437-2025工業(yè)管道用浸塑復(fù)合鋼管
- 2025年大學(xué)動漫與游戲制作(動畫特效制作)試題及答案
- 2025年大學(xué)船舶電子電氣工程(系統(tǒng)設(shè)計)期末試題
- 2025年大學(xué)(計算機(jī)科學(xué)與技術(shù))人工智能導(dǎo)論試題及答案
- 中職第二學(xué)年(機(jī)械裝配)機(jī)械設(shè)備裝配2026年階段測試題及答案
- 2026年戲曲學(xué)(戲曲理論)考題及答案
- 2025年大學(xué)模具設(shè)計與制造(冷卻系統(tǒng)設(shè)計)試題及答案
- 2026下半年商務(wù)英語(BEC中級口語)高頻話題與應(yīng)答
- 中職第三學(xué)年(汽車維修)汽車發(fā)動機(jī)維修2026年階段測試題及答案
- 鎮(zhèn)長2025年法治建設(shè)、法治政府建設(shè)述法報告
- 基于JavaWeb醫(yī)院住院信息管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)-論文13000字
- 小蘿卜頭的自白課件
- 項目管理崗部門運(yùn)營規(guī)劃
- 汽車底盤故障診斷與排除課件 學(xué)習(xí)任務(wù)四 汽車行駛跑偏故障與排除
- GB/T 18948-2025汽車?yán)鋮s系統(tǒng)用橡膠軟管和純膠管規(guī)范
- 國際投資學(xué)的試題及答案
- 人教版(2024)八年級上冊地理第一章 單元測試卷(含答案)
- 2025年北京工程造價定額與計價規(guī)范解析
- 林業(yè)和草原局護(hù)林員招聘考試《森林資源管護(hù)》題庫(答案+解析)
- 中華人民共和國職業(yè)分類大典是(專業(yè)職業(yè)分類明細(xì))
評論
0/150
提交評論