版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3;虐利技天母
二O一五?二。一六學(xué)年第二學(xué)期
信息科學(xué)與工程學(xué)院
軟件綜合設(shè)計(jì)報(bào)告書
課程名稱:C語言課程設(shè)計(jì)
班級:__________
學(xué)號(hào):________________
姓名:___________________
指導(dǎo)老師:______________________
二。一六年六月
一、需求分析
用單鏈表實(shí)現(xiàn)隨意兩個(gè)?元多項(xiàng)式的加、減法運(yùn)算
任務(wù):編程實(shí)現(xiàn)以下功能:
①分別輸入■?元多項(xiàng)式pn(x)和Qn(x)。
從鍵盤輸入一元對項(xiàng)式中各項(xiàng)的系數(shù)和指數(shù),并用單鏈表加以表示。
②分別對一元多項(xiàng)式pn(x)和Qn(x)進(jìn)行升累排序。
將一元多項(xiàng)式中各子項(xiàng)依據(jù)指數(shù)從小到大的依次排序。
③分別輸出一元多項(xiàng)式pn(x)和Qn僅)。
將用單鏈表表示的一元多項(xiàng)式輸出,即打印多項(xiàng)式的系數(shù)和指數(shù)。
④隨意輸入一個(gè)實(shí)數(shù)xO,分別求出一元多項(xiàng)式pn(xO)和Qn(xO)的值。
⑤已知有兩個(gè)一元多項(xiàng)式分別為Pn(x)和Qn(x),求出兩個(gè)多項(xiàng)式的和
Rn(x)和差Tn(x),分別用單鏈表表示Rn(x)和Tn(:《),并將二者輸出,
(Rn(x)=Pn(x)+Qn(x),Tn(x)=Pn(x)-Qn(x))
@保存多項(xiàng)式,即分別將一元多項(xiàng)式pn(x)和Qn(x)各項(xiàng)的系數(shù)和指數(shù)保存到外部磁盤文
件。
⑦由程序從所存文件中讀出多項(xiàng)式的系數(shù)和指數(shù),重新構(gòu)建一元多項(xiàng)式Pn(x)和Qn
(x),并可對其再次進(jìn)行運(yùn)算操作。
用戶操作流程:
(1)進(jìn)入菜單界面;
(2)依據(jù)提示輸入對應(yīng)功能數(shù)字,調(diào)用功能;
(3)依據(jù)提示輸入?yún)?shù);
(4)選擇功能輸出結(jié)果;
(5)退出。
二、概要設(shè)計(jì)
1、系統(tǒng)總體設(shè)計(jì)框架:
2、系統(tǒng)功能模塊
(1)功能選擇函數(shù):通過輸入對應(yīng)功能的數(shù)字,調(diào)用對應(yīng)的函數(shù)進(jìn)行多項(xiàng)式的運(yùn)算。
(2)輸入數(shù)據(jù)函數(shù):采納尾插法建立單鏈表并輸入保存兩個(gè)多項(xiàng)式的各項(xiàng)指數(shù)和系數(shù)。
(3)升暴函數(shù):通過冒泡排序法對兩個(gè)多項(xiàng)式進(jìn)行升帚排序。
(4)求和求差函數(shù):定義空鏈用來存儲(chǔ)結(jié)果,將兩個(gè)多項(xiàng)式相加減分別得到Rn(x)和Tn
(X)o
(5)輸出函數(shù):輸出當(dāng)前保存的多項(xiàng)式。
三、具體設(shè)計(jì)
創(chuàng)建一元多項(xiàng)式鏈表,鏈表中的每一個(gè)結(jié)點(diǎn)存放多項(xiàng)式的一個(gè)系數(shù)非零項(xiàng),它包含三個(gè)域,
分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一個(gè)多項(xiàng)式項(xiàng)結(jié)點(diǎn)的指針。對每一項(xiàng)的系數(shù)和指數(shù)進(jìn)
行相應(yīng)的操作完成計(jì)算
1.定義結(jié)構(gòu)體struct
運(yùn)用typedef和struct定義的新類型名稱,聲明和初始化結(jié)構(gòu)體變量;創(chuàng)建并依據(jù)自
己的意愿初始化結(jié)構(gòu)數(shù)組。
2.建立單鏈表并輸入保存一元多項(xiàng)式各項(xiàng)的系數(shù)和指數(shù)。單鏈表有兩個(gè)域,data域和next
域,一個(gè)是存放數(shù)據(jù),一個(gè)是存放指針而且指向它的后繼。將表的最終一個(gè)結(jié)點(diǎn)的next
置NULL,以示表的結(jié)束。由于Pn(x)和Qn(x)的輸入方式一樣,所以在這里就只探
討Pn(x)的輸入。在輸入系數(shù)和指數(shù)的時(shí)候,在最終輸入0以示輸入結(jié)束。
起先
3.建立功能選擇函數(shù)
通過switch來推斷外界輸入的數(shù)字,調(diào)用對應(yīng)的函數(shù)
4.多項(xiàng)式相加減:
多項(xiàng)式相加的運(yùn)算規(guī)則是:兩個(gè)多項(xiàng)式中全部指數(shù)相同的項(xiàng)的對應(yīng)系數(shù)相加,若和不為
零,則構(gòu)成“和多項(xiàng)式”中的一項(xiàng);全部指數(shù)不相同的的項(xiàng)均復(fù)抄到“和多項(xiàng)式”中。
以單鏈表作為存儲(chǔ)結(jié)構(gòu),并且“和多項(xiàng)式”中的節(jié)點(diǎn)無需另外生成,則可看做是將多項(xiàng)
式Q加到多項(xiàng)式P中,由此得到下列運(yùn)算規(guī)則:(設(shè)p、q分別是多項(xiàng)式Pn(x)和Qn
(x)的一項(xiàng),比較結(jié)點(diǎn)的指數(shù)項(xiàng));
若p->exp<q->exp,則結(jié)點(diǎn)p所指的結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中的一項(xiàng),令指針p后移。
若p->exp>q->exp,則結(jié)點(diǎn)q所指的結(jié)點(diǎn)應(yīng)是“和多項(xiàng)式”中的--項(xiàng),將結(jié)點(diǎn)q插入在
結(jié)點(diǎn)p之前,且令指針q在原來的鏈表上后移。
若p->exp=q->exp,則將兩個(gè)結(jié)點(diǎn)的系數(shù)相加,當(dāng)和不為零是修改結(jié)點(diǎn)p的系數(shù),格放q
結(jié)點(diǎn);若和為零,則“和多項(xiàng)式”中無此項(xiàng),從P中p結(jié)點(diǎn),同時(shí)釋放p和q結(jié)點(diǎn)。多
項(xiàng)式相減運(yùn)算規(guī)則同加法。
求和函數(shù)程序流程圖:
求差函數(shù)程序流程圖:
四、主要源程序代碼
include<stdio.h>
#include<math.h>
#include<algorithT?
typedefstructPloynode
{
intcoef;
intexp;
structPloynode*next;
}DXS;
intget()
intnum;
printf("輸入選擇功能對應(yīng)的數(shù)字:");
scanf("%d",&num);
returnnum;
)
voidfunl(DXS*PHEAD,DXS*QHEAD)
{
inte,c;〃定義指數(shù)系數(shù)
printf("請輸入P3中各項(xiàng)的系數(shù)和指數(shù)\n“);
scanf("%d%d"/&c,&e);
while(c!=0||e!=0)/*若c=0,則代表多項(xiàng)式的輸入結(jié)束*/
{
DXS*p=(DXS*)malloc(sizeof(DXS));/*申請新的結(jié)點(diǎn)*/
p->coef=c;
p->exp-e;
PHEAD->next=p;/*在當(dāng)前表尾做插入*/
p->next=NULL;/*將表的最終一個(gè)結(jié)點(diǎn)的next置NULL,以示表結(jié)束*/
PHEAD=PHEAD->next;
scanf("%d%d",&c,&e);
)
printf("請輸入Q(x)中各項(xiàng)的系數(shù)和指數(shù)\n");
scanf("%d%d”,&c,&e);
while(c!=0||e!=0)/*若c=0,則代表多項(xiàng)式的輸入結(jié)束*/
{
DXS*p=(DXS*)malloc(sizeof(DXS));/*申請新的結(jié)點(diǎn)*/
p->coef=c;
p->exp=e;
QHEAD->next=p;/*在當(dāng)前表尾做插入*/
p->next=NULL;/*將表的最終一個(gè)結(jié)點(diǎn)的next置NULL,以示表結(jié)束*/
QHEAD=p;
scanf("%d%d",&c,&e);
)
printf("輸入5顯示結(jié)果\rT);
voidfun2(DXS*PHEAD,DXS*QHEAD)〃升易排序
{
DXS*p,*q;〃鏈表的冒泡排序
p=PHEAD->next;
for(p;p!=NULL;p=p->next)
for(q=p->next;q!=NULL;q=q->next)
(
if(p->exp>q->exp)
{
inttemp;
temp=p->coef;
p->coef=q->coef;
q->coef=temp;
temp=p->exp;
p->exp=q->exp;
q->exp=temp;
)
)
)
p=QHEAD->next;
for(p;p!=NULL;p=p->next)
(
for(q=p->next;q!=NULL;q=q->next)
(
if(p->exp>q->exp)
(
irttemp;
temp=p->coef;
p->coef=q->coef;
q->coef=temp;
temp=p->exp;
p->exp=q->exp;
q->exp=temp;
)
)
)
printf("輸入5顯示結(jié)果。\n");
)
voidfun5(DXS*PHEAD,DXS*QHEAD)
(
printf("當(dāng)前保存的P(x),Q(x)序列如下:\n“);
printf("P(x)=");
while(PHEAD->next!=NULL)
(
PHEAD=PHEAD->next;
printf("%dxA%d",PHEAD->coefzPHEAD->exp);
iffPHEAD->next!=NULL)
printf("+");
)
)
printf("\n");
printf("Q(x)=");
while(QHEAD->next!=NULL)
(
QHEAD=QHEAD->next;
printf("%dxA%d",QHEAD->coef,QHEAD->exp);
iffQHEAD->next!=NULL)
{
printf("+");
)
)
printf("\n\n");
voidfun4(DXS*PHEAD,DXS*QHEAD)
{
intxO;doublesum;
printf("輸入x的值:
scanf("%d",&xO);
sum=0;
while(PHEAD->next!=NULL)
(
PHEAD=PHEAD->next;
sum+=PHEAD->coef*pow(xO,PHEAD->exp);
)
printf("P(x)=%.OIf\n"zsum);
sum=0;
while(QHEAD->next!=NULL)
(
QHEAD=QHEAD->next;
sum+=QHEAD->coef*pow(xO,QHEAD->exp);
)
printf("Q(xO)=%.OIf\n\n"zsum);
)
voidfun3(DXS*PHEAD,DXS*QHEAD)//求兩個(gè)多項(xiàng)式的和差
(
fun2(PHEAD,QHEAD);〃先進(jìn)行升哥排序
DXS*RHEAD,*THEAD;
RHEAD=(DXS*)malloc(sizeof(DXS));
THEAD=(DXS*)malloc(sizeof(DXS));
RHEAD->next=NULL;
THEAD->next=NULL;
DXS*p=PHEAD,*q=QHEAD;〃多項(xiàng)式相加
DXS*r=RHEAD;
p=p->next;
q=q->next;
while(p!=NULL&&q!=NULL)〃當(dāng)兩個(gè)序列都有數(shù)值時(shí)
(
DXS*t=(DXS*)malloc(sizeof(DXS));
if(p->exp==q->exp)〃指數(shù)相同的狀況
{
t->coef-p->coef+q->coef;
t->exp=p->exp;
p=p->next;
q=q->next;
)
elseiffp->exp<q->exp)//P的指數(shù)小于Q的指數(shù)
{
t->coef=p->coef;
t->exp=p->exp;
p=p->next;
)
elseif(p->exp>q->exp)//P的指數(shù)大「Q的指數(shù)
{
t->coef=q->coef;
t->exp=q->exp;
q=q->next;
)
r->next=t;
r=r->next;
r->next=NULL;
)
while(p!=NULL)〃當(dāng)只有一個(gè)序列有數(shù)值時(shí)
(
DXS*t=(DXS*)malloc(sizeof(DXS));
t->coef=p-xoef;
t->exp=p->exp;
r->next=t;
r=r->next;
r->next=NULL;
p=p->next;
)
while(q!=NULL)
(
DXS*t=(DXS*)malloc(sizeof(DXS));
t->coef=q->coef;
t->exp=q->exp;
r->next=t;
r=r->next;
r->next=NULL;
q=q->next;
)
r=RHEAD;
printf("R(x)=");
while(r->next!=NULL)
(
r=r->next;
if(r->coef>=0)
(
if(r!=RHEAD->next)
printf("+");
A
printf("%dx%d",r->coef/r->exp);
)
else
printf("-%dxA%d",-l*r->coef,r->exp);
)
printf("\n\n");
p=PHEAD;
q=QHEAD;
DXS*T=THEAD;〃多項(xiàng)式相減
p=p->next;
q=q->next;
while(p!=NULL&&q!=NULL)
(
DXS*t=(DXS*)malloc(sizeof(DXS));
if(p->exp==q->exp)
{
t->coef=p->coef-q->coef;
t->exp=p->exp;
p=p->next;
q=q->next;
)
elseif(p->exp<q->exp)
(
t->coef=p->coef;
t->exp=p->exp;
p=p->next;
)
elseif(p->exp>q->exp)
{
t->coef=-1*q->coef;
t->exp=q->exp;
q=q->next;
)
T->next=t;
T=T->next;
T->next=NULL;
)
while(p!=NULL)
{
DXS*t=(DXS*)malloc(sizeof(DXS));
t->coef=p->coef;
t->exp=p->exp;
T->next=t;
T=T->next;
T->next=NULL;
p=p->next;
)
while(q!=NULL)
(
DXS*t=(DXS*)malloc(sizeof(DXS));
t->coef=-14q->coef;
t->exp=q->exp;
T->next=t;
T=T->next;
T->next=NULL;
q=q->next;
)
T=THEAD;〃消退系數(shù)為0項(xiàng)
while(T->next!=NULL)
{
if(T->next->coef==0)
T->next=T->next->next;
)
T=T->next;
iffT==NULL)
break;
)
T=THEAD;
printf("T(x)=");
while(T->next!=NULL)
(
T=T->next;
iffT->coef>=0)
(
if(T!=THEAD->next)
printf("+");
A
printf("%dx%d"/T->coef,T->exp);
)
else
printff"-%dxA%d",-1*T->coef,T->exp);
)
if(THEAD->next==NULL)
printf("O\n");
printf("\n");
)
voidmenu()
(
printf("--------------------------------------------------\n");
printf("l.分別輸入Pn(x)和Qn(x)。\n");
printf("2.分別對Pn(x)和Qn(x)進(jìn)行升基排序。\n");
printf(”3.分別求出Pn(x)和Qn(x)的和差。\n");
printf("4.隨意輸入一個(gè)實(shí)數(shù)X,分別求出一元多項(xiàng)式Pn(x)和Qn(x)的值。\n");
printf(”5.分別輸出上一步運(yùn)行結(jié)果的Pn(x)和Qn(x)o\n");
printf(".............................................................\n");
printf("lfyouwanttoexitthesystem,pleaseinputO.\n");}
intmain()
(
printf("Welcometothemenu~~\n");
menu();
intnum;
num=get();
if(num==0)
printf("\nExitthesystem,goodbye~~\n");
DXS叩HEAD,*QHEAD;
PHEAD=(DXS*)malloc(sizeof(DXS));
QHEAD=(DXS*)malloc(sizeof(DXS));
PHEAD->next=NULL;
QHEAD->next=NULL;
while(num)
(
switch(num)
(
case1:
funl(PHEAD,QHEAD);break;
case2:
fun2(PHEAD,QHEAD);break;
case3:
fun3(PHEAD,QHEAD);break;
case4:
fun4(PHEAD,QHEAD);break;
case5:
fun5(PHEAD,QHEAD);break;
default:
printf("輸入錯(cuò)誤,請重新輸入\n\n)
)
num=get();
if(num==0)
printf("\nExi:thesystem,goodbye!\n");
)
return0;
)
五、調(diào)試分析過程描述
1.進(jìn)入菜單界面,調(diào)用功能1完成多項(xiàng)式的輸入,再調(diào)用功能5顯示結(jié)果。
1.分別輸入Pn(x)和Qn(x)。
2.分別對Pn(x)和Qn(x)進(jìn)行升息排序。
3.分別求出Pn(x)和Qn(x)的和差。
4.任意輸入一個(gè)實(shí)數(shù)x,分別求出一元多項(xiàng)式Pn(x)和Qn(x)的值。
5.分別輸出上一步運(yùn)行結(jié)果的Pn(x)和Qn(x)。
Ifyouwanttoexitthesystem,pleaseinput0.
輸入選擇功能對應(yīng)的數(shù)字:1
請輸入P(x)中各項(xiàng)的系數(shù)和指數(shù)
42615300
請輸入Q(x)中各項(xiàng)的系數(shù)和指數(shù)
25748500
輸入5顯示結(jié)果
輸入選擇功能對應(yīng)的數(shù)字:5
當(dāng)前保住的P(x)[Q(x)序?如下:
P(x)=4x2+6x1+5x3
Q(x)=2x5+7x4+8x5
輸入選擇功能對應(yīng)的數(shù)字:
2.調(diào)用功能2對多項(xiàng)式進(jìn)行排序。
輸入選擇功能對應(yīng)的數(shù)字:2
輸入5顯示結(jié)果。
輸入選擇功能對應(yīng)的數(shù)字:5
當(dāng)前保存的P(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年安徽事業(yè)單位聯(lián)考淮北市市直及市轄區(qū)招聘94人備考題庫及1套參考答案詳解
- 2026江蘇蘇州市太倉市科技活動(dòng)中心(太倉科技館)招聘1人備考題庫參考答案詳解
- 藥店財(cái)務(wù)制度
- 2026中能建新疆能源發(fā)展有限公司所屬單位第一批社會(huì)招聘5人備考題庫及一套完整答案詳解
- 培訓(xùn)機(jī)構(gòu)整套財(cái)務(wù)制度
- 繼續(xù)教育財(cái)務(wù)制度
- 存貨盤點(diǎn)財(cái)務(wù)制度
- 2026廣東湛江市體育學(xué)校(湛江市體育運(yùn)動(dòng)學(xué)校)招聘4人備考題庫(編制)及答案詳解1套
- 快餐公司財(cái)務(wù)制度
- 賣酒旗艦店財(cái)務(wù)制度
- 呆滯存貨處理流程
- 互聯(lián)網(wǎng)+非遺項(xiàng)目商業(yè)計(jì)劃書
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設(shè)備的選擇和安裝布線系統(tǒng)
- GB/T 11018.1-2008絲包銅繞組線第1部分:絲包單線
- GB 31633-2014食品安全國家標(biāo)準(zhǔn)食品添加劑氫氣
- 麻風(fēng)病防治知識(shí)課件整理
- 手術(shù)室物品清點(diǎn)護(hù)理質(zhì)量控制考核標(biāo)準(zhǔn)
- 消防工程監(jiān)理實(shí)施細(xì)則
- 權(quán)利的游戲雙語劇本-第Ⅰ季
- 衛(wèi)生部《臭氧消毒技術(shù)規(guī)范》
- 早期復(fù)極綜合征的再認(rèn)識(shí)
評論
0/150
提交評論