THE FIFTH DAY LEARNING(二维数组 C语言)
二维数组
二维数组
//一维数组(一串羊肉串)
int a[5] = {1, 2, 3, 4, 5};
//二维数组 (好几串羊肉串)
//定义格式
//数据类型数组名[行数][列数] = {值1, 值2, 值3, ...}
int b[2][3] = {1, 2, 3, 4, 5, 6};
int c[2][3] = {{1, 2, 3}, {4, 5, 6}};
//二维数组的个数 = 行数 * 列数
//定义的其他形式
int array1[2][3] = {1, 2, 3};//没有赋值, 默认为0
int arrar2[][3] = {1, 2, 3, 4, 5};//行数可以省略,行数由列数和赋值个数决定
//int array3[2][] = {1, 2, 3, 4, 5};//error, 列数不能省略
*/
/*
//二维数组元素的访问
//格式
//数组名[行标][列标]
//注: 行标和列标都是从0开始
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
printf("%d\n", a[0][0]);
printf("%d\n", a[0][1]);
printf("%d\n", a[0][2]);
printf("%d\n", a[0][3]);
printf("%d\n", a[1][0]);
printf("%d\n", a[1][1]);
printf("%d\n", a[1][2]);
printf("%d\n", a[1][3]);
printf("%d\n", a[2][0]);
printf("%d\n", a[2][1]);
printf("%d\n", a[2][2]);
printf("%d\n", a[2][3]);
//遍历二维数组
for (int i = 0; i < 3; i++) {//外层循环控制行数
for (int j = 0; j < 4; j++) {//内层循环控制列数
printf("%-3d", a[i][j]);
}
printf("\n");
}
//遍历几维数组, 就使用几层的for循环
//修改二维数组某个元素
a[1][2] = 0;
*/
/*
//定义一个6行8列的数组, 并对每一个元素随机赋值, [23, 98]
int a[6][8] = {0};
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 8; j++) {
a[i][j] = arc4random() % (98 - 23 + 1) + 23;
printf("%-3d", a[i][j]);
}
printf("\n");
}
*/
/*
//定义一个2行3列的数组, 随机为每个元素赋值, [10, 20]
//把这个数组的行和列交换, 存放到另一个数组中
int a[2][3] = {0}, b[3][2] = {0};
printf("数组a:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = arc4random() % 11 + 10;
b[j][i] = a[i][j];//交换行列
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("数组b:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("%d ", b[i][j]);
}
printf("\n");
}
*/
/*
//定义一个4行3列的数组, 随机赋值, [30,40]
//求最大值, 并打印最大值的位置
int a[4][3] = {0}, max = 0;
// int row = 0, col = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = arc4random() % 11 + 30;
max = a[i][j] > max ? a[i][j] : max;
printf("%d ",a[i][j]);
}
printf("\n");
}
// for (int i = 0; i < 4; i++) {
// for (int j = 0; j < 3; j++) {
// if (a[i][j] > max) {
// max = a[i][j];
// row = i;
// col = j;
// }
// }
// }
printf("最大值为%d\n", max);
printf("位置:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
if (a[i][j] == max) {
printf("%d行%d列\n", i + 1, j + 1);
}
}
}
*/
/*
//6行9列数组, 随机赋值[66, 99], 求平均值和最小值
int a[6][9] = {0}, min = 99, sum = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 9; j++) {
a[i][j] = arc4random() % (99 - 66 + 1) + 66;
min = a[i][j] < min ? a[i][j] : min;
sum += a[i][j];
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("min = %d\nAvg = %g\n", min, sum / 54.0);
*/
/*
//字符数组: 数组中的元素类型char, 一维数组
//apple
char str[6] = {'a', 'p', 'p', 'l', 'e', '\0'};
//字符串: 字符数组 = 字符串, 一维数组
char str1[] = "apple";
//字符串数组: 数组中的元素都是字符串, 字符串又叫字符数组, 数组嵌套数组, 所以字符串数组是一个二维数组
//"love"
//"is"
//"everything"
char str2[3][11] = {"love", "is", "everything"};
//注: 3代表字符串的个数, 11代表字符串长度
//使用字符串数组
printf("%c\n", str2[0][1]);//o
printf("%c\n", str2[2][4]);//y
//遍历字符串数组, 打印每个元素
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 11; j++) {
if (str2[i][j] == '\0') {
break;
}
printf("%c", str2[i][j]);
}
printf(" ");
}
for (int i = 0; i < 3; i++) {
printf("%s ", str2[i]);
}
*/
/*
//输入一个字符
char c = '0';
printf("\n请输入一个字符:");
scanf("%c", &c);
printf("您输入的是:%c\n", c);
//清空输入缓冲区
rewind(stdin);
printf("\n请输入一个字符:");
scanf("%c", &c);
printf("您输入的是:%c\n", c);
*/
/*
//输入一个字符串
char str[10] = "";//strr[10] = {0};
printf("输入一个字符串:");
scanf("%s", str);//输入一个字符串, 不需要加&
printf("%s", str);
*/
/*
//使用字符串数组, 存你周围人的姓名
char names[4][20] = {"齐天大圣", "八戒", "沙和尚", "齐天小圣"};
unsigned long max = 0;
//比长度, 输出最长的名字
//strlen(names[0]);
for (int i = 0; i < 4; i++) {
unsigned long length = strlen(names[i]);
max = length > max ? length : max;
if (length == max) {
printf("第%d个名字:%s\n", i + 1, names[i]);
}
}
//printf("max = %lu\n", max);
*/
/*
//对整型数组进行冒泡排序
int a[5] = {10, 6, 4, 7, 9};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4 - i; j++) {
if (a[j + 1] < a[j]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("排序结果:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
*/
/*
//对字符串数组, 进行冒泡排序
char string[5][20] = {"dashixiong", "guofucheng", "liuneng", "zhaosi", "xiaoshimei"};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4 - i; j++) {
//对字符串进行比较使用strcmp
int result = strcmp(string[j], string[j + 1]);
if (result > 0) {
//两个字符串交换, 借助使用第三个字符串
char temp[20] = {0};
//字符串又叫字符数组, 数组不能直接参与运算
strcpy(temp, string[j]);
strcpy(string[j], string[j + 1]);
strcpy(string[i + 1], temp);
}
}
}
printf("排序结果:\n");
for (int i = 0; i < 5; i++) {
printf("%s\n",string[i]);
}
*/
//字符串数组
//定义
//char string[i][j]
//注: i:字符串的个数 j: 字符串的长度
//使用
//string[i]: 字符串
//string[i][j]: 字符
//多维数组
//定义格式
//数据类型数组名[维度1][维度2][维度3][...] = {值1, 值2, 值3, ...}
//多维数组的元素个数 = 维度1 * 维度2 * 维度3 * ...
//[层数][行数][列数]
int a[2][3][4] = {0};
//遍历三维数组, 随机为每个元素赋值, [1, 9]
for (int i = 0; i < 2; i++) {//层数
for (int j = 0; j < 3; j++) {//行数
for (int k = 0; k < 4; k++) {//列数
a[i][j][k] = arc4random() % 9 + 1;
printf("%d ", a[i][j][k]);
}
printf("\n");
}
printf("\n");
}