内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第19练,内容是5.2 二维数组的定义、初始化与元素引用。
《C语言》(第五版)一课一练 第19练
5.2 二维数组的定义、初始化与元素引用
一、单选题
1. 以下选项中,正确定义一个3行4列的二维整型数组的是( )
A. int a[3,4];
B. int a(3)(4);
C. int a[3][4];
D. int a[4][3];
2. 已知定义 int b[4][5]; 则引用第2行第3列元素,正确写法是( )
A. b[2][3]
B. b[2,3]
C. b[1,2]
D. b[1][2]
3. 已知 int a[3][3]={{1,2},{4},{5,6}}; 则a[0][2]的值是( )
A. 2
B. 1
C. 0
D. 随机值
4. 已知 int m[2][3]={1,2,3,4,5,6}; 元素6对应的下标是( )
A. m[1][2]
B. m[2][3]
C. m[2][2]
D. m[1][3]
5. 以下程序段执行后,变量s的值是
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}, i, s=0;
for(i=0; i<3; i++)
s += a[i][i];( )
A. 24(所有元素和)
B. 18(第一行加第二行和)
C. 12(首列元素和)
D. 15(对角线元素和)
6. 已知 int arr[2][3]={10,20,30,40,50,60}; 设arr[0][0]地址为2000(sizeof(int)=4),arr[1][1]的地址是( )
A. 2020
B. 2016
C. 2024
D. 2008
7. int a[2][3]={1,2,3,4,5,6}, i, j, max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
if(a[i][j]>max) max=a[i][j];
执行后max的值是( )
A. 6
B. 1
C. 3
D. 4
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}, i;
for (i = 0; i < 3; i++)
printf("%d ", a[2-i][i]);
}
三、案例分析题
9. 以下程序的功能是将3×3的矩阵a转置(行列互换)后存放在矩阵b中。请填空。
#include <stdio.h>
main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int b[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
b[【1】][【2】] = a[【3】][j];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", b[i][j]);
printf("
");
}
}
四、综合应用题
10. 编写一个C程序:定义两个3×3的整型矩阵A和B,从键盘输入两个矩阵的元素值,计算矩阵C=A+B(对应位置元素相加),最后按3行3列的格式输出矩阵C。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第19练,内容是5.2 二维数组的定义、初始化与元素引用。
《C语言》(第五版)一课一练 第19练
5.2 二维数组的定义、初始化与元素引用
一、单选题
1. 以下选项中,正确定义一个3行4列的二维整型数组的是( )
A. int a[3,4];
B. int a(3)(4);
C. int a[3][4];
D. int a[4][3];
【答案】C
【解析】C语言中二维数组的定义格式为:类型说明符 数组名[行数][列数]。C中int a[3][4]定义了3行4列的数组。A使用逗号分隔行列不是C语言语法,B使用圆括号错误,D中a[4][3]定义的是4行3列,与题目要求的3行4列不一致。
2. 已知定义 int b[4][5]; 则引用第2行第3列元素,正确写法是( )
A. b[2][3]
B. b[2,3]
C. b[1,2]
D. b[1][2]
【答案】D
【解析】数组下标从0开始,第2行对应行下标1,第3列对应列下标2,因此引用b[1][2]。b[2][3]引用的是第3行第4列,b[2,3]和b[1,2]不是合法的C语言二维数组下标语法。引用时务必注意行和列均从0开始计数。
3. 已知 int a[3][3]={{1,2},{4},{5,6}}; 则a[0][2]的值是( )
A. 2
B. 1
C. 0
D. 随机值
【答案】C
【解析】二维数组按行初始化,第0行{1,2}提供了a[0][0]=1、a[0][1]=2,a[0][2]未提供初始值,自动赋0。第1行{4}中a[1][0]=4,其余自动为0。第2行{5,6}中a[2][0]=5、a[2][1]=6,a[2][2]自动为0。因此a[0][2]=0。
4. 已知 int m[2][3]={1,2,3,4,5,6}; 元素6对应的下标是( )
A. m[1][2]
B. m[2][3]
C. m[2][2]
D. m[1][3]
【答案】A
【解析】按行存储,{1,2,3,4,5,6}依次填入m[0][0]=1、m[0][1]=2、m[0][2]=3、m[1][0]=4、m[1][1]=5、m[1][2]=6。元素6在第1行第2列,行下标1列下标2。m共定义2行(行下标01),m[2]越界;每行3列(列下标02),m[1][3]也越界。
5. 以下程序段执行后,变量s的值是
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}, i, s=0;
for(i=0; i<3; i++)
s += a[i][i];( )
A. 24(所有元素和)
B. 18(第一行加第二行和)
C. 12(首列元素和)
D. 15(对角线元素和)
【答案】D
【解析】a[i][i]中行下标等于列下标,取出的是主对角线元素。i=0时取a[0][0]=1;i=1时取a[1][1]=5;i=2时取a[2][2]=9。累加得s=1+5+6=...等等,1+5+9=15。该段代码计算了3阶方阵主对角线上元素的总和。
6. 已知 int arr[2][3]={10,20,30,40,50,60}; 设arr[0][0]地址为2000(sizeof(int)=4),arr[1][1]的地址是( )
A. 2020
B. 2016
C. 2024
D. 2008
【答案】B
【解析】C语言中二维数组按行优先存储,元素排列为arr[0][0]、arr[0][1]、arr[0][2]、arr[1][0]、arr[1][1]、arr[1][2]。arr[1][1]是第2行第2列,前面有3(第0行)+1(第1行第0列)=4个元素,偏移量为4*4=16字节。2000+16=2016。
7. int a[2][3]={1,2,3,4,5,6}, i, j, max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
if(a[i][j]>max) max=a[i][j];
执行后max的值是( )
A. 6
B. 1
C. 3
D. 4
【答案】A
【解析】程序用二重循环遍历二维数组a的所有元素,max初始为a[0][0]=1,逐一比较每个元素,一旦发现更大的值就更新max。遍历完成后max的值为数组中最大的元素6。使用嵌套循环遍历二维数组的每一行每一列是处理二维数据的基本方法。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}, i;
for (i = 0; i < 3; i++)
printf("%d ", a[2-i][i]);
}
【答案】7 5 3
【解析】循环变量i从0到2,输出a[2-i][i]:i=0时a[2][0]=7(第2行第0列),i=1时a[1][1]=5(第1行第1列),i=2时a[0][2]=3(第0行第2列)。这三个位置恰好位于副对角线上,输出结果为7 5 3。副对角线的特点是行下标与列下标之和为定值。
三、案例分析题
9. 以下程序的功能是将3×3的矩阵a转置(行列互换)后存放在矩阵b中。请填空。
#include <stdio.h>
main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int b[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
b[【1】][【2】] = a[【3】][j];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", b[i][j]);
printf("
");
}
}
【答案】【1】j
【2】i
【3】i
【解析】矩阵转置的核心是将a的行变为b的列,a的列变为b的行。因此填空应为b[j][i]=a[i][j],即用源矩阵的行下标i对应转置后矩阵的列下标,源矩阵的列下标j对应转置后矩阵的行下标。转置后第0行变为第0列,第1行变为第1列,依此类推。
四、综合应用题
10. 编写一个C程序:定义两个3×3的整型矩阵A和B,从键盘输入两个矩阵的元素值,计算矩阵C=A+B(对应位置元素相加),最后按3行3列的格式输出矩阵C。
【答案】#include <stdio.h>
main()
{
int A[3][3], B[3][3], C[3][3], i, j;
printf("请输入矩阵A的9个元素:
");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &A[i][j]);
printf("请输入矩阵B的9个元素:
");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &B[i][j]);
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
C[i][j] = A[i][j] + B[i][j];
printf("矩阵C = A + B:
");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%4d", C[i][j]);
printf("
");
}
}
【解析】程序定义三个3×3矩阵A、B、C,使用嵌套循环分别输入A和B的元素。计算C[i][j]=A[i][j]+B[i][j]完成矩阵加法。输出时内层循环用%4d控制对齐,每输出完一行后用printf("
")换行,使输出呈现规整的3行3列矩阵形式。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$