内容正文:
学科竞赛编程
教研研究院
C++
NOIP
NOI
IOI
1
1
PART ONE
认识二维数组
二维数组的定义和赋值
1)二维数组的定义
类型名 数组名[行长度][列长度];
二维数组的总元素个数: 行长度 * 列长度
例如:int a[2][3];
数组名: a ;
数组元素类型: int;
行长度: 2;
列长度: 3;
总元素个数: 6;
10
20
30
40
50
60
2)二维数组的赋值
int a[2][4]={{1,2,3,4},{5,6,7,8}};
int b[3][4]={{1,2,3,4},{5,6},{7}};
数组a
② 按元素赋值
1 2 3 4
5 6 7 8
数组b
1 2 3 4
5 6 0 0
7 0 0 0
① 按行赋值
int a[2][4]={1,2,3,4,5,6,7,8};
int b[3][4]={1,2,3,4,5,6,0,0,7};
不建议使用按元素赋值。
两行四列
三行四列
例如: 用二维数组存储三个学生的3门考试成绩
三个学生的各科成绩如下:
小明:语文90;数学91;英语92;
小兰:语文94;数学95.5;英语90;
小紫:语文96;数学99.6;英语89;
声明二维数组如下:
float score[3][3]= {{90, 96, 92},{94,95.5,98}, {96, 99.6,89}}
获取小明的数学成绩: score[0][1];
获取小紫的语文成绩: score[2][0];
90 91 92
94 95.5 98
96 99.6 89
2.二维数组和一维数组的关系
二维效组可以被看作是一种特殊的一-维数组:它的元素又是一一个一维数组。
int a[3][4]把a看作是一个一维数组,它有3个元素: a[0]、a[1]、 a[2]每个元素又
是一个包含4个元素的一维数组。
例如:
10
20
30
40
50
60
3. 二维数组的引用
引用时,二维数组的行下标和列下标均以0开始,如上例 a[2][3]={{10,20,30},{40,50,60}};
a[0][0]=10;
a[0][1]=20;
a[0][2]= ?
a[2][0]= ?
和一维数组有什么关系呢?
案例一: 二维数组的输入与输出
(1).使用二维数组画矩形
[问题描述]
用星(*)画出一个矩形,长5颗星,宽3颗星。
[样例输出]
* * * * *
* * * * *
* * * * *
cout<<“*”;
案例分析
for(int i = 1; i <= 5; i++〉
{
cout << "*";
}
第一歩:输出一颗星 * ;
第二歩:输出一排五颗* ;
for(int i = 1; i <= 5; i++)
{
cout << “*”;
cout << endl ;
}
for(int i = 1; i <= 5; i++){
{
cout<<"*";
cout << endl;
}
for(int i = 1; i <= 5; i++){
{
cout << "*" ;
cout << endl;
}
第三步:输出三排,一排五颗 *;
第四步:根据第三步,可以看出我们重复执行了输出 一排五颗*这-步,我们可以用for循环简化我
们的代码。
for(int j = 1; j <= 3; j++){
for(int i = 1; i <= 5; i++)
{
cout << "*";
cout << endl;
}
}
案例二: 矩阵求最值
[问题描述}
有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值 ,以及 其所在的行号和列号.
[样例输入]
1 2 3 4
5 6 7 8
9 10 11 12
[样例输出]
12
3 4
int a[100][100];
int i,j,max=日,mi=0,mj=0;
案例分析
第一步:声明一个整型二维数组a[100][100],声明整型变量i,j分别表示二维数组的行下标和列下标,
声明整型变虽max=0, mi=0 ,mj=0分别表示数组中的最大值,以及最大值的行下标和列下标;
第二步:使用双重for循环输入数组, 并判断输入的数字是否大于max ,如