- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例7-5】源程序
7.2.2 二维数组的定义和引用
1、定义
类型名 数组名[行长度]定义一个二维数组a,3行2列,共6个元素
int b[5][10];
定义一个二维数组a,5 行 10 列, 共50 个元素
先定义,后使用 数组元素的引用: 数组名[行下标] [列下标]
二维数组的初始化
1、分行赋初值
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; static int b[4][3] = {{1,2,3},{ },{4,5}};
数组a 1 2 3 4 5 6 7 8 9 2、顺序赋初值
数组b 1 2 0 0 4 5 0 0
3 0 0 0
【例7-8】源程序
day k month tab[leap][k] int day_of_year(int year, int month, int day) 1 1 3 tab[1][1]=31 { int k, leap; 32 2 3 tab[1][2]=29 int tab[2][13]={ 61 3
//二维数组的输入
【例7-6】源程序
i=0 i=0 i=1 i=1 i=2 i=2 j=0 j=1 j=0 j=1 j=0 j=1 a[0][0]=0 a[0][1]=1 a[1][0]=1 a[1][1]=2 a[2][0]=2 a[2][1]=3
}
for(i = 0; i < 3; i++){ for(j = 0; j < 2; j++) printf("%4d", a[i][j]); printf("\n"); } return 0;
15
main函数
}
i j a[i][j] int main(void) 输入 { int row,col,i,j; int a[3][2]; a[0][0]=3 printf("Enter 6 integers:\n") ; 0 0 0 1 a[0][1]=2 for(i = 0; i < 3; i++) //输入 1 0 a[1][0]=10 Enter 6 integers: for(j = 0; j < 2; j++) 1 1 a[1][1]=-9 2 20 a[2][0]=6 3 scanf("%d", &a[i][j]); 2 1 a[2][1]-1 for(i = 0; i < 3; i++){//输出 10 输出-9 for(j = 0; j < 2; j++) 0 a[0][0]=3 6 -10 printf("%4d", a[i][j]); 0 1 a[0][1]=2 printf("\n"); 1 20 a[1][0]=10 3 1 1 a[1][1]=-9 } 10 0 2 -9 a[2][0]=6 row = col = 0; //输入 2 1 a[2][1]=-1 for(i = 0; i < 3; i++) 6 -1 最大值 for(j = 0; j < 2; j++) i j a[i][j] = 10 max = a[1][0]a[row][col] if(a[i][j] > a[row][col]){ 0 0 3 a[0][0] 0 1 2 a[0][0] row = i; col = j; 1 0 10 a[1][0] } 1 1 -9 a[1][0] printf("max=a[%d][%d]=%d\n",row,col,a[row][col]); 2 0 6 a[1][0] return 0; 2 1 -1 a[1][0] } P9
7.2 二维数组
二维数组的定义、引用、初始化 使用二维数组编程
7.2.1 程序解析-求矩阵的最大值
【例 7-5】将1个3*2的矩阵存入1个3*2 的二维数组中,找出最大值以及它的行下 标和列下标,并输出该矩阵。
变量说明: row 记录最大值的行下标 col 记录最大值的列下标 a[row][col] 即为最大值
a[i][j] = i + j(0≤i≤2,0≤j≤1)
int a[3][2]; a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] 计算各数组元素的值 0 1 2 1 2 3
#include <stdio.h> int main(void) { int i, j; int a[3][2]; for(i = 0; i < 3; i++) for(j = 0; j < 2; j++) a[i][j] = i + j;
int a[3][2];
3 行 2 列, 6 个元素 表示1个3行2列的矩阵
二维数组的元素在内存 中按行/列方式存放
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
int a[3][3] = {1,2,3,4,5,6,7,8,9};
static int b[4][3] = {1,2,3,0,0,0,4,5};
省略行长度
对全部元素都赋初值 int a[ ][3]={1,2,3,4,5,6,7,8,9}; 或分行赋初值时,在初值表中列出全部行 static int b[ ][3]={{1,2,3},{},{4,5},{}}
//二维数组的输出
0 1 2
1 2 3
【例7-8】日期计算——二维数组
自定义函数day_of_year(year, month, day),计 算并返回年year、月month和日day对应的是该年 的第几天。
day_of_year(2000, 3, 1) 返回61 day_of_year(1981, 3, 1) 返回60 分析:
行下标和列下标:整型表达式
行下标的取值范围是[0,行长度-1] 列下标的取值范围是[0,列长度-1]
2、引用
int a[3][2]; 3 行 2 列, 共6 个元素
a[0][0] a[1][0] a[2][0] a[0][1] a[1][1] a[2][1]
注:下标不要越界
二维数组在内存中的存放方式
for (k=1; k<month; k++) day = day + tab[leap][k]; return day; }
课堂作业
• 编写main函数,调用【例7-8】的 day_of_year函数,分别输入闰年和非 闰年的年、月、日进行调试,以验证程 序的正确性。 • 输入输出格式: 请输入年:2000
{0,31, 28, 31, 30,31,30,31,31,30,31, 30,31}, {0,31, 29, 31, 30,31,30,31,31,30,31, 30,31} }; day_of_year(2000, 3, 1) 返 回61
leap = (year%4==0&&year%100!=0) || year %400==0;
请输入月:3 请输入日:1 2000.3.1是当年的第61天。
14
#include <stdio.h> int main(void) { int day_of_year(int year, int month, int day); int year,month,day,days; printf("请输入年:"); scanf("%d",&year); printf("请输入月:"); scanf("%d",&month); printf("请输入日:"); scanf("%d",&day); days=day_of_year(year,month,day); printf("%d.%d.%d是当年的第%d天。",year,month,day,days); return 0;
建议不要省略!
数组a 1 2 3 4 5 6 7 8 9
数组b 1 2 0 0 4 5 0 0
3 0 0 0
使用二维数组编程
行下标和列下标分别作循环变量, 通 过二重循环,遍历二维数组 通常将行下标作为外循环的循环变量 列下标 内循环
【例7-5】
【例7-6】生成一个矩阵并输出
定义1个 3*2 的二维数组a,数组元素的值 由下式给出,按矩阵的形式输出a。
月 0 非闰年 0 闰年 0 1 2 3 ……11 31 28 31 30 31 29 31 30 12 31 利用二维数组分别 31 表示非闰年和闰年
int tab[2][13]={ {0,31, 28, 31, 30,31,30,31,31,30,31, 30,31}, {0,31, 29, 31, 30,31,30,31,31,30,31, 30,31} }