高级守护
二维数组
二维数组
1.二维数组的概念:
- 单行或者单列(1个维度)的数组称为一维数组。
- 多行且多列(2个维度)的数组称为二维数组。
2.定义二维数组:
- 二维数组定义的一般格式:
数据类型 数组名[常量表达式1][常量表达式2];
例如:int a[4][3];
定义了一个4行3列的二维整型数组 a。
数组 a **可以存储 4*3=12 个元素。
注意:行和列的标号都是从 0 开始的。
数组a中的元素分别是:
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2],
a[3][0],a[3][1],a[3][2]。
3.二维数组元素的引用:
- 二维数组的元素引用与一维数组元素引用类似。
区别:二维数组元素的引用必须给出两个下标。 - 引用的格式为:
数组名[行下标][列下标] - 如定义二维数组:int a[4][3];
那么a[1][2]就是二维数组 a中的第2行第3列元素。
注意a[4][3]不是对二维数组 a中元素的引用,因为a[4][3] 已经越界了,它并不在定义的二维数组范围之内!
4.二维数组元素的输入输出:
- 以二维数组a[4][3]为例:int a[4][3];
1)输入:
for(i=1;i<=4;i++){ //控制行下标 for(j=1;j<=3;j++){ //控制列下标 cin>>a[i][j]; } }
2)输出:
for(i=1;i<=4;i++){ for(j=1;j<=3;j++){ cout<<a[i][j]<<" "; //每个元素之间用空格间隔 } cout<<endl; //每一行输出结束之后需要换行 }
5.二维数组的行下标、列下标:
- 一个m行n列的二维数组x,如果第一个元素的行、列下标是0、0,那么它的行下标是从0开始,到m-1结束,列下标是从0开始,到n-1结束。此时,二维数组x第a行第b列的元素是x[a-1][b-1]。
- 而如果输入时,二维数组x的行列下标都从1开始,行下标到m结束,列下标到n结束,则第a行第b列的元素就是x[a][b]。
6.二维数组元素的值交换:
a.某两个元素交换
类似于两个变量之间的值交换,需要借助于另外一个中间变量。如:将整型二维数组a的两个元素a[1][1]和a[3][3]进行交换,定义一个中间变量temp:int temp; 然后借助“斜线法则”:
temp=a[1][1];
a[1][1]=a[3][3];
a[3][3]=temp;
完成二维数组元素a[1][1]与a[3][3]值的交换。
b.整行/列元素进行交换
如果交换某两列的元素,则从第一行开始,对每一行这两列的元素进行交换,直到最后一行。
如:交换二维数组a[10][20]第3列和第7列的元素
for(int i=1;i<=10;i++){
int t=a[i][3];
a[i][3]=a[i][7];
a[i][7]=t;
}
同理,如果交换某两行的元素,则从第一列开始,对每一列这两行的元素进行交换,直到最后一列。
课堂练习选讲:
2534 交换矩阵的列
任意给定一个m行n列的矩阵,将第a列和第b列交换,并输出交换后的结果。(1≤a≤m≤100;2≤b≤n≤100)
代码我不发了,因为这个在原版讲义里是完整代码。
1636 二维数组标准输入输出
已知一个m行n列的整型二维数组,要求按照输入的样子原样输出这个二维数组,请各位同学编写程序解决这个问题(0<m,n<10)。
这题代码我也不发了,因为这个在原版讲义里也是完整代码。
这个是我很早以前在火箭班学习时的讲义,现在我已经到创新A班了,希望这份讲义能够对你起到帮助。
缔造者
二维数组、二维数组习题课 课后讲义(火箭v2)
二维数组
1.二维数组的概念:
- 单行或者单列(1个维度)的数组称为一维数组。
- 多行且多列(2个维度)的数组称为二维数组。
2.定义二维数组:
- 二维数组定义的一般格式:
数据类型 数组名[常量表达式1][常量表达式2];
例如:int a[4][3];
定义了一个4行3列的二维整型数组 a。
数组 a **可以存储 4*3=12 个元素。
注意:行和列的标号都是从 0 开始的。
数组a中的元素分别是:
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2],
a[3][0],a[3][1],a[3][2]。
3.二维数组元素的引用:
- 二维数组的元素引用与一维数组元素引用类似。
区别:二维数组元素的引用必须给出两个下标。 - 引用的格式为:
数组名[行下标][列下标] - 如定义二维数组:int a[4][3];
那么a[1][2]就是二维数组 a中的第2行第3列元素。
注意a[4][3]不是对二维数组 a中元素的引用,因为a[4][3] 已经越界了,它并不在定义的二维数组范围之内!
4.二维数组元素的输入输出:
- 以二维数组a[4][3]为例:int a[4][3];
1)输入:
for(i=1;i<=4;i++){ //控制行下标 for(j=1;j<=3;j++){ //控制列下标 cin>>a[i][j]; } }
2)输出:
for(i=1;i<=4;i++){ for(j=1;j<=3;j++){ cout<<a[i][j]<<" "; //每个元素之间用空格间隔 } cout<<endl; //每一行输出结束之后需要换行 }
5.二维数组的行下标、列下标:
- 一个m行n列的二维数组x,如果第一个元素的行、列下标是0、0,那么它的行下标是从0开始,到m-1结束,列下标是从0开始,到n-1结束。此时,二维数组x第a行第b列的元素是x[a-1][b-1]。
- 而如果输入时,二维数组x的行列下标都从1开始,行下标到m结束,列下标到n结束,则第a行第b列的元素就是x[a][b]。
###6.二维数组元素的值交换:
a.某两个元素交换
类似于两个变量之间的值交换,需要借助于另外一个中间变量。如:将整型二维数组a的两个元素a[1][1]和a[3][3]进行交换,定义一个中间变量temp:int temp; 然后借助“斜线法则”:
temp=a[1][1];
a[1][1]=a[3][3];
a[3][3]=temp;
完成二维数组元素a[1][1]与a[3][3]值的交换。
b.整行/列元素进行交换
如果交换某两列的元素,则从第一行开始,对每一行这两列的元素进行交换,直到最后一行。
如:交换二维数组a[10][20]第3列和第7列的元素
for(int i=1;i<=10;i++){
int t=a[i][3];
a[i][3]=a[i][7];
a[i][7]=t;
}
同理,如果交换某两行的元素,则从第一列开始,对每一列这两行的元素进行交换,直到最后一列。
课堂练习选讲:
2534 交换矩阵的列
任意给定一个m行n列的矩阵,将第a列和第b列交换,并输出交换后的结果。(1≤a≤m≤100;2≤b≤n≤100)
#include<iostream> using namespace std; int main() { int x[101][101],m,n,a,b,t; cin>>m>>n>>a>>b; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>x[i][j]; } } for(int i=1;i<=m;i++) //从第1行到第m行,交换每行第a列与第b列的元素 { t=x[i][a]; x[i][a]=x[i][b]; x[i][b]=t; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cout<<x[i][j]<<" "; } cout<<endl; } return 0; }
1636 二维数组标准输入输出
已知一个m行n列的整型二维数组,要求按照输入的样子原样输出这个二维数组,请各位同学编写程序解决这个问题(0<m,n<10)。
#include<iostream> using namespace std; int a[12][12],m,n; int main() { cin>>m>>n; for(int i=0;i<m;i++) { for(int j=0;j<n;j++){ cin>>a[i][j]; } } for(int i=0;i<m;i++) { for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
中级天翼
二维数组:存储多行多列的数据
前面我们学习了一维数组,数组可以用于批量存储数据。
而对于多行多列的数据,如果只用一维数组来存储,可能就会丢失行列信息,比如我们要存储下列数据:
15 8 46
54 1 3
65 3 7
4 5 33
如果用一维数组来存储:int a[12]={15,8,46,54,1,3,65,3,7,4,5,33};确实可以将数据都存起来,但我们没法知道某个数字原本是处于第几行第几列。
这时候用二维数组存储数据会更合适。
定义二维数组的格式
数据类型 数组名[行数][列数];
例如:int a[4][3];
定义了一个4行3列的二维整型数组 a。
数组 a **可以存储 4*3=12 个元素。
注意:行和列的标号都是从 0 开始的。
数组a中的元素分别是:
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2],
a[3][0],a[3][1],a[3][2]。
二维数组的初始化
对于最开始示例中的数据,我们可以定义一个4行3列的二维数组,并初始化赋值:
int a[4][3] = { {15,8,46} , {54,1,3} , {65,3,7} , {4,5,33} };
跟一维数组的初始化差不多,但是每行的数据要用“{}”括起来。
二维数组的输入输出
如果要输入数据到二维数组中,应该用双重循环来实现:
for(int i=0;i<4;i++){ //行下标从0到3
for(int j=0;j<3;j++){ //列下标从0到2
cin>>a[i][j];
}
}
输出二维数组的数据同理,注意输出完一行元素要换一行再输出。
1.二维数组的概念:
- 单行或者单列(1个维度)的数组称为一维数组。
- 多行且多列(2个维度)的数组称为二维数组。
2.定义二维数组:
- 二维数组定义的一般格式:
数据类型 数组名[常量表达式1][常量表达式2];
例如:int a[4][3];
定义了一个4行3列的二维整型数组 a。
数组 a **可以存储 4*3=12 个元素。
注意:行和列的标号都是从 0 开始的。
数组a中的元素分别是:
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2],
a[3][0],a[3][1],a[3][2]。
3.二维数组元素的引用:
- 二维数组的元素引用与一维数组元素引用类似。
区别:二维数组元素的引用必须给出两个下标。 - 引用的格式为:
数组名[行下标][列下标] - 如定义二维数组:int a[4][3];
那么a[1][2]就是二维数组 a中的第2行第3列元素。
注意a[4][3]不是对二维数组 a中元素的引用,因为a[4][3] 已经越界了,它并不在定义的二维数组范围之内!
4.二维数组元素的输入输出:
- 以二维数组a[4][3]为例:int a[4][3];
1)输入:
for(i=1;i<=4;i++){ //控制行下标 for(j=1;j<=3;j++){ //控制列下标 cin>>a[i][j]; } }
2)输出:
for(i=1;i<=4;i++){ for(j=1;j<=3;j++){ cout<<a[i][j]<<" "; //每个元素之间用空格间隔 } cout<<endl; //每一行输出结束之后需要换行 }
5.二维数组的行下标、列下标:
- 一个m行n列的二维数组x,如果第一个元素的行、列下标是0、0,那么它的行下标是从0开始,到m-1结束,列下标是从0开始,到n-1结束。此时,二维数组x第a行第b列的元素是x[a-1][b-1]。
- 而如果输入时,二维数组x的行列下标都从1开始,行下标到m结束,列下标到n结束,则第a行第b列的元素就是x[a][b]。
###6.二维数组元素的值交换:
a.某两个元素交换
类似于两个变量之间的值交换,需要借助于另外一个中间变量。如:将整型二维数组a的两个元素a[1][1]和a[3][3]进行交换,定义一个中间变量temp:int temp; 然后借助“斜线法则”:
temp=a[1][1];
a[1][1]=a[3][3];
a[3][3]=temp;
完成二维数组元素a[1][1]与a[3][3]值的交换。
b.整行/列元素进行交换
如果交换某两列的元素,则从第一行开始,对每一行这两列的元素进行交换,直到最后一行。
如:交换二维数组a[10][20]第3列和第7列的元素
for(int i=1;i<=10;i++){
int t=a[i][3];
a[i][3]=a[i][7];
a[i][7]=t;
}
同理,如果交换某两行的元素,则从第一列开始,对每一列这两行的元素进行交换,直到最后一列。
课堂练习选讲:
2534 交换矩阵的列
任意给定一个m行n列的矩阵,将第a列和第b列交换,并输出交换后的结果。(1≤a≤m≤100;2≤b≤n≤100)
#include<iostream> using namespace std; int main() { int x[101][101],m,n,a,b,t; cin>>m>>n>>a>>b; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>x[i][j]; } } for(int i=1;i<=m;i++) //从第1行到第m行,交换每行第a列与第b列的元素 { t=x[i][a]; x[i][a]=x[i][b]; x[i][b]=t; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cout<<x[i][j]<<" "; } cout<<endl; } return 0; }
1636 二维数组标准输入输出
已知一个m行n列的整型二维数组,要求按照输入的样子原样输出这个二维数组,请各位同学编写程序解决这个问题(0<m,n<10)。
#include<iostream> using namespace std; int a[12][12],m,n; int main() { cin>>m>>n; for(int i=0;i<m;i++) { for(int j=0;j<n;j++){ cin>>a[i][j]; } } for(int i=0;i<m;i++) { for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
初级天翼
二维数组:存储多行多列的数据
前面我们学习了一维数组,数组可以用于批量存储数据。
而对于多行多列的数据,如果只用一维数组来存储,可能就会丢失行列信息,比如我们要存储下列数据:
15 8 46
54 1 3
65 3 7
4 5 33
如果用一维数组来存储:int a[12]={15,8,46,54,1,3,65,3,7,4,5,33};确实可以将数据都存起来,但我们没法知道某个数字原本是处于第几行第几列。
这时候用二维数组存储数据会更合适。
定义二维数组的格式
数据类型 数组名[行数][列数];
例如:int a[4][3];
定义了一个4行3列的二维整型数组 a。
数组 a **可以存储 4*3=12 个元素。
注意:行和列的标号都是从 0 开始的。
数组a中的元素分别是:
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2],
a[3][0],a[3][1],a[3][2]。
二维数组的初始化
对于最开始示例中的数据,我们可以定义一个4行3列的二维数组,并初始化赋值:
int a[4][3] = { {15,8,46} , {54,1,3} , {65,3,7} , {4,5,33} };
跟一维数组的初始化差不多,但是每行的数据要用“{}”括起来。
二维数组的输入输出
如果要输入数据到二维数组中,应该用双重循环来实现:
for(int i=0;i<4;i++){ //行下标从0到3 for(int j=0;j<3;j++){ //列下标从0到2 cin>>a[i][j]; } }
输出二维数组的数据同理,注意输出完一行元素要换一行再输出。