1. 程式人生 > >【學習ios之路:C語言】② 二維.三維陣列.字串陣列的應用

【學習ios之路:C語言】② 二維.三維陣列.字串陣列的應用

二.三維陣列
例如:
int a[2][4][3] = {0};

表⽰示整型的三維陣列,2層4⾏3列。元素個數為2*4*3 = 24個.例:隨機產生一個三維陣列,求三維陣列的和.



<span style="font-size:14px;">for (int i = 0; i < 3; i++) { //第一層控制層
        printf("------第%d層-----\n",i+1);
        for (int j = 0; j < 4; j++) {  //第二層控制行
            for (int k = 0; k < 3; k++) {  //第三層控制列
                m[i][j][k] = arc4random() % ( 40 - 20 + 1) +20;
                printf("%d ", m[i][j][k] );
                sum += m[i][j][k];
            }
            printf("\n");//換行
        }
        printf("\n");//換層
    }
    printf("sum = %d \n",sum);</span>



2.隨機生成一個三維陣列,程式設計求深度的平均值,儲存在一個二維數中。
   

 <span style="font-size:14px;"> int a[3][4][5] = {0};//定義一個3層4行5列的三維陣列.取值範圍 10 - 20
     //隨機獲取值
    for (int i = 0; i < 3; i++) {//層
        
        for (int j = 0; j < 4; j++) {//行
            
            for (int k = 0; k < 5; k++) { //列
                a[i][j][k] = arc4random() % (20 - 10 + 1) + 10;
                printf("%d ", a[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
     //求對應深度平均值
    int m[4][5] = {0};//定義一個4行5列的二維陣列,用來儲存深度的和.
     //分析:先層,後列,後行. 先 即在內層.
    for (int i = 0; i < 4; i++) {  //行
        for (int j = 0; j < 5; j++) { //列
            for ( int k = 0; k < 3; k++) {//層
                m[i][j]  += a[k][i][j];
            }
        printf("%.2f  ",m[i][j] * 1.0 / 3);//深度平均值
        // printf("%d ", m[i][j]);
        }
        printf("\n");
    }
</span>


3.字串陣列
  字串陣列:存放多個字串,每一個字串都是用一個一維的字元陣列儲存.本質上:字串陣列就是有多個一維字元陣列組成.
  當定義字串陣列時,列數一定要大於等於最長的字串長度 + 1.
 

   char str[4][6] = {"my333", "you", "hedr", "me"};
    //輸出字串陣列中的單個字元
    printf("%c \n", str[3][1]);//e
    
    //如何訪問字串? 只用訪問到行索引即可.
    printf("%s\n", str[3]);//me,訪問到行數即可.
    
    //交換 you 和 me 的位置;
    char temp[10] = {0}; //儲存臨時字串.
    
    //temp[i] = str[1];字串不能直接賦值,所以用到拷貝.
    strcpy(temp, str[1]);
    //將me拷貝到you裡面
    strcpy(str[1], str[3]);
    //將temp拷貝到str[3]中.
    strcpy(str[3], temp);</span>
    //輸出字串(訪問字串,只獲取行索引,不用獲取列索引)
    for (int i = 0; i < 4; i++) {
        printf("%s \n",str[i]); // my  dme  hder you
    }

   //求字串陣列str中字串的最長長度
  unsigned long max = 0;long len = 0; int index = 0;
    for (int  i = 0 ; i < 4; i++) {
        len  = strlen(str[i]);
        if (max < len) {
            max = len ;
            index = i;
        }
    }
    printf("最長字串為 :%s, 長度為: %ld",str[index], max);




例如:
int a[2][4][3] = {0};
表⽰示整型的三維陣列,2層4⾏3列。元素個數為2*4*3 = 24個.例:隨機產生一個三維陣列,求三維陣列的和.


for (int i = 0; i < 3; i++) { //第一層控制層
        printf("------第%d層-----\n",i+1);
        for (int j = 0; j < 4; j++) {  //第二層控制行
            for (int k = 0; k < 3; k++) {  //第三層控制列
                m[i][j][k] = arc4random() % ( 40 - 20 + 1) +20;
                printf("%d ", m[i][j][k] );
                sum += m[i][j][k];
            }
            printf("\n");//換行
        }
        printf("\n");//換層
    }
    printf("sum = %d \n",sum);



2.隨機生成一個三維陣列,程式設計求深度的平均值,儲存在一個二維數中。


i<span style="font-size:14px;">nt a[3][4][5] = {0};//定義一個3層4行5列的三維陣列.取值範圍 10 - 20
     //隨機獲取值
    for (int i = 0; i < 3; i++) {//層
        
        for (int j = 0; j < 4; j++) {//行
            
            for (int k = 0; k < 5; k++) { //列
                a[i][j][k] = arc4random() % (20 - 10 + 1) + 10;
                printf("%d ", a[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
     //求對應深度平均值
    int m[4][5] = {0};//定義一個4行5列的二維陣列,用來儲存深度的和.
     //分析:先層,後列,後行. 先 即在內層.
    for (int i = 0; i < 4; i++) {  //行
        for (int j = 0; j < 5; j++) { //列
            for ( int k = 0; k < 3; k++) {//層
                m[i][j]  += a[k][i][j];
            }
        printf("%.2f  ",m[i][j] * 1.0 / 3);//深度平均值
        // printf("%d ", m[i][j]);
        }
        printf("\n");
    }
</span>
 

例題:輸入6個字串,並對它們按從小到大的順序排序後輸出.

   
    char str[5][10] = {0};//定義一個字串陣列
    printf("請輸入五個字串:\n");
    for (int i = 0; i < 5; i++) {
        scanf("%s", str[i]); //str[i]就代表地址.
    }
    for (int i = 0; i < 5; i++) {
         printf("%s ", str[i]);
    }
    printf("\n");
    int  max = 0;
    char temp[10] = {0};
    for (int i = 0; i < 5 - 1; i++) {
        for (int j = 0; j < 5 - i - 1; j++) {
            max  = strcmp(str[j], str[j + 1]); //vv ,aa 3,4  //字串比較,只比較首字母.
            if (max > 0) {
                strcpy(temp, str[j]);
                //將me拷貝到you裡面
                strcpy(str[j], str[j + 1]);
                //將temp拷貝到str[3]中.
                strcpy(str[j + 1], temp);
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        printf("%s ", str[i]);
    }