第五天我們學了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]);
}