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

原创 2015年07月07日 09:51:25
/*
 * 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言教学--二维数组和指针的理解

对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻.   我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的...
  • lovesummerforever
  • lovesummerforever
  • 2013年11月14日 13:58
  • 8070

关于c语言二维数组与指针的个人理解及处理办法。

此文章简要介绍了二维数组和指针以及函数的处理方法。
  • love1code
  • love1code
  • 2015年02月12日 21:58
  • 1664

任意行列二维数组C语言实现

在C语言中,数组是一个连续的线性存储结构,数组名称即为数组首元素首地址,中括号被C语言解释为指向运算,通过对指针的加法,实现取得相应元素。对二维数组的使用则相当于定义一个二阶指针,可以看做是一个一维数...
  • Judy_c
  • Judy_c
  • 2017年03月14日 10:55
  • 1006

——黑马程序员——C语言中二维数组、字符数组和字符串

-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
  • yhp1095785221
  • yhp1095785221
  • 2015年11月01日 11:19
  • 2266

C语言二维数组的本质

#define _CRT_SECURE_NO_WARNINGS #include #include #include void main(){ int a[3][5], i=0,j=0;...
  • LHN_hpu
  • LHN_hpu
  • 2016年06月24日 16:24
  • 572

c语言二维数组的定义和初始化

二维数组: 用于存放一位数组的数组,被称为二维数组。 #include //二维数组的长度 #define kI 3 #define kJ 4 /** 打印二维数组元素 */...
  • CHANGXIAOTING
  • CHANGXIAOTING
  • 2015年09月03日 00:44
  • 6272

【C语言疯狂讲义】(十二)C语言二维数组

二维i数组     1、概念:     一维数组      相同数据类型的(有序)的数据集合。     二维数组      一维数组的每一个元素又是一个一维数组(嵌套)二维数组   ...
  • liwei3gjob
  • liwei3gjob
  • 2014年11月18日 21:08
  • 1668

C语言:定义指向二维数组的指针变量

C语言:定义指向二维数组的指针变量标签: C语言 二维数组 指针 by 小威威1.引入我们知道,要在函数中处理数组,一般要给函数传递指针。那么,对于一维int数组a[10],我们可以定义一个in...
  • linwh8
  • linwh8
  • 2015年12月17日 21:14
  • 10021

C语言_二维数组

ddddd
  • Damoncw
  • Damoncw
  • 2014年10月21日 08:26
  • 5327

C语言函数编程:二维数组打印平面图形-->死

// 二维数组打印平面图形:死 //在命令行里面输入:color 3y #include #include //定义字符数组打印 死 字 char si[10][15] = { {'$'...
  • u012110719
  • u012110719
  • 2015年04月02日 20:45
  • 1297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言学习笔记:18_数组-二维数组
举报原因:
原因补充:

(最多只允许输入30个字)