1.长宽相等的矩阵和数组完全两码事,访问行和访问列,不是简单的行列互换访问。要尊重原始数据的行列格式。(只有行和列相同的等形矩阵才适合直接互换)
判断错误的方式,是从arr ][ ]这个式子来判断,一定要明确左[ ]控制行, 右[ ]控制列,然后才再看双层循环,看看行和列的大小有没有出错。
判断错误的方式,是从arr ][ ]这个式子来判断,一定要明确左[ ]控制行, 右[ ]控制列,然后才再看双层循环,看看行和列的大小有没有出错。
//只有行列相等才能这样直接互换 i j 来访问行列。 int main(void) { int arr[5][5]; int i,j; for(i = 0;i < 5;i++)//访问每一行 { for(j = 0;j < 5;j++) { printf("%3d".arr[i][j]); } putchar(10); } for(i = 0;i < 5;i++)//访问每一列 { for(j = 0;j < 5;j++) { printf("%3d".arr[j][i]); } putchar(10); } return 0; }
//错误!访问行和访问列,不是简单的行列互换访问。要尊重原始数据的行列格式。 int main(void) { int arr[3][4]; int i,j; for(i = 0;i < 3;i++)//访问每一行 //正确 { for(j = 0;j < 4;j++) { printf("%3d",arr[i][j]); } putchar(10); } for(i = 0;i < 3;i++)//访问每一列 //错误 说的就是这个 { for(j = 0;j < 4;j++) { printf("%3d",arr[j][i]); } putchar(10); } for(i = 0;i < 4;i++)//访问每一列 //正确,但是写法我觉得垃圾,逻辑容易造成误解。 { for(j = 0;j < 3;j++) { printf("%3d",arr[j][i]); } putchar(10); } for(j = 0;j < 4;j++)//访问每一列 //正确,i控制行,j控制列。习惯性喜欢用ij控制行列。 { for(i = 0;i < 3;i++) { printf("%3d",arr[i][j]); } putchar(10); } return 0; }
2.使用一个嵌套循环访问数组时,同时求行和列内容相关的问题。
在行和列求和时,实现一个嵌套循环内同时计算,
总和==一口气加完==持续慢性小累加
也可同时计算每行和每列的最大值和小最值
见4.13
3.扫描数组时,双重循环与行列下标如何配合,确定扫描每大轮前的初始位置的定位(外层循环+内存循环初始化式决定),以及每小趟扫描时的走向(内层循环决定)
见4.12
4.使用数组指针时各种灵活使用。