内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第16练,内容是5.2 二维数组的定义和使用。
《编程语言基础——C语言》(第5版)一课一练 第16练
5.2 二维数组的定义和使用
一、单选题
1. 以下二维数组定义中,合法的是( )
A. int a[3,4];
B. int m=3,n=4; int a[m][n];
C. int a[3][4];
D. int a(3)(4);
2. 定义 int a[3][4]; 则数组a中共有元素个数是( )
A. 7
B. 12
C. 3
D. 4
3. 关于二维数组的初始化,以下说法正确的是( )
A. int a[3][4]={{1,2},{5},{9,10,11}}; 表示为前3行部分赋值
B. 定义二维数组时可以省略列的长度
C. 二维数组不能被部分初始化
D. int a[][4]={{1,2,3,4},{5,6,7,8}}; 数组a的第一维长度由编译器自动确定为2
4. C语言中二维数组在内存中的存储方式是( )
A. 按行优先存储,先存第一行再存第二行
B. 按列优先存储,先存第一列再存第二列
C. 随机存储
D. 按对角线存储
5. 有以下程序段:
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, sum = 0;
for (i = 0; i < 3; i++)
sum += a[i][i];
执行后sum的值是( )
A. 6
B. 12
C. 15
D. 45
6. 定义 int a[3][4]; 则以下对数组元素的引用中,合法的是( )
A. a[2][3]
B. a[3][4]
C. a[3][0]
D. a[0][4]
7. 有以下程序段:
int a[2][3] = {1, 2, 3, 4, 5, 6};
printf("%d", a[1][2]);
输出结果是( )
A. 1
B. 6
C. 4
D. 3
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int i, j, a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%3d", a[j][i]);
printf("
");
}
}
三、程序填空题
9. 以下程序的功能是:输入一个3x3矩阵,输出其转置矩阵(行列互换)。请填空。
#include <stdio.h>
main()
{
int i, j, a[3][3];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
printf("转置矩阵:
");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%3d", ______【1】______);
printf("
");
}
}
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是求3x3矩阵两条对角线元素之和。程序中有1处逻辑缺陷,请指出所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 int i, j, sum = 0, a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
L5 for (i = 0; i < 3; i++)
L6 for (j = 0; j < 3; j++)
L7 if (i == j || i + j == 2)
L8 sum += a[i][j];
L9 printf("sum = %d
", sum);
L10 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第16练,内容是5.2 二维数组的定义和使用。
《编程语言基础——C语言》(第5版)一课一练 第16练
5.2 二维数组的定义和使用
一、单选题
1. 以下二维数组定义中,合法的是( )
A. int a[3,4];
B. int m=3,n=4; int a[m][n];
C. int a[3][4];
D. int a(3)(4);
【答案】C
【解析】二维数组定义格式为:类型说明符 数组名[常量表达式1][常量表达式2]。选项A分隔符错误,选项B中m、n是变量不允许动态定义,选项D括号错误。
2. 定义 int a[3][4]; 则数组a中共有元素个数是( )
A. 7
B. 12
C. 3
D. 4
【答案】B
【解析】二维数组a[3][4]共有3行4列,元素总数为3x4=12。其中行标范围02,列标范围03。
3. 关于二维数组的初始化,以下说法正确的是( )
A. int a[3][4]={{1,2},{5},{9,10,11}}; 表示为前3行部分赋值
B. 定义二维数组时可以省略列的长度
C. 二维数组不能被部分初始化
D. int a[][4]={{1,2,3,4},{5,6,7,8}}; 数组a的第一维长度由编译器自动确定为2
【答案】D
【解析】全部元素赋值时可省略第一维长度,编译器自动确定。选项A是按行部分赋值;选项B可省略第一维但不可省略第二维;选项C二维数组可以部分初始化,未赋值元素自动为0。
4. C语言中二维数组在内存中的存储方式是( )
A. 按行优先存储,先存第一行再存第二行
B. 按列优先存储,先存第一列再存第二列
C. 随机存储
D. 按对角线存储
【答案】A
【解析】C语言采用行优先的方式存储二维数组,即先在内存中顺序存储第一行(行标为0)的所有元素,再存放第二行的所有元素,以此类推。
5. 有以下程序段:
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, sum = 0;
for (i = 0; i < 3; i++)
sum += a[i][i];
执行后sum的值是( )
A. 6
B. 12
C. 15
D. 45
【答案】C
【解析】a[i][i]访问的是主对角线元素:a[0][0]=1, a[1][1]=5, a[2][2]=9。累加和为1+5+9=15。
6. 定义 int a[3][4]; 则以下对数组元素的引用中,合法的是( )
A. a[2][3]
B. a[3][4]
C. a[3][0]
D. a[0][4]
【答案】A
【解析】a[3][4]的行标范围02,列标范围03。a[2][3]在第2行第3列(即最后一行最后一列),是合法的。a[3][4]、a[3][0]、a[0][4]都越界。
7. 有以下程序段:
int a[2][3] = {1, 2, 3, 4, 5, 6};
printf("%d", a[1][2]);
输出结果是( )
A. 1
B. 6
C. 4
D. 3
【答案】B
【解析】按一维形式赋值时,按行优先顺序依次填充:a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6。a[1][2]的值为6。
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
main()
{
int i, j, a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%3d", a[j][i]);
printf("
");
}
}
【答案】 1 4 7
2 5 8
3 6 9
【解析】程序按列优先输出(外循环i为列,内循环j为行)。第一列: a[0][0]=1,a[1][0]=4,a[2][0]=7;第二列: a[0][1]=2,a[1][1]=5,a[2][1]=8;第三列: a[0][2]=3,a[1][2]=6,a[2][2]=9。
三、程序填空题
9. 以下程序的功能是:输入一个3x3矩阵,输出其转置矩阵(行列互换)。请填空。
#include <stdio.h>
main()
{
int i, j, a[3][3];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
printf("转置矩阵:
");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%3d", ______【1】______);
printf("
");
}
}
【答案】【1】a[j][i]
【解析】转置矩阵是将行和列互换,原矩阵a[i][j]的转置为a[j][i]。输出时用a[j][i]即可实现行列互换。
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是求3x3矩阵两条对角线元素之和。程序中有1处逻辑缺陷,请指出所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 int i, j, sum = 0, a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
L5 for (i = 0; i < 3; i++)
L6 for (j = 0; j < 3; j++)
L7 if (i == j || i + j == 2)
L8 sum += a[i][j];
L9 printf("sum = %d
", sum);
L10 }
【答案】程序逻辑本身正确,但中心元素a[1][1]被重复计算(它同时满足i==j和i+j==2)。修改建议:将L7条件改为 if (i == j) sum += a[i][j]; else if (i + j == 2) sum += a[i][j]; 避免中心元素重复累加。
【解析】主对角线条件i==j,副对角线条件i+j==2(n-1=2)。但当n为奇数时,中心元素a[1][1]同时属于两条对角线,用||连接会重复加一次。需要分开处理以避免重复。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$