/* * 18_数组-二维数组.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 二维数组: * 为什么要用二维数组呢; * 例如: 网络班有2个班,每班有5人。 * 要想存储一班的学生的年龄 定义一个一维数组搞定 int ages[5]={18,19,20,18,19}; * 然后将两个班中的所有年龄分开存入一个数组中 int classes[2]={ages,ages}; * 当然,在c语言中,一维数组的元素不能存放一个数组。 * * int classes[2][50]={{18,19,20,18,19},{18,19,20,18,19}}; * 这样就定义一个二维数组,存放二个班的信息。 * * 二维数组的定义 : * float a[3][4]; //3行,4列 3X4的数组 * c语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组, * 这的元素又是一个一维数组。 * * 二维数组的初始化: * int a[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};//分别给二维数组所有元素赋值 * int a[3][4] ={{1},{1},{1}}; //也可以只给元素的一部分元素赋值,其它不赋值的元素被 初始化为0 * 1 0 0 0 * 1 0 0 0 * 1 0 0 0 * int a[3][4]={{1},{1,2},{1,2,3}}; //随便你怎样子弄都行 * 1 0 0 0 * 1 2 0 0 * 1 2 3 0 * * int a[][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};//如果赋值时全部赋值,可以省略第一维的长度,但不能省略第2维的长度。 * int a[][4]={{1,2,3,4},{ },{}};//这样也可以省略 * * 二维数组中的元素排列的顺序是按行存放的,即在内存中先顺序存放第1行的元素,接着再存放第2行的元素 * 用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列的关系。 * 但在内存中,各元素是连续存放的,不是二维的,是线性的。就像二叉树一样。 * * 访问二维数组的元素: * 数组名[下标][下标]; * 如 int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; * a[0][0]; //取得第一个数组中的第一个元素 1 * a[0][3] //取得第一个数组中的第4个元素 4 * a[1][0] //取得第二个数组中的第1个元素 5 * //和一维数组一样,引用数组元素时,下标不要超过数组长度-1。数组角标越界是不报错的,但返回的结果是随机的,无意义的 * */ /** * 将一个二维数组行和列的元素互换,存到另一个二维数组中 * 如 a={{1,2,3},{4,5,6}}; --> b={{1,4},{2,5},{3,6}}; */ void swap_row_column() { int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int b[3][2], i, j; printf("原数组\n"); for (i = 0; i < 2; i++) { //i < 2; 这个2为数组a[2][3]中一维数组的长度 for (j = 0; j < 3; j++) { printf("%5d", a[i][j]); //先打印原数组a b[j][i] = a[i][j]; //将a数组的元素赋值给b数组相应的元素 如 a[0][2] -->b[2][0] 行和列刚好互换 } printf("\n"); } printf("互换后的数组\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 2; j++) { printf("%5d", b[i][j]); //打印新数组b } printf("\n"); } /* * output: 原数组 1 2 3 4 5 6 互换后的数组 1 4 2 5 3 6 */ } //取得二维数组中的最大值,其它思路和一维数组是一样的,都是遍历第一个元素,将最大的保存下来 void array_max_() { int a[3][4] = { { 64, 76, 32, 12 }, { 45, 32, 1, 4 }, { 78, 3, 323, 5 } }; //随机数组 int i, j; //c语言很不爽的就是,for循环里面的变量要在片面定义。妈b,麻烦 int row = 0, colum = 0; //记录最大值所在的行和列 int max = a[0][0]; //一定要给max初始化一个值,否则结果不是你想要的 for (i = 0; i < 3; i++) { //外层循环是控制a[3][4]中的[3],即是二级数组中的第几个数组 for (j = 0; j < 4; j++) { //内层循环控制的是第n个数组中的第n个元素 if (a[i][j] > max) { max = a[i][j]; //记录下最大值, row=i; colum=j; } } } printf("二维数组中的最大值为:%d,坐标为(%d,%d)\n",max,row,colum); //output:二维数组中的最大值为:323,坐标为(2,2) } int main18() { // swap_row_column(); array_max_(); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-26 14:07:03