版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 信息工程學(xué)院</b></p><p><b> 《 數(shù)據(jù)結(jié)構(gòu) 》</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目: 拉丁方陣 </p><p> 專 業(yè): 軟件
2、工程 </p><p> 班 級(jí): </p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p
3、><p> 時(shí) 間: </p><p><b> 摘 要</b></p><p> 拉丁方陣是一種n×n的方陣,方陣中恰有n種不同的元素,每種元素恰有n個(gè),并且每種元素在一行和一列中恰好出現(xiàn)一次。例如下圖是一個(gè)3×3的拉丁方陣:</p><p>
4、<b> 3 2 1</b></p><p><b> 2 1 3</b></p><p><b> 1 3 2</b></p><p> 如果一個(gè)拉丁方陣的第一行和第一列按照元素的先后順序來(lái)排列,那么這稱為拉丁方陣的標(biāo)準(zhǔn)型,例如下圖就是一個(gè)3x3的拉丁方陣標(biāo)準(zhǔn)型,第一行和第一列都是”1 2
5、3”。</p><p><b> 1 2 3</b></p><p><b> 2 3 1</b></p><p><b> 3 1 2</b></p><p> 編寫一個(gè)程序讀入一個(gè)方陣,判斷其是否為拉丁方陣;進(jìn)一步地,判斷是否為標(biāo)準(zhǔn)型。</p><
6、;p> (1)輸入包含多組數(shù)據(jù)。每組數(shù)據(jù)第一行為正整數(shù)n,表示方陣的大小。其后n行,每行有n個(gè)1到n之間的整數(shù),整數(shù)之間恰有一個(gè)空格,表示方陣的內(nèi)容。輸入保證1≤n≤100輸入以n=0結(jié)束,不要處理這個(gè)數(shù)據(jù)。</p><p> ?。?)每組數(shù)據(jù)對(duì)應(yīng)于一行輸出。如果輸入是拉丁方陣,但不是標(biāo)準(zhǔn)型則輸出1;如果輸入是標(biāo)準(zhǔn)型則輸出2;如果輸入不是拉丁方陣則輸出0。</p><p> ?。?
7、)應(yīng)用“數(shù)據(jù)結(jié)構(gòu)與算法”課程知識(shí)建立該問(wèn)題的數(shù)據(jù)結(jié)構(gòu)模型;</p><p> 關(guān)鍵字:拉丁方陣 ,比較,數(shù)據(jù)結(jié)構(gòu)與算法</p><p><b> 目 錄</b></p><p> 一、課程設(shè)計(jì)的目的 ……………………………………………………</p><p> 二、設(shè)計(jì)方案的論證(背景、意義、技術(shù)路線) …………
8、…………</p><p> 三、設(shè)計(jì)實(shí)現(xiàn)過(guò)程…………………………………………………………</p><p> 四、調(diào)試運(yùn)行及結(jié)果分析 ………………………………………………</p><p> 五、測(cè)試及問(wèn)題探討 ……………………………………………………</p><p> 六、課設(shè)總結(jié)與體會(huì) …………………………………….………………<
9、;/p><p> 七、致謝……………………………………………………………………</p><p> 八、參考文獻(xiàn) ……………………………………………………………</p><p> 九、附錄 …………………………………………………………………</p><p><b> 課程設(shè)計(jì)的目的</b></p><
10、;p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的是使同學(xué)們能夠根據(jù)數(shù)據(jù)對(duì)象的特性,合理的組織數(shù)據(jù)并能綜合運(yùn)用數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)基本知識(shí)解決實(shí)際問(wèn)題,培養(yǎng)基本的、良好的程序設(shè)計(jì)技能。</p><p> 明確題目要求、確定數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu);完成核心算法的設(shè)計(jì)、編碼與調(diào)試;準(zhǔn)備測(cè)試數(shù)據(jù),對(duì)軟件進(jìn)行測(cè)試與調(diào)試并撰寫課程設(shè)計(jì)報(bào)告;,驗(yàn)收及答辯。</p><p> 通過(guò)實(shí)踐操作,能熟練運(yùn)用C語(yǔ)言實(shí)現(xiàn)
11、邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及核心算法;掌握書寫程序設(shè)計(jì)說(shuō)明文檔的能力和工程軟件設(shè)計(jì)的基本方法。</p><p> 設(shè)計(jì)方案的論證(背景、意義、技術(shù)路線)</p><p> 據(jù)說(shuō)普魯士的腓特列大帝曾組成一支儀仗隊(duì),儀仗隊(duì)共有36名軍官,來(lái)自6支部隊(duì),每支部隊(duì)中,上校、中校、少校、上尉、中尉、少尉各一名。他希望這36名軍官排成6×6的方陣,方陣的每一行,每一列的6名軍官來(lái)自不同的部隊(duì)并且
12、軍銜各不相同。令他惱火的是,無(wú)論怎么絞盡腦汁也排不成。</p><p> 后來(lái),他去求教瑞士著名的大數(shù)學(xué)家歐拉。歐拉發(fā)現(xiàn)這是一個(gè)不可能完成的任務(wù)。</p><p> 來(lái)自n個(gè)部隊(duì)的n種軍銜的n×n名軍官,如果能排成一個(gè)正方形,每一行,每一列的n名軍官來(lái)自不同的部隊(duì)并且軍銜各不相同,那么就稱這個(gè)方陣叫正交拉丁方陣。歐拉猜測(cè)在</p><p> n=2,
13、6,10,14,18,…</p><p> 時(shí),正交拉丁方陣不存在。然而到了上世紀(jì)60年代,人們用計(jì)算機(jī)造出了n=10的正交拉丁方陣,推翻了歐拉的猜測(cè)?,F(xiàn)在已經(jīng)知道,除了n=2,6以外,其余的正交拉丁方陣都存在,而且有多種構(gòu)造的方法。</p><p> 意義:熟悉運(yùn)用C語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的運(yùn)算</p><p> 技術(shù)路線:工具WinTC</p>&
14、lt;p><b> 設(shè)計(jì)實(shí)現(xiàn)過(guò)程</b></p><p><b> 3.1 概要設(shè)計(jì)</b></p><p><b> 圖3.1-1</b></p><p><b> 圖3.1-2</b></p><p><b> 3.2 詳細(xì)
15、設(shè)計(jì)</b></p><p> 1)定義數(shù)組a[100][100]。</p><p><b> 2)輸入方陣</b></p><p> for (i=0;i<n;i++)</p><p><b> {</b></p><p> for(j=0;j
16、<n;j++)</p><p> scanf("%d",&a[i][j]);</p><p><b> }</b></p><p><b> 輸出方陣</b></p><p> for(i=0;i<n;i++)</p><p>
17、<b> { </b></p><p> printf("\n");</p><p> for(j=0;j<n;j++)</p><p> printf("%d",a[i][j]);</p><p><b> }</b></p>
18、<p> 3)判斷各行是否有相等數(shù)據(jù)</p><p> for (i=0;i<n;i++)</p><p><b> {</b></p><p> for (j=i;j<n;j++)</p><p><b> {</b></p><p> f
19、or (k=j+1;k<n;k++)</p><p><b> {</b></p><p> if(a[i][j]==a[i][k])</p><p><b> {</b></p><p><b> ch=0;</b></p><p>
20、return ch;//行數(shù)中有相等數(shù)據(jù)返回L=0 </p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p&g
21、t; return ch;//符合數(shù)組各行無(wú)相等數(shù)據(jù)返回L=1</p><p> 4)判斷各列是否有相等數(shù)據(jù)</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> for(j=i;j<n;j++)</p><p><
22、b> {</b></p><p> for(k=j+1;k<n;k++)</p><p><b> {</b></p><p> if(a[j][i]==a[k][i])//(不無(wú)法比較相鄰的行列)</p><p><b> {</b></p>&l
23、t;p><b> ch=0;</b></p><p> return ch;//列數(shù)中有相等數(shù)據(jù)返回M=0</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
24、<p><b> }</b></p><p> return ch;//符合數(shù)組各列無(wú)相等數(shù)據(jù)返回M=1</p><p><b> 5)判斷有序</b></p><p> for(i=0;i<n;i++) //第一行有序 </p><p><b> {
25、</b></p><p> if(a[0][i]<a[0][i+1])</p><p><b> {</b></p><p><b> flag1=0;</b></p><p><b> break;</b></p><p>&
26、lt;b> }</b></p><p><b> }</b></p><p> for(j=0;j<n;j++) //第一列有序</p><p><b> {</b></p><p> if(a[j][0]<a[j+1][0])</p>
27、<p><b> {</b></p><p><b> flag2=0;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b><
28、/p><p> 6)判斷條件若有序情況下繼續(xù)判斷行列是否相等</p><p> if((flag1==0)&&(flag2==0))</p><p><b> {</b></p><p> for (i=1;i<n;i++)</p><p><b> {<
29、;/b></p><p> if(a[0][i]==a[i][0])</p><p><b> ch=0;</b></p><p> return ch;//各行各列均有序且行與列相等返回N=0</p><p><b> }</b></p><p><b&
30、gt; }</b></p><p> return ch;//行與列不相等則不是標(biāo)準(zhǔn)型返回N=1</p><p><b> }</b></p><p> 7)輸出判斷的方陣類型</p><p> if(k==1&&s==1)</p><p><b>
31、 {</b></p><p> if(m==1) printf("2 ");//是拉丁方陣但不是標(biāo)準(zhǔn)拉丁方陣</p><p> else printf("1陣");//是標(biāo)準(zhǔn)拉丁方</p><p><b> }</b></p><p> else print
32、f("0 ");//不是拉丁方陣</p><p><b> 調(diào)試運(yùn)行及結(jié)果分析</b></p><p><b> 圖4-1</b></p><p><b> 圖4-2</b></p><p><b> 圖4-3</b></
33、p><p><b> 圖4-4</b></p><p><b> 圖4-5</b></p><p><b> 圖4-6</b></p><p><b> 圖4-7</b></p><p><b> 圖4-8</
34、b></p><p><b> 測(cè)試及問(wèn)題探討</b></p><p> 我們是通過(guò)在主函數(shù)中輸入方陣數(shù)據(jù),并調(diào)用子函數(shù)運(yùn)行,輸出結(jié)果,來(lái)實(shí)現(xiàn)的。第一次運(yùn)行時(shí),出現(xiàn)了很多錯(cuò)誤。在我的逐條分析下,發(fā)現(xiàn)很多是語(yǔ)法錯(cuò)誤。例如在語(yǔ)句后面沒(méi)有加“;”,或是在輸出的部分弄錯(cuò)了字符的表示格式等錯(cuò)誤。我便仔細(xì)查看,一一改正過(guò)來(lái)。</p><p>
35、開始時(shí),我所編寫的程序,不能判斷當(dāng)輸入的數(shù)大于n的情況。編寫不符合要,我在主函數(shù)中添加了一條比較語(yǔ)句,得以實(shí)現(xiàn)。</p><p> 在編程序之前,我不知該如何實(shí)現(xiàn)方陣的排列,找到了C語(yǔ)言的課本,然后決定用二維數(shù)組來(lái)實(shí)現(xiàn),在對(duì)方陣進(jìn)行判斷時(shí),由于if語(yǔ)句比較多,運(yùn)行時(shí)發(fā)現(xiàn)與要求不符,便重新對(duì)if語(yǔ)句進(jìn)行排序,嵌套等操作,最終得以實(shí)現(xiàn)</p><p><b> 課設(shè)總結(jié)與體會(huì)&l
36、t;/b></p><p> 通過(guò)這次課設(shè)我學(xué)會(huì)了如何利用C語(yǔ)言數(shù)組,在C語(yǔ)言的環(huán)境下實(shí)現(xiàn)方陣的形成,比較和判斷,拉丁方陣具有悠久的歷史,用現(xiàn)代的計(jì)算機(jī)編程語(yǔ)言,通過(guò)數(shù)據(jù)結(jié)構(gòu)進(jìn)行實(shí)現(xiàn)。</p><p> 在數(shù)據(jù)結(jié)構(gòu)的課堂上有關(guān)數(shù)組我們學(xué)過(guò)了很多,例如:數(shù)組的定義。有關(guān)方陣,矩陣,我們也學(xué)過(guò)了很多例如方陣,矩陣的存儲(chǔ)等知識(shí),在這節(jié)課程設(shè)計(jì)之前,我花費(fèi)了一些時(shí)間看書上的這些內(nèi)容,以便
37、我能更好的進(jìn)行課程設(shè)計(jì)。</p><p> 這節(jié)課程設(shè)計(jì)不僅讓我們鞏固數(shù)據(jù)結(jié)構(gòu)了知識(shí),還讓我們對(duì)C語(yǔ)言編程的實(shí)現(xiàn),及語(yǔ)法進(jìn)行了很好的鞏固。不僅如此,也增強(qiáng)了我們的編程調(diào)試的能力,讓我們能熟練的來(lái)運(yùn)用C語(yǔ)言環(huán)境的各種工具。</p><p><b> 七、致謝</b></p><p> 在這次課程設(shè)計(jì)中,我要感謝我的課程設(shè)計(jì)老師幫助我完成了這
38、次的課程設(shè)計(jì),在許多技術(shù)性的問(wèn)題上給予我?guī)椭?,在設(shè)計(jì)過(guò)程中給了我很多的意見(jiàn)和建議,在調(diào)試的時(shí)候也幫助我,把一些不晚上的想法完善了。</p><p> 還有,我要感謝我的同學(xué)們,在最早的選題時(shí),都是同學(xué)們幫助我,geile我很多建議。</p><p> 最后我要感謝我的學(xué)校,給我們提供了一個(gè)良好的課程設(shè)計(jì)環(huán)境,在這次課設(shè)中我學(xué)到了很多,得到了很多,所以我還要再次感謝這些我要感謝的人<
39、;/p><p><b> 八、參考文獻(xiàn)</b></p><p> [1] 王昆侖,李紅. 數(shù)據(jù)結(jié)構(gòu)與算法. 北京:中國(guó)鐵道出版社,2006年5月。</p><p> [2] 胡學(xué)鋼. 數(shù)據(jù)結(jié)構(gòu)與算法指導(dǎo).北京:清華大學(xué)出版社,1999。</p><p> [3] 胡學(xué)鋼. 數(shù)據(jù)結(jié)構(gòu).北京:高等教育出版社,2006。&
40、lt;/p><p> [4]王紅梅,胡明,王濤編著.數(shù)據(jù)結(jié)構(gòu)(C++版). 北京:清華大學(xué)出版社,2005.7.</p><p> [5]譚浩強(qiáng)編著.C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2006.1.</p><p><b> 九,附錄</b></p><p><b> 源程序:</b>
41、;</p><p> #include "stdio.h"</p><p> #include"stdlib.h"</p><p> int panduan1(int a[100][100],int n)//判斷各行是否有相等數(shù)</p><p> {int ch=1;int i,j,k;<
42、/p><p> for (i=0;i<n;i++)</p><p><b> {</b></p><p> for (j=0;j<n;j++)</p><p><b> {</b></p><p> for (k=j+1;k<n;k++)</p&
43、gt;<p><b> {</b></p><p> if(a[i][j]==a[i][k])</p><p> {ch=0;return ch;}//行數(shù)有相等 k=0 </p><p><b> }</b></p><p><b> }</b><
44、;/p><p><b> } </b></p><p> return ch;//符合數(shù)組各行不相等返回 K=1</p><p><b> }</b></p><p> int panduan2(int a[100][100],int n)//判斷各列是否有相等數(shù)</p><
45、p> {int ch=1; </p><p> int i,j,k;</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> for(j=0;j<n;j++)</p><p><b> {</b>
46、;</p><p> for(k=j+1;k<n;k++)</p><p><b> {</b></p><p> if(a[j][i]==a[k][i])</p><p> {ch=0;return ch;}//列數(shù)有相等 s=0</p><p><b> }<
47、/b></p><p><b> }</b></p><p><b> }</b></p><p> return ch;//符合數(shù)組各列不相等返回 S=1</p><p><b> }</b></p><p> int panduan3
48、(int a[100][100],int n)//判斷首行首列是否相等</p><p><b> {</b></p><p> int ch=1,flag1=1,flag2=1;int i,j;</p><p> for(i=0;i<n;i++) //第一行有序</p><p> if(a[0][
49、i]<a[0][i+1])</p><p> {flag1=0;break;}</p><p> for(j=0;j<n;j++) //第一列有序</p><p> if(a[j][0]<a[j+1][0])</p><p> {flag2=0;break;}</p><p> i
50、f(flag1==0&&flag2==0)</p><p><b> {</b></p><p> for (i=1;i<n;i++)</p><p><b> {</b></p><p> if(a[0][i]==a[i][0])//有序且行列相等 m=0</p
51、><p> ch=0;return ch;</p><p><b> }</b></p><p><b> }</b></p><p> return ch;//不相等不是標(biāo)準(zhǔn) m=1</p><p><b> }</b></p>&
52、lt;p> void main() </p><p><b> {</b></p><p> int n,i,j;</p><p> int k,s,m;</p><p> int a[100][100];</
53、p><p> printf("請(qǐng)輸入方陣階數(shù):\n");</p><p> scanf("%d",&n);</p><p> if(n<=1||n>=100)</p><p> {printf("此數(shù)據(jù)不符合要求\n");</p><p&g
54、t;<b> }</b></p><p><b> else</b></p><p> {printf("輸入矩陣的數(shù)據(jù)%d個(gè)\n",n*n);</p><p> k=panduan1(a,n);</p><p> for (i=0;i<n;i++)</p&
55、gt;<p><b> {</b></p><p> for(j=0;j<n;j++)</p><p> scanf("%d",&a[i][j]);</p><p> if(a[i][j]>n)</p><p><b> {k=0;</b&g
56、t;</p><p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<n;i++)</p><p> { printf("\n");</p><p> for(j=0;j<n;j++)
57、</p><p> printf("%d",a[i][j]);</p><p><b> }</b></p><p> s=panduan2(a,n);</p><p> m=panduan3(a,n);</p><p> printf("\n%d %d %
58、d\n",k,s,m);</p><p> if(k==1&&s==1)</p><p><b> {</b></p><p><b> if(m==0)</b></p><p> {printf("\n2:此方陣是標(biāo)準(zhǔn)拉丁方陣");}</
59、p><p><b> else </b></p><p> {printf("\n1:此方陣是拉丁方陣!");}</p><p><b> }</b></p><p><b> else </b></p><p> {print
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---迷宮
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) (3)
評(píng)論
0/150
提交評(píng)論