C语言学习笔记:18_数组-二维数组

来源:互联网 发布:西蒙斯体测数据 编辑:程序博客网 时间:2024/04/30 10:50
/* * 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]); //先打印原数组ab[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;}

0 0