天天看點

《C語言及程式設計》實踐項目——二維數組與指針

【項目1-二維數組當函數參數】

定義一個函數來完成對參數數組中元素的求和工作,函數聲明如下:

在以下程式的基礎上,完成對sum函數的定義。

【項目2-多科成績單】

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

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

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

【項目3-各種“棋盤”】

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

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

《C語言及程式設計》實踐項目——二維數組與指針

(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的資料塊對應的向量。

《C語言及程式設計》實踐項目——二維數組與指針

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

繼續閱讀