入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

【C语言】二维数组

创建时间:2017-07-10 投稿人: 浏览次数:233

1、数组名称不可以代表存储区

2、数组名称可以代表数组里第一个存储区的地址

3、可以对数组名称进行sizeof计算,结果是数组里所有存储区的总大小

4、C99规范里可以使用变长数组,声明变长数组的时候可以用变量表示数组里的存储区个数

5、某一次程序执行过程中变长数组里存储区个数不会变化

6、如果程序会多次执行则每次执行的时候数组里包含的存储区个数可能不同

7、变长数组不可以初始化

8、多维数组可以表示存储区的分组情况

9、一维数组不能表示存储区的分组情况

10、二维数组是最常见的多维数组,它只代表了存储区的一次分组情况

11、声明二维数组的时候需要提供两个整数,前一个整数表示分组个数,后一个整数表示每组里的存储区个数

12、使用二维数组名称和两个下标可以表示二维数组里的某个存储区,前一个下标表示分组编号(组下标),后一个下标表示分组内的存储区编号(组内下标)

13、组下标的有效范围从0开始到分组个数减一为止组内下标的有效范围从0开始到组内存储区个数减一为止

14、可以采用多重循环依次处理二维数组里的每个存储区

15、可以把二维数组当作一维数组进行初始化

16、可以对初始化数据进行分组,一组初始化数据用来初始化一组存储区

17、如果可以根据初始化数据的个数计算出分组个数就可以省略数组声明里的分组个数

18、二维数组名称也可以代表数组里第一个存储区的地址

19、对二维数组名称进行sizeof计算结果是数组里所有存储区的总大小

20、二维数组名称也可以只配合一个下标使用,这个下标当组下标用。这个写法表示那一组中最前面那个存储区的地址,这个写法有时候可以当作一维数组使用,这个一维数组由组下标对应组中所有存储区构成

/*
* 一维数组练习
**/
#include <stdio.h>
void exercise_1() {
    int arr[] = {1, 2, 3, 4, 5,};
    printf("arr是%p,&arr[0]是%p
", arr, &arr[0]);
}
/*
 * 用sizeof对数组进行计算时,结果为数组的总大小
 * */
void exercise_2() {
    int arr[] = {1, 2, 3, 4, 5,};
    printf("sizeof(arr)的大小是:%d
",sizeof(arr));
}
/*
 * 变长数组,在c99下可以,编译时输入"-std=c99"
 * */
void exercise_3() {
    int size = 0;
    printf("请输入一个数字:
");
    scanf("%d", &size);
    int arr[size]; //变长数组
    printf("sizeof(arr)的大小是:%d
",sizeof(arr));
}
/*
 * 编写程序,得到一组分数(成绩个数由用户决定)
 * 得到最大成绩,最小成绩,总分
 * 方法一
 * */
void exercise_4() {
    int num = 0;
    int i = 0;
    int max = 0, min = 0, total = 0;
    printf("请输入有几门成绩:
");
    scanf("%d", &num);
    int arr[num];
    printf("请输入成绩:
");
    for(i = 0; i < num; i++) {
        scanf("%d", &arr[i]);
    }
    // 计算最大
    max = arr[0];
    min = arr[0];
    for(i = 0; i < num ; i++) {
        if(arr[i] > max) {
            max = arr[i];
        }
        if(arr[i] < min) {
            min = arr[i];
        }
    }
    //计算总和
    for(i = 0; i < num; i++) {
        total += arr[i];
    }

    printf("最大成绩是:%d 最小成绩是:%d 成绩总和是:%d 
", max, min, total);
}
}
/*
 * 编写程序,得到一组分数(成绩个数由用户决定)
 * 得到最大成绩,最小成绩,总分
 * 方法二
 */
void exercise_5() {
    int num = 0;
    int i = 0;
    int max = 0, min = 0, total = 0;
    printf("请输入有几门成绩:
");
    scanf("%d", &num);
    int arr[num];
    printf("请输入成绩:
");
    for(i = 0; i < num; i++) {
        scanf("%d", &arr[i]);
    //    printf("%d", arr[i]);
    }

        max = min = total = arr[0]; //将第一个成绩赋值
    for(i = 1; i < num; i++) {
        max = max > arr[i] ? max : arr[i];

    //    printf("total:%d max:%d min:%d 
 ", total, max, min);  //测试用
        min = min < arr[i] ? min : arr[i];

      //  printf("total:%d max:%d min:%d 
 ", total, max, min);
        total += arr[i];
      //  printf("total:%d max:%d min:%d 
 ", total, max, min);
    }
    printf("最大成绩是:%d 最小成绩是:%d 成绩总和是:%d 
", max, min, total);
}

int main() {

   // exercise_1();
   // exercise_2();
   // exercise_3();
   //  exercise_4(); 
   exercise_5();
     return 0;
}
/*
* 二维数组练习
**/
#include <stdio.h>
/*
 * 依次处理二维数组每个元素
 * 初始化数组方式一
 * */
void exercise_1() {
    int arr[3][2];//声明一个二维数组,分了3组,每组有2个存储区
    int row = 0, col = 0, tmp = 0;
//    arr[1][0] = 10;
    for(row = 0; row <= 2; row++)
        for(col = 0; col <= 1; col++) {
            arr[row][col] = tmp;
            tmp++;
        }
    for(row = 0; row <= 2; row++) {
        for(col = 0; col <= 1; col++) {
            printf("%d", arr[row][col]);
             }
        printf("
");
    }
}
/*
 * 初始化方式二
 * */
void exercise_2() {
    int arr[3][2] = {1, 2, 3, 4, 5, 6};//少几位补几个0
    int row = 0, col = 0, tmp = 0;
    for(row = 0; row <= 2; row++) {
        for(col = 0; col <= 1; col++) {
            printf("%d", arr[row][col]);
             }
        printf("
");
    }
}
/*
 * 初始化方式三
 * */
void exercise_3() {
    int arr[][2] = {{1, 2},{3},{5},{6}};//初始化,哪一位少了就填0
    int row = 0, col = 0, tmp = 0;
    for(row = 0; row <= 2; row++) {
        for(col = 0; col <= 1; col++) {
            printf("%d", arr[row][col]);
             }
        printf("
");
    }
}

void exercise_4() {
    int arr[3][2] = {0};
    printf("arr是%p,&arr[0][0]是%p
", arr, &arr[0][0]);
    printf("sizeof(arr):%d
", sizeof(arr));
    printf("arr[1]是:%p,&arr[1][0]:%p", &arr[1], &arr[1][0]);
    printf("sizeof(1)是%d",sizeof(arr[1]));
}
/*
 * 二维数组练习
 * */
void exercise_5() {
    int arr[5][5] = {0};
    int row = 0, col = 0;
    printf("输入25个数:
");
    for(row = 0; row <= 4; row++) {
        for(col = 0; col <= 4; col++)
            scanf("%d", &arr[row][col]);
    }

    for(row = 0; row <= 4; row++) {
        for(col = 0; col <= 4; col++)
            printf("%d", arr[row][col]);
        printf("
");
    }
}
/*
 *11112 
 *40002
 *40002
 *40002
 *43333
 *关系:
 * 1: =0行 <=3列
 * 2: <=3行 =4列
 * 3: =4行 >=1列
 * 4: >=1行 =1列
 * */
void exercise_6() {
    int arr[5][5] = {0};
    int row = 0, col = 0;
    for(row = 0; row <= 4; row++) {
        for(col = 0; col <= 4; col++) {
            if(!row && col <= 3) {
                arr[row][col] = 1;
            }
            else if(row <= 3 && col ==4) {
                arr[row][col] = 2;
            }

            else if(row == 4 && col >= 1) {
                arr[row][col] = 3;
            }
            else if(row >= 1 && !col) {
                arr[row][col] = 4;
            }
        }
    }
    for(row = 0; row <= 4; row++) {
        for(col = 0; col <= 4; col++) {
            printf("%d", arr[row][col]);
        }
        printf("
");
    }
}
int main() {
//    exercise_1();
//    exercise_2();
//    exercise_3();
//    exercise_4();
//    exercise_5();
    exercise_6();
    return 0;
}


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像