二维数组定义时,可以不指定第一维的⻓度,但必须给定第二维。
int a[][3] = {1 , 2 , 3 , 4 , 5};
元素个数不⾜足,会⾃自动补⻬齐。
也可以这样定义一个二维数组:
int array[3][4] = {
{1, 2, 3, 4},
{5, 6, 7},
{9, 10, 11, 12}};
字符串数组:存放字符串的数组。
定义字符串数组:
char 数组名[常量表达式1][常量表达式2] = {值1, 值2, ...};
例如: char strings[3][10] = {“iPhone” , “Android” , “win8” };该数组包含三个字符串。
字符串数组 本质上 是二维字符数组
字符串数组元素访问: 1、访问某个字符串:数组名[第一维下标] 2、访问某个字符 :数组名[第一维下标][第⼆维下标]
字符串数组实为 字符型 二维数组。
每个字符串⻓长度 不可超过第⼆维⻓长度-1。每个字符串⽤用数组名加⼀维下标表⽰示。例如a[0] //代表第一个字符串。
1. 随机生成一个三行四列的二维数组,找出并打印最大元素及其下标
int array[3][4] = {0};
int max = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
array[i][j] = arc4random() % 50 + 1;
printf("%-3d", array[i][j]);
max = max > array[i][j] ? max : array[i][j];
}
printf("\n");
}
printf("最大值为%d\n", max);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (max == array[i][j]) {
printf("最大值的下标为:(%d)(%d)\n", i, j);
}
}
}
2、(**)输入 6 个字符串,并对它们按长度从小到大的顺序排序后输出。
char string[7][10000] = {0};
printf("请输入6个字符串以回车分隔开:\n");
for (int i = 0; i < 6; i++) {
scanf("%s", string[i]);
}
for (int i = 0; i < 6 - 1; i++) {
for (int j = 0; j < 6 - i - 1; j++) {
if (strlen(string[j]) > strlen(string[j + 1])) {
char temp[10000] = {0};
strcpy(temp, string[j]);
strcpy(string[j], string[j + 1]);
strcpy(string[j + 1], temp);
}
}
}
printf("按长度从小到大得顺序排列后的字符串为:\n");
for (int i = 0; i < 6; i++) {
printf("%s\n", string[i]);
}
3、(**)随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组 中(相当于一个魔方从上面看)。
int array1[5][5][5] = {0};
int array2[5][5] = {0};
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
int sum = 0;
for (int k = 0; k < 5; k++) {
array1[i][j][k] = arc4random() % 50 + 1;
printf("%-3d ",array1[i][j][k]);
sum += array1[i][j][k];
}
int avg = sum / 5;
array1[i][j][0] = avg;
printf("平均深度为:%d", avg);
printf("\n");
}
printf("\n");
}
printf("存放深度平均值的二维数组为:\n");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
array2[i][j] = array1[i][j][0];
printf("%-3d ", array2[i][j]);
}
printf("\n");
}