1. 程式人生 > >《C語言及程式設計》實踐專案——二維陣列與指標

《C語言及程式設計》實踐專案——二維陣列與指標

【專案1-二維陣列當函式引數】
定義一個函式來完成對引數陣列中元素的求和工作,函式宣告如下:
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