-----------------------二维数组-----------------------------------------------------------------------------
一个"一维数组"里面的元素又是一个一维数组, 这个数组就是二维数组
定义的语法:
数组元素的类型 数组名 [ 下标1 ] [ 下标2 ];
其中第一个下标表示 "行"
第二个下标表示 "列"
初始化
1, 定义的同时进行初始化
// 完全初始化
int nums[2][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int nums[2][3] = {
1, 2, 3,
4, 5, 6
};
int nums[2][3] = { 1, 2, 3, 4, 5, 6 };
// 不完全初始化
int nums[2][3] = { 1, 2 }; // 二维数组的内存分配是怎样的?
// 注意, 二维数组的第一个下标可以省略
int nums[][3] = { 1, 2, 3, 4, 5, 6 };
2, 先定义后再初始化
与一维数组一样, 是一个值一个值的赋值
------------------------------列平均--行平均--------------------------------------------------------------------
int main(int argc, const char * argv[]) {
int nums[3][5] = {
80, 61, 59, 85, 76,
75, 65, 63, 87, 77,
92, 71, 88, 90, 76
};
// 求行平均
// for(int i = 0; i < 3; i++) {
// int sum = 0;
// // 为每一行的内容
// for(int j = 0; j < 5; j++) {
// sum+=nums[i][j];
// }
// printf("第%d行的平均值为:%lf\n", i+1, sum * 1.0 / 5);
// }
// 求列平均
for(int i = 0; i < 5; i++) {
int sum = 0;
// 为每一列的行内容
for(int j = 0; j < 3; j++) {
sum+=nums[j][i];
}
printf("第%d列的平均值为:%lf\n", i+1, sum * 1.0 / 3);
}
return 0;
--------------------------------计算--行-列-----------------------------------------------------------------
int nums[10][20] = { 1, 2, 3 };
// for (int i = 0; i < ROW; i++) {
// for (int j = 0; j < COL; j++) {
//
// }
// }
//
int cols = sizeof(nums[0]) / sizeof(int);
int rows = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d\t", nums[i][j]);
}
printf("\n");
}
-----------------------------打印最大-----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int nums[5][6];
int cols = sizeof(nums[0]) / sizeof(int);
int rows = sizeof(nums) / sizeof(nums[0]);
// 初始化数组
for(int i =0 ; i< rows; i++) {
for(int j= 0; j < cols; j++) {
nums[i][j] = arc4random_uniform(1000);
printf("%d\t", nums[i][j]);
}
printf("\n");
}
printf("\n\n");
// 求最大
int max = nums[0][0];
int iMax = 0, jMax = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if(max < nums[i][j]) {
max = nums[i][j];
iMax = i;
jMax = j;
}
}
}
printf("最大的是%d\n", max);
printf("在 %d 行 %d 列\n", iMax + 1, jMax + 1);
return 0;
}
------------------------------二维数组排序----------------------------------------------------------------------
#include <stdio.h>
int main(int argc, const char * argv[]) {
int nums[2][3] = {
1, 4, 6, 5, 3, 2
};
// i i++
// 00 01 02
// 10 11 12
// 声明一个一位数组, 长度为 rows * cols
// 将二维数组中的数据存到一维数组中, 排序一维数组
// 在将一维数组的数据放回二维数组中
int *p = &nums[0][0];
// 对它进行排序(指针与数组的用法是一致)
int length = 2 * 3;
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if(p[j] > p[j+1]) {
int temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
return 0;
}
--------------------------二维数组 做参数--------------------------------------------------------------------------
一维数组作为函数参数
1, 数组元素作为函数参数
2, 数组名作为函数参数
二维数组作为函数参数
1, 数组元素作为函数参数, 例如 nums[0][0]
2, 将数组看成一维数组, 元素作为函数参数, 例如 nums[0]
3, 将数组名作为函数参数
二维数组
int nums[2][3]
看成"一维数组"
nums[0]
nums[1]
这里每一个元素又是一个数组
int array[3]
array[0] array[1] array[2]
nums[0] 与 array 的地位是一样, 都是一个一维数组
nums[0][0] nums[0][1] nums[0][2]
*/
// 一维数组元素作为函数参数, 与变量作为函数参数一致
void func1(int num) {
printf("%d\n", num);
}
// 一维数组名作为函数参数, 与二维数组看做成一维数组, 元素作为函数参数一致
void func2(int nums[], int length) {
}
// 二维数组的数组名作为函数参数
// func(1) func(int num)
// func('a') func(char ch)
// func(1.2) func(double dNum)
// func(array) func(int array[10])
void func3(int nums[][3], int rows, int cols) {
}
----------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
// 二维数组的元素作为函数参数, 例如 nums[0][0] func1(nums[0][0]);
// 值传递
#if 0
void func1(int num) {
// printf("%d\n", num);
num *= 2;
}
int main(int argc, const char * argv[]) {
int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
func1(nums[i][j]);
}
printf("\n");
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
printf("%d\t", nums[i][j]);
}
printf("\n");
}
return 0;
}
#endif
#if 0
// 把二维数组看做一维数组, 数组元素作为函数参数
// 地址传递, 引用传递, 函数里与函数外, 是一样
void func2(int nums[], int length) {
for(int i = 0; i < length; i++) {
nums[i] *= 2;
}
}
int main(int argc, const char * argv[]) {
int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
for (int i = 0; i < 3; i++) {
func2(nums[i], 4);
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
printf("%d\t", nums[i][j]);
}
printf("\n");
}
return 0;
}
#endif
// 把二维数组的数组名作为函数参数
// 地址传递, 引用传递, 函数里与函数外, 是一样
void func3(int array[][4], int rows, int cols) {
// 在本函数中操作array,与在main函数中操作nums是一样的
// 重新初始化
int num = arc4random_uniform(1000);
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++){
array[i][j] = num++;
}
}
}
int main(int argc, const char * argv[]) {
int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
printf("%d\t", nums[i][j]);
}
printf("\n");
}
printf("================\n");
func3(nums, 3, 4);
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
printf("%d\t", nums[i][j]);
}
printf("\n");
}
return 0;
}
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------