C語言課程設(shè)計(jì)_第1頁
C語言課程設(shè)計(jì)_第2頁
C語言課程設(shè)計(jì)_第3頁
C語言課程設(shè)計(jì)_第4頁
C語言課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論