第五天我们学了C语言中的二维数组和字符串数组。
1.二维数组的定义 : 类型修饰符数组名[包含几个小数组][每个小数组有多少个元素] = {初始值};
// 注意:一维数组可以省略元素个数,二维数组只能省略第一维--小数组的个数
int array[3][4] = {0};
//第一重循环,遍历小数组
for (int i =0; i < 3; i++) {
// 第二重循环, 遍历小数组的元素
for (int j =0; j < 4; j++) {
// 给每个元素赋值,随机数范围0 ~ 49
array[i][j] = arc4random() %50;
// 输出每个元素
printf("%2d ", array[i][j]);
}
//在这相当于是小数组遍历完毕, 添加换行符
printf("\n");
}
int dest[4][3] = {0};
printf("行列交换后:\n");
for (int i =0; i < 4; i++) {
for (int j =0; j < 3; j++) {
// 赋值过程需要注意,行列交换去赋值
dest[i][j] = array[j][i];
printf("%2d ", dest[i][j]);
}
// 美观
printf("\n");
}
练习2.有一个3行4列的二维数组,要求编程找出最大元素,并输出所在的行和列。
// 方法一:
int array[3][4] = {0};
//定义变量保存最大值
int max = 0;
//定义两个变量保存位置
int row = 0, col =0;
//第一重循环,遍历小数组
for (int i =0; i < 3; i++) {
//第二重循环,遍历小数组的元素
for (int j =0; j < 4; j++) {
array[i][j] = arc4random() %50;
printf("%2d ", array[i][j]);
if (max < array[i][j]) {
// 赋值最大值
max = array[i][j];
// 赋值最大值的行和列
row = i;
col = j;
}
}
printf("\n");
}
printf("最大值:%d\n", max);
printf("行:%d,列:%d\n", row, col);
int array[3][4] = {0};
//定义两个变量保存位置
int maxRow = 0, maxCol =0;
//第一重循环,遍历小数组
for (int i =0; i < 3; i++) {
//第二重循环,遍历小数组的元素
for (int j =0; j < 4; j++) {
array[i][j] =arc4random() % 50;
printf("%2d ", array[i][j]);
if (array[i][j] > array[maxRow][maxCol]) {
// 赋值最大值的行和列
maxRow = i;
maxCol = j;
}
}
printf("\n");
}
printf("max = %d\n", array[maxRow][maxCol]);
printf("maxRow = %d, maxCol = %d\n", maxRow, maxCol);
printf("\n");
3.二维数组定义时,元素个数不足时,会自动补齐。
char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};
for (int i =0; i < 4 - 1; i++) {
for (int j =0; j < 4 - i -1 ; j++) {
//条件判断 当strcmp的返回值大于0的时候是降序排列的,需要交换位置
if (strcmp(strings[j], strings[j + 1]) > 0) {
// 交换字符串
// 字符串不能直接赋值,需要用字符串拷贝函数strcpy
char temp[50] = {0};
strcpy(temp, strings[j]);
strcpy(strings[j], strings[j +1]);
strcpy(strings[j +1], temp);
}
}
}
for (int i =0; i < 4; i++) {
printf("%s\n", strings[i]);
}