• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 二維數組

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    二維數組: 5.2.1 二維數組的一般形式 C語言允許使用多維數組,最簡單的多維數組是二維數組。實際上,二維數組是以一維數組為元素構成的數組,要將d說明成大小為(1 0,2 0)的二維整型數組,可以寫成: int d[10][20] 請留心上面的說明語句, C不像其它大多
    二維數組:


    5.2.1 二維數組的一般形式
    C語言允許使用多維數組,最簡單的多維數組是二維數組。實際上,二維數組是以一維數組為元素構成的數組,要將d說明成大小為(1 0,2 0)的二維整型數組,可以寫成:
    int d[10][20]
    請留心上面的說明語句, C不像其它大多數計算機語言那樣使用逗號區分下標,而是用方
    括號將各維下標括起,并且,數組的二維下標均從0計算。
    與此相似,要存取數組d中下標為( 3,5)的元素可以寫成:
    d [ 3 ] [ 5 ]
    在例5 - 3中,整數1到1 2被裝入一個二維數組。
    [例5 - 3 ]
    main ( )
    {
    int t,i,n u m [ 3 ] [ 4 ]
    for (t=0; t<3; ++t)
    for (i=0;i<4;++i)
    n u m [ t ] [ i ] = ( t * 4 ) + i + 1 ;
    }
    在此例中, n u m [ 0 ] [ 0 ]的值為1,n u m [ 0 ] [ 2 ]的值為3, . . . . . .,n u m [ 2 ] [ 3 ]的值為1 2??梢詫?br> 該數組想象為如下表格:

    二維數組以行—列矩陣的形式存儲。第一個下標代表行,第二個下標代表列,這意味著
    按照在內存中的實際存儲順序訪問數組元素時,右邊的下標比左邊的下標的變化快一些。圖
    5 - 2是一個二維數組在內存中的情形,實際上,第一下標可以認為是行的指針。
    記住,一旦數組被證明,所有的數組元素都將分配相應的存儲空間。對于二維數組可用
    下列公式計算所需的內存字節數:
    行數×列數×類型字節數=總字節數
    因而,假定為雙字節整型,大小為( 1 0,5)的整型數組將需要:1 0×5×2=100 字節
    當二維數組用作函數的參數時,實際上傳遞的是第一個元素(如[ 0 ] [ 0 ])的指針。不過該
    函數至少得定義第二維的長度,這是因為C編譯程序若要使得對數組的檢索正確無誤,就需要
    知道每一行的長度。例如,將要接收大小為( 1 0,1 0)的二維數組的函數,可以說明如下:
    func1 (x)
    int x[ ][10]
    {
    .
    .
    .
    }

    第一維的長度也可指明,但沒有必要。
    C編譯程序對函數中的如下語句:
    X [ 2 ] [ 4 ]
    處理時,需要知道二維的長度。若行長度沒定義,那么它就不可能知道第三行從哪兒開
    始。
    [例5-4] 用一個二維數組存放某一教師任教的各班學生的分數。假定教師有三個班,每班
    最多有三十名學生。注意各函數存取數組的方法。
    #define classes 3
    #define grades 30
    #include <stdio.h>
    main( )
    {
    void enter_grades();
    void disp_grades( );
    int get_grade( );
    int a[classes] [grades];定/*義二維數組,每行存放一個班學生成績*/
    char ch;
    for( ; ;)
    {
    do { /*菜單顯示* /
    printf("(E)nter grades\n");
    printf("(R)eport grades\n");
    p r i n t f ( " ( Q ) u i t \ n " ) ;
    ch=toupper(getchar()); /將*鍵盤輸入字符轉換為大寫*/
    } while(ch!='E' && ch!='R' && ch!='Q');
    switch(ch)
    {
    case 'E':
    enter_grades( );
    b r e a k ;
    case 'R':
    d i s p _ g r a d e s ( g r a d e ) ;
    b r e a k ;
    case 'Q':
    e x i t ( 0 ) ;
    }
    }
    }
    void enter_grades(a)
    int a[][grades];
    {
    int t, i;
    for (t=0;t<classes;t++)
    {
    printf (" class #%d:\n",t+1);
    for (i=0; i<grades; i++)
    a [ t ] [ i ] = g e t _ g r a d e ( i ) ;
    }
    }
    int get_grades(num)
    int num;
    {
    char s[80];
    printf("enter grade for student # %d:,\nn"u m + 1 ) ;
    g e t s ( s ) ;/ *輸入成績* /
    r e t u r n ( a t o i ( s ) ) ;
    }
    void disp_grades(g) /*顯示學生成績* /
    int g[ ][grades];
    {
    int t,i ;
    for(t=0; t<classes; ++t) {
    printf("class # %d:\n,"t+ 1 ) ;
    f o r ( i = 0 ; i < g r a d e s ; + + i )
    printf("grade for student #%d is %d\,ni"+ 1 ,g[ t ] [ i ] ) ;
    }
    }
    我們將實際問題簡化為共有2個班,每班兩個學生,即將程序中的常量定義修改如下:
    #define classes 2
    #define grades 2
    運行程序:
    R U N
    (E)nter grades
    (R)eport grades
    ( Q ) u i t : e
    class #1:
    enter grade for student #17:8
    enter grade for student #289: ¿
    class #2
    enter grade for student #19:8 ¿
    enter grade for student #29:0 ¿
    (E)nter grades
    (R)eport grades
    ( Q ) u i t : r¿
    class #1
    grade for student #1 is 78
    grade for student #2 is 89
    class #2
    grade for student #1 is 98
    grade for student #2 is 90
    (E)nter grades
    (R)eport grades
    (Q)uit :q
    運行程序,我們首先看到一個菜單,選擇“ e”輸入成績,選擇“ r”顯示成績,選擇“q”
    退出。a t o i ( )函數用于將實參字符串轉換為整型。
    5.2.2 字符串數組
    程序設計中經常要用到字符串數組。例如,數據庫的輸入處理程序就要將用戶輸入的命
    令與存在字符串數組中的有效命令相比較,檢驗其有效性??捎枚S字符數組的形式建立字
    符串數組,左下標決定字符串的個數,右下標說明串的最大長度。例如,下面的語句定義了
    一個字符串數組,它可存放3 0個字符串,串的最大長度為8 0個字符:
    char str_array[30][80];
    要訪問單獨的字符串是很容易的,只需標明左下標就可以了。例如,下面的語句以數組
    s t r _ a r r a y中的第三個字符串為參數調用函數gets( )。
    g e t s ( s t r _ a r r a y [ 2 ] ) ;
    該語句在功能上等價于:
    g e t s ( & s t r _ a r r a y [ 2 ] [ 0 ] ) ;
    但第一種形式在專業程序員編制的C語言程序中更為常見。
    為幫助理解字符串數組的用法,研究例5 - 5。它以一個字符串數組為基礎做簡單的文本編輯。
    [例5 - 5 ]
    #include <s t d i o . h >
    #define MAX 100
    #define LEN 80
    char text [MAX][LEN]
    /* 一個非常簡單的文本編輯器* /
    main( )
    {
    register int t,i,j ;
    for(t=0;t<MAX; t++) /*逐行輸入字符串* /
    {
    p r i n t f ( " % d : " ,t ) ;
    g e t s ( t e x t [ t ] ) ;
    if(! text[t][0])
    break; /* 空行退出*/
    }
    f o r ( i = 0 ; i < t ,i++) /*按行,逐個字符輸出字符串* /
    {
    for(j=0; text [i][j];j++)
    putchar(text [i][j]);
    putchar( '\n');
    }
    }
    該程序輸入文本行直至遇到一個空行為止,而后每次一個字符地重新顯示各行。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>