如何创建二维数组
//NO.1 如何创建二维数组,固定语法: 类型 数组名[数组长度1][数组长度2];
int array[2][2];
数组长度1:2 → 行
数组长度2:2 → 列
总元素个数:数组长度1 × 数组长度2==行 × 列
最大下标是:数组名[ 数组长度1 - 1 ][ 数组长度2 - 1 ] 最大下标是array[1][1] 不可能是array[2][2]
在内存上的长相:在内存中是一段连续的内存,可以人为地让它有行有列
数组的初始化
数组的遍历 → for循环遍历
//No.1 完整初始化->有几个元素赋几个值
int array1[2][2]={1,2,3,4};
//No.2 默认初始化->缺省初始化 不做初始化其他元素默认为0
int array2[2][2]={1,2};
//No.3 带{}默认初始化 ,一个{}代表一行
int array3[3][4]={{1},{2},{3}}; //第一行第一个元素:1[其他值默认为0],第二个第一个元素:2,第三行第一个元素:3
//No.4 数据完整初始化,数组长度1可以不写
int array[][3]={1,2,3,4,5,6,7,8,9}; //自动推导数组长度1是:3
#include
int main()
{
int array[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("array[%d][%d]=%d\t", i, j, array[i][j]);
}
printf("\n"); //形成行列关键点->二维数组没有行和列之说 列完成的时候换一下行 形成行和列
}
printf("请输入二维数组中的值:\n");
//用for循环嵌套来做输入
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
scanf_s("%d", &array[i][j]);
}
}
printf("你输入的数组是:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("array[%d][%d]=%d\t", i, j, array[i][j]);
}
printf("\n"); //形成行列关键点
}
//scanf 不能接受空格的字符串输入
//gets 接受字符的空格输入
return 0;
}
/*输出*/
array[0][0]=1 array[0][1]=2 array[0][2]=3 array[0][3]=4
array[1][0]=5 array[1][1]=6 array[1][2]=7 array[1][3]=8
array[2][0]=9 array[2][1]=10 array[2][2]=11 array[2][3]=12
请输入二维数组中的值:
1 2 4 5
43 3 21 1
43 3 23 42
你输入的数组是:
array[0][0]=1 array[0][1]=2 array[0][2]=4 array[0][3]=5
array[1][0]=43 array[1][1]=3 array[1][2]=21 array[1][3]=1
array[2][0]=43 array[2][1]=3 array[2][2]=23 array[2][3]=42
二维数组的基本操作
行列数据的操作(excel表数据操作)
行求和
列求和
二维数组充当地图
矩阵变化
#include
int main()
{
int array[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
int rowSum[3] = { 0 }; //有3行的结果
int colSum[4] = { 0 }; //有4列的结果
//求一行的和
for (int i = 0; i < 3; i++) //所有的i相同就是一行
{
for (int j = 0; j < 4; j++)
{
rowSum[i] += array[i][j];
}
}
//求一列的和
for (int j = 0; j < 4; j++) //j相同 先遍历列就可以求一列的和
{
for (int i = 0; i < 3; i++)
{
colSum[j] += array[i][j];
}
}
//特定数字表示特定含义
int map[8][8] =
{
1,1,1,1,1,1,1,1,
1,0,1,1,1,0,1,1,
1,0,1,1,1,0,1,1,
1,0,1,1,1,0,1,1,
1,0,0,0,0,0,1,1,
1,1,1,0,1,1,1,1,
1,1,1,0,1,1,1,1,
1,1,1,1,1,1,1,1
};
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[i][j])
{
case 0: //if(map[i][j]==0)
printf("★"); //一个汉字字符占用两个位置
break;
case 1: //if(map[i][j]==1)
printf(" "); //要打印两个空格才能对齐
break;
}
}
printf("\n");
}
return 0;
}
/*输出*/
★ ★
★ ★
★ ★
★★★★★
★
★
/*
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
//魔方矩阵
4 9 2
3 5 7
8 1 6
//线性代数
//矩阵的乘法. . .
//矩阵的加法. . .
*/
二维数组操作字符串→ 二维数组可以形成行、列特性,一维数组可以存一个字符串,二维数组可以存多个字符串→ 一行存一个字符串
初始化→ 一个{ }就是一行,没有数据的列默认为 ' \0 '
遍历
多个字符串排序
#include
#include
int main()
{
//No.1 二维字符数组一般是用来存储多个字符串->4行20列 一行存一个字符串
char str[4][20] = { {"1.ILoveyou"},{"2.IMissyou"},{"2.我想吃饭"}, {"4.我想睡觉"} }; //注意列不要超过了
//可以用两个下标的方式访问 和数字类的二维数组一样的使用方式 很少这样去用
//No.3 字符串排序->冒泡排序->从小到大排序
char temp[20] = { "" }; //一行存一个字符串|做交换要准备一行出来
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4 - 1 - i; j++)
{
if (strcmp(str[j],str[j+1])>0) //字符串比较也不能直接比较必须要用strcmp
{
//注意点:字符串不能用赋值的方式使用,拷贝操作必须用strcpy
strcpy_s(temp, 20, str[j]);
strcpy_s(str[j], 20, str[j + 1]);
strcpy_s(str[j + 1], 20, temp);
}
}
}
printf("%c\n", str[0][0]); //打印其中的某一个字符
printf("%c\n", str[0][1]);
printf("%c\n", str[0][2]);
printf("%c\n", str[0][3]);
//No.2 数组名[下标]:表示每一行的首地址
for (int i = 0; i < 4; i++)
{
puts(str[i]); //操作字符串用一个下标即可,操作数字类的必须是两个下标
}
printf("请输入四个字符串:"); //让用户输入字符串
for (int i = 0; i < 4; i++)
{
scanf_s("%s", str[i], 20); //str[i]代表的就是每一行的首地址->已经是地址了,所以不需要取地址
}
for (int i = 0; i < 4; i++)
{
printf("%s\n", str[i]);
}
return 0;
}
/*输出*/
1
.
I
L
1.ILoveyou
2.IMiss
2.我想吃饭
4.我想睡觉
请输入四个字符串:hhaha
enter
tab
ctrl
hhaha
enter
tab
ctrl