实验七__多维数组的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七__多维数组的使用
实验目的:
(1) 掌握二维数组的定义方法、初始化赋值和元素引用;
(2) 二维数组元素的输入/输出、求最值、均值问题的编程方法; 实验环境:
Turbo C for Windows 集成实验与学习环境 6.11 实验要求任务:
1.结合实验所给内容,自行设计实验步骤,认真完成实验。
2.总结实验过程,编写提交实验报告:方案、编程、调试、结果、分析、结论。 实验内容:
二维数组是一个m 行n 列矩阵。即: 1、二维数组的定义与初始化赋值: (1)定义格式: <类型> <数组名>[
表示定义了一个3行4列共12个元素的二维整型数组a ,数组中各元素分别为: a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
可以把二维数组看作为一种特殊的一维数组,即它的每一个元素又是一个一维数组。 (2)二维数组的初始化赋值 二维数组初始化赋值的方法有: ① 所有元素赋初值
给数组的所有元素赋初值的方法有两种:
方法一:{{0行初值},{1行初值},…,{m 行初值}}
即每行一个花括号,花括号间用逗号分隔,全部初值再用一个花括号。 例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 方法二:{0行初值,1行初值,…,m 行初值}
所有初值放在一个花括号中,按数组排列的顺序给各元素赋初值。 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
注意:若对所有元素都赋初值,则定义数组时行数可不指定,而列数必须指定。 例如:
int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或:
int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; ② 部分元素赋初值
{{0行部分初值},{1行部分初值},…,{m 行部分初值}} 例如:
(1)
a21 a22 … a2n A= … … … … …amn
int a[3][4]={{1,2},{5},{9,10,11}};
表示二维数组a 的元素a[0][0]、a[0][1]、a[1][0]、a[2][0]、a[2][1]、a[2][2]赋了初值。
2、二维数组存储方式
按行存放二维数组各数组元素。
即先存第一行元素,再存第二行元素,依次把各行元素存
入一串连续的存储单元中。
例如上节中所定义的a 数组存储在内存中时各数组元素的
排列顺序如图所示。
3、二维数组元素的引用 <数组名>[<下标表达式1>][<下标表达式2>]
下标表达式1=元素行号,下标表达式2=元素列号(行号与列号必须为整型)。
【例1】 通过键盘给一个3行4列的二维数组输入整型数值,并按表格形式输出此数组的所有元素。
程序如下: main() {
int a[3][4], i, j;
printf("Input twelve integers:"); for ( i=0; i<3; i++ ) for ( j=0; j<4; j++ ) scanf(“%d ”, &a[i][j]); for ( i=0; i<3; i++ ) {
for ( j=0; j<4; j++ )
printf(“%5d ”, a[i][j]); printf(“\n ”); } }
程序执行后提示:
Input twelve integers: 1 2 3 4 5 6 7 8 9 10 11
12
1 2 3 4 5 6 7 8 9 10 11 12
思考题:输入两个二维数组A 、B ,数据处理为C=A+B ,最后输出数组C 。如何编程? 【例1】 将一个二维数组的行和列元素互换,形成另一个二维数组,即数组的转置运算。例如:
a 数组
b 数组
1
2 3 4 1 5 9 5 6 7 8 2 6 10 9 10 11 12 3 7 11
4 8 12
图
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
分析:
将a数组转换成b数组,只要将其每个数组元素的两个下标交换即可,即b[j][i]=a[i][j]。程序如下:
main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int b[4][3];
int i, j;
printf("Array a:\n");
for ( i=0; i<3; i++ ) /*输出a数组*/
{
for (j=0;j<4;j++)
printf(“%5d”,a[i][j]);
printf(“\n”);
}
for ( i=0; i<3; i++ ) /*将a数组转置成b数组*/ for ( j=0; j<4; j++ )
b[j][i]=a[i][j];
printf("Array b:\n");
for ( i=0; i<4; i++ ) /*输出b数组*/
{
for ( j=0; j<3; j++ )
printf(“%5d”, b[i][j]);
printf(“\n”);
}
}
程序运行后,输出:
Array a:
1 2 3 4
5 6 7 8
9 10 11 12
Array b:
1 5 9
2 6 10
3 7 11
4 8 12
【例3】某小组有5个学生,考了3门课程,他们的学号及成绩如表4.1所示,试编程求每个学生的平均成绩,并按表格形式输出每个学生的学号、3门课程成绩和平均成绩。
分析:可定义一个具有5行3列的二维数组来存放5个学生的3门课的成绩,数组的每一行的3个元素存放一个学生3门课的成绩,5个学生共5行。还可定义两个具有5个元素的一维数组分别存放5个学生的学号和平均成绩。