天天看點

2014秋C++ 第14周項目 二維數組

【項目1-折騰二維數組】

建立一個5行4列的二維整型數組,通過初始化,為數組中的前兩列的10個元素賦初值,然後:

通過鍵盤輸入,使後兩列的10個元素獲得值;

按行序優先輸出數組元素;

将所有元素值乘以3後儲存在數組中;

按列序優先輸出(輸出的第一行是數組中的第一列……,其實輸出的就是“轉置”);

将數組“倒”着輸出(即最後一行最後一列的最先輸出,第0行第0列的最後輸出);

輸出數組中的所有偶數;

輸出所有行列下标之和為3的倍數的元素值。

    提示:程式設計時,可以做一點,調一點。參考的運作界面如圖:

2014秋C++ 第14周項目 二維數組

【項目2-帶姓名的成績單】

設score[8]數組中存儲8名同學的c++成績,增加一個數組string name[8]并賦初值,表示同學們的姓名。這兩個數組中,每名同學的姓名與成績的下标要始終保持一緻(例如name[i]和score[i]表示同一位同學(下标為i)的姓名和c++成績,否則會張冠李戴)。

(1)輸出按成績排序後的同學的名單;

(2)輸出按同學姓名排序後的成績單(排序對象是字元串)。

(3)資料由score.txt提供,程式該如何改?(成績值利用excel軟體随機産生,高了的可以得意,低了的請不要介意,照顧下那位墊底老同鞋的情緒。)

    提示:排序中交換score中的元素時,隻要同時也交換name中的相應元素,就可以實作姓名和成績的同步(如果交換成績而不交換姓名,兩者的對應關系就被破壞了。)

【項目3-多科成績單】

某班不超過100名同學。用二維數組score[][4]儲存同學們的高數、英語、c++成績及總成績(在此假設學生的學号為整型的連續值,用數組的行下标作學号)。在此基礎上,完成下面的操作:

(1)輸入學生的實際人數num,在輸入各科的成績時,輸入3科成績後可以自動求出總分,并将資料全儲存到數組中;

(2)輸出各門課及總分的最高成績、最低成績、平均成績。

(3)增加用數組string name[]表示同學們的姓名,使姓名與成績的下标保持一緻(例如name[1]和score[1][0]、score[1][1]、score[1][2]和score[1][3]表示同一位同學的資料)。請在寫上面的程式的基礎上,輸出獲得最高成績的同學的名單(可能有并列第一名哦)。

(4)你現在可以自己構思并實作一個學生成績管理系統了,功能上可以再擴充,資料存儲手段上,将檔案用起來。這是學習中重要的事,不過,這是拓展的内容,甚至放在假期完成,你需要先完成後面的工作。

【項目4-電子詞典】

做一個簡單的電子詞典。在檔案dictionary.txt中,儲存的是英漢對照的一個詞典,詞彙量近8000個,英文與釋義間用’\t’隔開。程式設計式,将檔案中的内容讀到兩個數組e[]和c[]中,分别代表英文和中文,由使用者輸入英文詞,顯示中文意思。運作程式後,支援使用者連續地查詞典,直到輸入“0000”結束,如圖:

  

2014秋C++ 第14周項目 二維數組

    提示:檔案中的詞彙已經排序,故在查找時,用二分查找法提高效率。

【項目5-體會棋盤遊戲中的資料存儲】

定義一個8行8列的二維數組a[8][8]。

(1)為二維數組中的資料賦50以内的随機數(程式模闆中setdata()函數已經完成,利用産生随機數的系統函數實作),可能的取值如圖所示;

2014秋C++ 第14周項目 二維數組

(2)設計函數out()按行輸出二維數組中的資料;

(3)設計函數outdiagonal()輸出從左上到右下對角線上的元素的值,如對圖的資料而言,輸出為48 34 12 31 40 42 34 45;再輸出從右上到左下對角線上的值;

(4)将此數組視為“掃雷”遊戲的界面(實際上掃雷遊戲的界面一般就用二維數組儲存其界面),通過鍵盤輸入一個位置,輸出其周圍八個格子中的資料,如輸入2 2時,輸出34 30 47 29 48 14 12 31(注意:一共八個,不包括該位置上的數)(參見圖中的黃色部分),計算這些數的和并輸出。另外,如果選擇的位置在邊緣或角上時,周圍的格數不夠八個,按實際個數輸出。請用循環有規律地列舉出來各個值,不要采用順序結構逐個羅列。這項功能由函數mine()完成。

(5)設計函數change()改變數組中的值。改變的規則是:從第2行(即a[1]行)開始到最後一行,每一進制素是其正上方元素和右上方元素之和,例如a[1][0]取a[0][0]和a[0][1]之和,a[1][1]取a[0][1]和a[0][2]之和,……。對各行最後一列元素,其右上方無資料,取上一行中的第一個元素,如a[1][7]取a[0][7]和a[0][0]之和。對上圖中的資料,a[1]行的元素将依次為:50(48+2) 27(2+25) 41 30 33 63 60 64(16+48),a[2]行依次為77 68…114。

程式模闆:

【拓展-二維數組更多用處】

(這部分可以不去選擇實踐,看看、想想即可。)中國象棋的棋盤也可以采用二維數組存儲。

(1)下棋程式需要展現相關的規則,例如,馬走日。通過鍵盤輸入一個位置,輸出按“日”字型可以走到的所有位置,及其位置上的數值。例如,在項目6的圖中,輸入2 2時,輸出(0,1,2)(0,3,16) (1,0,9) (1,4,12)……(項目6圖中的背景有斜線的部分。可走到的位置一般為八個,位置在邊緣或角上時,可能不夠八個,按實際輸出)。

(2)馬走日還有“别馬腿”的規則。在任務4的圖中,如果馬腿位置上的數大于25,認為馬腿被别了(實際遊戲中,以該位置是否有棋子進行判斷)。請在(1)的基礎上考慮這一規則,隻輸出所有能走到的位置及數值。

(3)俄羅斯方塊遊戲中的每一個小方塊也用二維數組(一般4*4或8*8)表示,單色遊戲數組元素用0、1即可,彩色的取值不限于0、1。對小方塊的基本操作包括左旋、右旋、反轉等操作。請針對上面的二維數組,實作左旋、右旋、反轉等操作。

(4)jpeg是數字圖像存儲的國際标準。在jpeg編碼規則中,其編碼的基本機關是8*8的圖像“塊”,其中有一個環節叫“z字型編碼”,也即将一個8*8的“塊”中資料按如圖所示的方向取出,形成一個1*64的向量(可以儲存在一個一維數組中)。請輸出前面的8*8的資料塊對應的向量。

2014秋C++ 第14周項目 二維數組

(5)《線性代數》是工程數學的重要組成,在大二時開設,其中将涉及大量矩陣的運算,用于解決工程中的問題。在程式設計實作矩陣操作時,就是二維數組的操作。

【項目6-閱讀程式】

    閱讀下面的程式,寫出程式的運作結果,上機時可以驗證。閱讀程式中,也學習其中的一些表達方式。

1. 

2.

3. 

4. 

5. 

6. 

7.

8. 

9. 

10. 

11.

繼續閱讀