《C語言及程式設計》實踐專案——二維陣列與指標
定義一個函式來完成對引數陣列中元素的求和工作,函式宣告如下:
int sum(int array[ ][4],int m,int n); //該函式完成對array陣列中的前m行和n列元素求和
在以下程式的基礎上,完成對sum函式的定義。[參考解答]#include <stdio.h> int sum(int array[ ][4],int m,int n);//該函式完成對array陣列中的前m行和n列元素求和 int main() { int a[4][4]= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; //定義二維陣列的同時進行初始化 int row,col; scanf("%d %d", &row, &col); //輸入行數和列數 printf("%d\n", sum(a, row, col)); //輸出二維陣列前row行前col列的元素的和 return 0; }
【專案2-多科成績單】
某班不超過100名同學。用二維陣列score[][4]儲存同學們的高數、英語、C語言成績及總成績(在此假設學生的學號為整型的連續值,用陣列的行下標作學號)。在此基礎上,完成下面的操作:
(1)輸入學生的實際人數num,在輸入各科的成績時,輸入3科成績後可以自動求出總分,並將資料全儲存到陣列中;
(2)輸出各門課及總分的最高成績、最低成績、平均成績。
[參考解答]#include <stdio.h> void input(double s[][4],int n); //輸入成績 void output(double s[][4],int n); //輸出成績 double max(double s[][4],int n,int i); //求第i門課的最高成績,i=3時是總分 double min(double s[][4],int n,int i); //求第i門課的最低成績 double avg(double s[][4],int n,int i); //求第i門課的平均成績 int main() { int i,num; double score[100][4]; //設一個班最多100人,實際按輸入來 char course[4][10]= {"高等數學","英語","C++","總分"}; printf("輸入學生人數:"); scanf("%d", &num); //(1)輸入成績並求出總分 input(score,num); //(2)輸出成績 output(score,num); //(3)輸出各門課及總分的最高成績、最低成績、平均成績和成績的標準偏差; for(i=0; i<4; ++i) { printf("%s的最高成績是%.2f, ", course[i], max(score,num,i)); printf("最低成績是%.2f, ", min(score,num,i)); printf("平均成績是%.2f ", avg(score,num,i)); printf("\n"); } return 0; }
【專案3-各種“棋盤”】
定義一個8行8列的二維陣列a[8][8]。
(1)為二維陣列中的資料賦50以內的隨機數(程式模板中setdata()函式已經完成,利用產生隨機數的系統函式實現),可能的取值如圖所示;
(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。
程式模板:
#include <stdio.h> #include <time.h> #include <stdlib.h> void setdata(int a[8][8]); //設定隨機數 void out(int a[8][8]); //輸出陣列 void outDiagonal(int a[8][8]); //輸出對角線元素的值 void mine(int a[8][8],int x, int y); //按“掃雷”遊戲的規則輸出相鄰格子 void change(int a[8][8]); //按要求改變數值 int main() { int a[8][8], x, y; setdata(a); out(a); outDiagonal(a); printf("輸入一個位置:"); scanf("%d %d", &x, &y); mine(a,x,y); change(a); out(a); return 0; } void setdata(int a[8][8]) { int i,j; srand(time(NULL));//需要用當前時間作“種子”,以便每次執行取得的序列不同 for(i=0; i<8; i++) for(j=0; j<8; j++) a[i][j]=rand()%50+1; return; } //按行序優先輸出陣列 void out(int a[8][8]) { } //輸出對角線元素的值(從左上到右下、從右上到左下) void outDiagonal(int a[8][8]) { } //按掃雷遊戲規則,輸出a[x][y]周圍的8個數字 void mine(int a[8][8],int x, int y) { } //按題目中所言規則更改元素的值 void change(int a[8][8]) { }
[參考解答]
【拓展-二維陣列更多用處】
(這部分可以不去選擇實踐,看看、想想即可。)中國象棋的棋盤也可以採用二維陣列儲存。
(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的資料塊對應的向量。
(5)《線性代數》是工程數學的重要組成,在大二時開設,其中將涉及大量矩陣的運算,用於解決工程中的問題。在程式設計實現矩陣操作時,就是二維陣列的操作。
相關推薦
《C語言及程式設計》實踐專案——二維陣列與指標
【專案1-二維陣列當函式引數】定義一個函式來完成對引數陣列中元素的求和工作,函式宣告如下:int sum(int array[ ][4],int m,int n); //該函式完成對array陣列中的前m行和n列元素求和在以下程式的基礎上,完成對sum函式的定義。#include <stdio.h&g
《C語言及程式設計》實踐專案——二維陣列
【專案1-折騰二維陣列】建立一個5行4列的二維整型陣列,通過初始化,為陣列中的前兩列的10個元素賦初值,然後:通過鍵盤輸入,使後兩列的10個元素獲得值;按行序優先輸出陣列元素;將所有元素值乘以3後儲存在
C語言及程式設計 實踐參考 迴圈的巢狀流程圖
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言及程式設計 實踐參考 分段函式求值switch語句版
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言及程式設計 實踐參考——個人所得稅計算器if語句版
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言及程式設計 實踐參考——定期存款利息計算器
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言及程式設計 實踐參考 迴圈的巢狀流程圖
迴圈的巢狀流程圖(1)求s=1!+2!+……10!,即求1到10的階乘和[參考解答]或者: (2)求s=1+2^2+3^3+4^4+5^5+6^6,要求n^n不能用求冪的運算直接計算(n^n表示n的n次方)[參考解答]
C語言及程式設計 實踐參考——學生成績統計
【專案1-學生成績統計】 每位同學的資訊學號、姓名、C、高數、英語成績。定義一個學生成績的結構體陣列,其中的資料成員包括學號(char num[13])、姓名(name)、三門課的成績(grade)、總分(score)、均分(average))。 (1)從鍵盤上輸入N
【C語言】一維陣列、二維陣列與指標
一維陣列和指標: 1、一維陣列名: 對於這樣的一維陣列:int a[4]; a作為陣列名就是我們陣列的首地址, a是一個地址常量 . 首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變
【c語言】動態開闢一個二維陣列
// 動態開闢一個二維陣列 #include <stdio.h> #include <stdlib.h> int main() { int i = 0; int j = 0; int line = 0; int row =
一維陣列與指標,二維陣列與指標,指標陣列及陣列指標的概念詳解、例項解析
概念詳解:指標:指標與“int a”,“float b”一樣,也是一種變數,只是指標變數中儲存的是記憶體單元的地址,這是與“int a”和“float b”的本質區別,C語言的精華就在於指標、結構體和連結串列。一維陣列:定義一維陣列之後,即在記憶體中分配一段連續的地址空間,如
剖析C/C++二維陣列與指標的關係
arr也是一個指標,指向一陣列型別元素的首地址。即,arr是一個數組指標(指向陣列首地址的指標)。可以這樣理解:該指標arr指向的元素是陣列型別的,是以陣列為最小單位的。所以,arr與arr[0]值相等,arr+1與arr[1]值相等。 (adsbygoogle = window.
關於二維陣列與指標
1) 陣列 二維陣列可以看作一維陣列,每一行代表一個一維陣列。比如:int a[4][5],可以把a 看成是一個四行的列陣列。此時a代表第0行首地址,a+i即代表第i行首地址;也可以記作&a[i]; 而a[i]有代表一維陣列,所以a[i]也可以表示第i行首地址,相應的a[i]+j則表
詳解二維陣列與指標、指標陣列、陣列指標
int* p=a[0];//此時P是指向一維陣列的指標。P++後,p指向 a[0][1]。 int (*p1)[n];p1=a;p1++後,p1指向a[1][0]; int *p=a[0]; 則陣列a的元素a[1][2]對應的指標為:p+1*4+2 元素a[1][2]
指標的賦值、一維陣列的賦值、二維陣列與指標
1、指標的賦值 int a; int *p; p = &a; 或者 int a; int *p = &a; 2、一維陣列的賦值 int *p,a[i]; p=a;//陣列的首地址傳給了指標變數,則該指標變數指向了該陣列。 或者
二維陣列與指標、指標陣列、陣列指標的用法
二維陣列和指標⑴ 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。我們知道,一個二維陣列在計算機中儲存時,是按照先行後列的順序依次儲存的,當把每一行看作一個整體,即視為一個大的陣列元素時,這個儲存的二維陣列也就變成了一個一維陣列了。而
《C語言及程式設計》實踐專案——一維陣列初步
【專案1 - 陣列大折騰】(1)建立一個有20個元素的整型陣列,通過初始化,為陣列中的前10個元素賦初值,然後通過鍵盤輸入後10個元素的值,從前往後(從第0個到第19個)輸出陣列中元素的值,每5個元素換一行。int main( ) { int a[20]={...};
《C語言及程式設計》實踐專案——利用switch語句解決問題
【專案1:投票表決器】設計一個投票表決器,其功能是:輸入Y、y,列印agree輸入N、n,列印disagree輸入其他,列印lose請在下面程式碼的基礎上,將程式補充完整#include <stdio.h> int main( ) { char c;
《C語言及程式設計初步》第四講實踐專案
編譯環境:Dev-C++ 5.63 //攝氏溫度轉換為華氏溫度 #include <stdio.h> int main() {float C,F;printf("請輸入攝氏溫度值:");s
《C語言及程式設計》實踐專案——用檔案輸入輸出初步
【專案1-由鍵盤到檔案】 (1)從鍵盤輸入一個檔名,以及一個以#結束的字元序列,將輸入的字元儲存到檔案中去。 #include "stdio.h" #include "stdlib.h" in