《《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告一元稀疏多項(xiàng)式計(jì)算器》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告一元稀疏多項(xiàng)式計(jì)算器(15頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告
一元稀疏多項(xiàng)式計(jì)算器
班級: 軟件1408
學(xué)號:1130505140831
姓名: 齊瑞征
指導(dǎo)老師: 石鋒
[問題描述]
設(shè)計(jì)簡單的一個一元稀疏多項(xiàng)式計(jì)算器。
[基本要求]
一元稀疏多項(xiàng)式簡單計(jì)算器的基本功能是:
(1) 輸入并建立多項(xiàng)式,以帶頭結(jié)點(diǎn)的單鏈表存儲;
(2) 輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci,ei,分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排序;
(3
2、) 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b;
(4) 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b;
(5) 多項(xiàng)式a和b相乘,建立多項(xiàng)式a*b;
[數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)]
在模擬多項(xiàng)式時,為了簡化處理,只取最核心的兩個數(shù)據(jù):多項(xiàng)式的系數(shù)和指數(shù),具體數(shù)據(jù)結(jié)構(gòu)定義如下:
typedef struct node{
int xs; /*系數(shù)*/
int zs; /*指數(shù)*/
struct node * next; /*next指針*/
}Dnode,* Dnodelist;
[功能函數(shù)設(shè)計(jì)]
(1)鏈表初始化函數(shù)Creat_node(
3、)
(2)多項(xiàng)式數(shù)據(jù)的輸入函數(shù)input()
(3)數(shù)據(jù)的插入函數(shù)Insert_node()
(4)多項(xiàng)式的顯示函數(shù)output()
(6)多項(xiàng)式的運(yùn)算函數(shù):新建鏈表存儲計(jì)算后的多項(xiàng)式
多項(xiàng)式相乘Mulresult()
多項(xiàng)式相加Addresult()
多項(xiàng)式相減Subresult()
(7)主函數(shù)main()
創(chuàng)建兩個多項(xiàng)式的鏈表并且初始化,分別調(diào)用相應(yīng)的多項(xiàng)式創(chuàng)建函數(shù),創(chuàng)建成功后選擇運(yùn)算方式,再將運(yùn)算結(jié)果輸出顯示。
【實(shí)現(xiàn)過程】
1、在D:根目錄下建立文件夾,命名方式為“班級”+“順序號(兩位)+“姓名”,例如你是商務(wù)1419班的,你在學(xué)生花名
4、冊上的順序號是05號,你的姓名是張有才,則文件夾的名
字是“商務(wù)141905張有才”。這個文件夾就是你的工作文件夾。
2、 在VC中創(chuàng)建c++源程序,命名為“poly.c”,保存在工作文件夾中;
3、在poly.c中輸入以下內(nèi)容并編譯,使沒有語法錯誤:
#include
#include
typedef struct node{
int xs;
int zs;
struct node * next;
}Dnode,* Dnodelist; /*定義結(jié)構(gòu)體*/
Dnod
5、elist Creat_node(void) /*鏈表初始化*/
{
Dnodelist D;
D=(Dnodelist)malloc(sizeof(Dnode));
if(D)
D->next=NULL;
return D;
}
4、回答問題,以上程序中,Creat_node(void)函數(shù)的功能是什么?
答:創(chuàng)建鏈表里面的一個節(jié)點(diǎn)。
5、在poly.c中完成如下函數(shù),并編譯。
int Insert_node(Dnodelist D,int xs,int zs) /*插入函數(shù)*/
{
Dnod
6、elist p;
Dnodelist q;
Dnodelist r;
p=D;
while(p->next)
{
r=p;
p=p->next;
if(zs==p->zs)
{
p->xs=p->xs+xs;
return 1;
}
else if(zs>p->zs) {
q=Creat_node();
q->xs=xs;
q->zs=zs;
r->next=q;
q->next=p;
7、return 1;
}
}/*while(p->next)*/
q=Creat_node();
q->xs=xs;
q->zs=zs;
q->next=p->next;
p->next=q;
return 1;
free(p);
free(q);
free(r);
}
函數(shù)功能:將一項(xiàng)合并到多項(xiàng)式中。
參數(shù)說明:
D:一個帶頭結(jié)點(diǎn)的單鏈表的頭指針,其中按指數(shù)降序存放一個一元多項(xiàng)式的數(shù)據(jù);
xs:要合并的項(xiàng)的系數(shù);
zs:要合并的項(xiàng)的指數(shù)。
6、在poly.c中完成如下函數(shù),并編譯。
void outpu
8、t(Dnodelist D){
Dnodelist r;
r=D->next;
printf("%dx^%d",r->xs,r->zs);
r=r->next;
while(r!=NULL)
{
if(r->xs>0)
printf("+%dx^%d",r->xs,r->zs);
else
printf("%dx^%d",r->xs,r->zs);
r=r->next;
}
printf("\n"); }
函數(shù)功能:以類似“-3*x^100+2*x^10-10”的形式輸出D中存放的多項(xiàng)式數(shù)據(jù)。
7、在poly.c中輸入以下函數(shù)
9、,并編譯。
Dnodelist input(void){
Dnodelist D;
int xs, zs;
D = Creat_node();
printf("請輸入系數(shù)和指數(shù)(系數(shù),指數(shù)):");
scanf("%d,%d", &xs, &zs);
while(xs!=0 && zs!=0){
Insert_node(D, xs, zs);
printf("請輸入系數(shù)和指數(shù)(系數(shù),指數(shù)):");
scanf("%d,%d", &xs, &zs);
}
return D;
}
你認(rèn)為以上函數(shù)的功能是什么?
答
10、:從鍵盤輸入系數(shù)和指數(shù)存放在鏈表中。
8、在poly.c中輸入以下main()函數(shù),并編譯。
void main(void){
Dnodelist D;
D = input();
output(D);
}
9、運(yùn)行你的程序,輸入以下數(shù)據(jù):
-3,100
2,10
-10,1
0,0
將你的程序的運(yùn)行結(jié)果的界面粘貼在下面:
10、在poly.c中完成以下函數(shù),其功能是計(jì)算D1和D2中兩個多項(xiàng)式的和,函數(shù)返回和多項(xiàng)式。
Dnodelist Addresult(Dnodelist D1,Dnodelist D2)
{
Dnodelist
11、 D;
Dnodelist p,q;
int x,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(q)
{
x=q->xs;
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
while(p)
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
return D;
}
11、在poly.c中完成以下兩個函數(shù),其功能分別是是計(jì)算兩個多項(xiàng)式的差
12、和乘積。
Dnodelist Subresult(Dnodelist D1, Dnodelist D2){
Dnodelist D;
Dnodelist p,q;
int x,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(p&&q)
{
if((p->zs)<(q->zs))
{
x=-(q->xs);
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
else if((p->zs)>(q->
13、zs))
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
else
{
z=q->zs;
x=(p->xs)-(q->xs);
Insert_node(D,x,z);
p=p->next;
q=q->next;
}
}
while(p)
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
whi
14、le(q)
{
x=-(q->zs);
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
return D;
}
Dnodelist Mulresult(Dnodelist D1, Dnodelist D2){
Dnodelist D;
Dnodelist p,q;
int x,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(q)
{
while(p)
{
15、 x=p->xs*q->xs; /*系數(shù)相乘,指數(shù)相加*/
z=p->zs+q->zs;
Insert_node(D,x,z);
p=p->next;
}
p=D1->next;
q=q->next;
}
return D;
}
12、 編寫main函數(shù),功能輸入兩個多項(xiàng)式的數(shù)據(jù),計(jì)算并輸出和、差、積多項(xiàng)式,把程序運(yùn)行結(jié)果的界面粘貼在下面。
[收獲和建議]
1、通過本次課程設(shè)計(jì),你都有哪些收獲,請寫在下面。
通過這次課程設(shè)計(jì),我感覺到要真正做出一個程序并不很容易,但只要用心去做,總會有收獲,特別是當(dāng)我遇
16、到問題,查資料,問同學(xué),想盡辦法去解決,最后終于找到方法時,心里的那份喜悅之情真是難以形容.編寫程序中遇到問題再所難免,應(yīng)耐心探究其中的原因,從出現(xiàn)問題的地方起,并聯(lián)系前后程序,仔細(xì)推敲,逐個排查.直到最終搞清為止。
“享受制作過程 追求更加完美”是我對實(shí)訓(xùn)的總結(jié)。
2、 你對這門課程教學(xué)內(nèi)容和方法有什么好的建議,請寫在下面。
通過這次課程設(shè)計(jì)我覺得我們學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》的方法存在一定的弊端,《數(shù)據(jù)結(jié)構(gòu)》的效果直接影響到我們對其它專業(yè)課的學(xué)習(xí)和今后業(yè)務(wù)的成長。我覺得我們對于《數(shù)據(jù)結(jié)構(gòu)》的學(xué)習(xí)不僅包括理論部分的學(xué)習(xí),還要讓我們勤動手,多實(shí)踐。 整個實(shí)驗(yàn)過程要結(jié)合教學(xué)進(jìn)度與我們的實(shí)際情況,制定實(shí)驗(yàn)的內(nèi)容。實(shí)驗(yàn)分兩部分,一是驗(yàn)證性的,主要結(jié)合課堂理論教學(xué)內(nèi)容展開,學(xué)生可以對在課堂上學(xué)到的基本算法進(jìn)行驗(yàn)證;二是設(shè)計(jì)性實(shí)驗(yàn),堅(jiān)持“學(xué)以致用”的原則,目的是讓學(xué)生充分利用所學(xué)的理論知識進(jìn)行相對復(fù)雜的應(yīng)用設(shè)計(jì),以進(jìn)一步提高綜合能力和創(chuàng)新實(shí)踐能力。而在傳統(tǒng)的課堂教學(xué)中,一般采用的是“教師――黑板——學(xué)生”的教學(xué)模式,這對大多數(shù)教師和學(xué)生來說,“教”和“學(xué)”很難在課堂中得到良好的協(xié)調(diào),因而也就難以對教學(xué)內(nèi)容進(jìn)行及時而有效地消化,“聽懂但不會做”是大部分學(xué)生的通病,從而使教學(xué)效果受到影響。所以我希望以后的數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)能夠注重實(shí)驗(yàn)上機(jī).