二维数组
⼆维数组:有两个下标的数组。
定义:类型数组名[常量表达式1] [常量表达式2] = {值1,值2...};
用普通的话来说,就是,二维数组的第一个[ ]表示行,第二个[ ]表示列。
Ø 数组的第一种定义方式:
// //定义二维数组的第一种方式(不直观,不能直接看出第一行是在哪里开始结束) // int array[2][3] = {1,2,3,4,5,6}; |
数组第二种定义方式:
//定义二维数组的第二种方式(直观)
//花括号{},可以区分行{1,2,3}为一行,{4,5,6}为一行 // int array[2][3] = {{1,2,3},{4,5,6}}; // // for (int i = 0; i < 2; i++) { // for (int j = 0 ; j < 3; j ++) { // printf("%d",array[i][j]); // } // printf("\n"); // } |
数组第三种定义方式:(注意:定义二维数组时,可以省略行数,但是一定不能省略列数。元素个数不⾜,会⾃动补0。)
//第三种:可以省略行,但是一定不能省略列 // int array[][] = {1,2,3,4,5,6};//报错 // int array[][] = {{1,2,3},{4,5,6}};//错误的 // int array[2][] = {1,2,3,4,5,6};//只给行,报错
// int array[][3] = {1,2,4,5,6};//只给列,正确 // //打印 // for (int i = 0; i < 2; i++) { // for (int j = 0 ; j < 3; j ++) { // printf("%d",array[i][j]); // } // printf("\n"); // } // //打印结果: 124 // // 560自动补0 // int array1[][3] = {{1,2},{3,4},{5,6}}; // // for (int i = 0; i < 3; i++) { // for (int j = 0 ; j < 3; j ++) { // printf("%d",array1[i][j]); // } // printf("\n"); // } // //打印 // //120 // //340 // //560
|
一些练习:
定义一个三行两列的维维数组
//练习 //定义一个三行两列的维维数组 // int array[3][2] = {{75,60},{62,90},{60,50}}; // // for (int i = 0; i < 3; i++) { // for (int j = 0 ; j < 2; j++) { // printf("%d\t",array[i][j]); // } // printf("\n"); // } // //打印结果 // //500 450 // //62 90 // //66 50 // //求和 // int total = 0; // for (int i = 0; i < 3; i ++) { // for (int j = 0 ; j < 2; j ++) { // total += array[i][j]; // } // } // printf("我们组的总体重为:%d克",total); |
将一个数组的行和列交换,放在另外一个新的数组中去:
//将⼀个⼆维数组的⾏和列交换,存储到另外⼀个数组中去。
// int arr1[2][3] = {{1,2,3 },{4,5,6}}; // int arr2[3][2] = {0}; // // for (int i = 0; i < 3 ; i ++) { // for (int j = 0 ; j < 2; j++ ) { // arr2[i][j] = arr1[j][i]; // // printf("%d\t",arr2[i][j]); // } // printf("\n"); // }
|
关键点:主要是搞清楚规律。这里的规律就是原来的数组的行和列调换位置,就可以得到新的数组。for循环,可以用后面数组来循环,也可以用前面的数组来循环。
定义一个3行4列的数组,找出数组的最大的元素,打印出来,并打印所在的行和列。
//3行4列的数组,找出最大值,输出所在行列。 // int arr[3][4] = {{1,2,3,4322},{5,6,777,8},{99,10,11,12222}}; // //记录最大值和行列 // int x = 0; //行 // int y = 0; //列 // int max = 0; //最大值 // for ( int i = 0 ; i < 3; i ++) { // for ( int j = 0; j < 4; j ++) { // if (arr[i][j] > max) { // max = arr[i][j]; // x = i; // y = j; // } // } // } // printf("最大值为:%d",max); // printf("\n最大的数在第 %d行,第 %d列",x,y); |
与普通的找最大值一个样子。
21、字符串数组
字符串数组本质上是一个二维数组
1、访问某个字符串:数组名[行号]
2、访问某个字符:数组名[行号][列号]
定义方式:
//字符串数组 // char arr1[3][10] = {"iPhone","Android","Windows"}; // //// printf("%c",arr1[0][0]);//输出:i // //// printf("%s",arr1[2]);//只给行号就行。 // // for (int i = 0 ; i < 3; i ++) { // printf("%s\n",arr1[i]); // } // //打印结果:iPhone // Android // Windows |
打印字符串数组时,直接在for里给出行数,就可以了。不用两个for。
一些练习:
创建一个字符串数组(内容是你周围一圈人的姓名),输出最长的字符串长度。
//练习
//创建一个字符串数组(内容是你周围一圈人的姓名),输出最长的字符串长度。 // unsigned long length[20] = {0}; // unsigned long max = 0; // int x = 0; // char names[6][20] = {"nongdahai","qinxiaoqiang","sunqing","qinwei","lvlifeng","liuxiaoqing"}; // for (int i = 0 ; i < 6; i ++) { // length[i] = strlen(names[i]); // } // for (int i = 0; i < 20 ; i ++) { // if(max < length[i]){ // max = length[i]; // x = i; // } // } // printf("%d\n",x); // printf("%lu\n",max); // printf("%s\n",names[x]);
|
字符串数组从小到大排序
//字符串数组从小到大排序 // char names[6][20] = {"nongdahai","qinxiaoqiang","sunqing","qinwei","lvlifeng","liuxiaoqing"}; // // for (int i = 0 ; i < 6 -1 ; i ++) { // for (int j = 0; j < 6 -(i+1); j++) { // if(strcmp(names[j], names[j+1]) > 0){ // char temp[20] = {0}; // strcpy(temp, names[j]); // strcpy(names[j], names[j+1]); // strcpy(names[j+1], temp); // // } // } // // } // for (int i = 0 ; i < 6 ; i ++) { // printf("%s\n",names[i]); // } // //liuxiaoqing // //lvlifeng // //nongdahai // //qinwei // //qinxiaoqiang // //sunqing |
22、三维数组
//三维数组 //2层,3行,4列 int arr[2][3][4] = {0}; //右左法则 |