第6章 第2节:二维数组的定义与引用(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 23页
| 48人阅读
| 0人下载

内容正文:

6.2节:二维数组的定义与引用 一、单项选择题 1.若有定义 int a[3][4];,则数组 a 中包含的元素个数是( ) A. 7 B. 12 C. 34 D. 64 2.设有定义 int a[2][3] = {{1, 2}, {3, 4, 5}};,则 a[1][1] 的值是() A. 2 B. 3 C. 4 D. 5 3.若定义 int a[][3]={1, 2, 3, 4, 5, 6, 7};,则数组 a 的第一维长度(行数)为() A. 2 B. 3 C. 4 D. 7 4.在C语言中,二维数组在内存中的存储顺序是() A. 按列优先存储 B. 按行优先存储 C. 随机存储 D. 按元素值大小存储 5.设有定义 int a[2][3] = {1, 2, 3, 4, 5, 6};,则 a[0][2] 的值是() A. 2 B. 3 C. 4 D. 5 6.执行一下代码的输出结果是() int a[2][2] = {{1}, {2}}; printf("%d", a[1][0]); A. 1 B. 2 C. 0 D. 随机值 7.若二维数组a有m行n列,则计算任意元素a[i][j]在数组中位置的公式是() A. i*n + j B. j*m + i C. i*m + j D. j*n + i 8.若有定义 int a[4][4];,则以下能正确引用数组元素的是() A. a[4][4] B. a[0][4] C. a[3][3] D. a[-1][0] 9.以下代码执行后,sum 的值是() int a[2][2] = {{1, 2}, {3, 4}}; int i, j, sum = 0; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) sum += a[i][j]; A. 6 B. 8 C. 10 D. 12 10.下列二维数组定义中,正确的是() A. int a[ ][ ] = {1,2,3,4,5,6}; B. int a[2,3]; C. int a[2][3] = {{1,2},{3,4},{5,6}}; D. int a[][3] = {{1,2,3},{4,5,6}}; 二、填空题。 1.已知int a[][3] = {{1,2,3},{4,5}};,则数组a的行数为___________。 2.若有定义int a[2][3] = {{1},{2,3}};,则a[0][2]的值为___________。 3.若有int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};,则a[1][2]的值为___________。 4.若二维数组a有m行n列,则在内存中,a[i][j]之前有__________个元素。 5.若有int a[2][3] = {1,2,3,4,5,6};,则a[1][0]的值为___________。 6.以下代码段的输出是___________。 int a[2][2] = {{1,2},{3,4}}; printf("%d", a[0][1] + a[1][0]); 7.二维数组a[M][N]中,若行下标 i、列下标 j 均合法,则元素a[i][j]的前一个元素是___________。 8.定义一个 3 行 4 列的整型二维数组,语句为___________。 9.int k[2][3] = {1,2,3,4};,k[1][2]的值为___________。 10.定义int g[2][3] = {1,2,3,4,5,6};,g[1][1]的值为___________。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {{1, 2}, {3, 4}}; printf("%d", a[1][0]); } 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {1, 2, 3, 4, 5, 6}; int i, j; for(i = 0; i < 2; i++) { for(j = 0; j < 3; j++) printf("%d ", a[i][j]); printf(" "); }} 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {{1}, {2}}; printf("%d", a[0][1] + a[1][0]);} 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3], i, j; for(i = 0; i < 2; i++) for(j = 0; j < 3; j++) a[i][j] = i + j; printf("%d", a[1][2]);} 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int i, s = 0; for(i=0; i<2; i++) s += a[i][i]; printf("%d", s);} 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {1,2,3,4,5,6}; int i, s = 0; for(i=0; i<2; i++) s += a[i][1]; printf("%d", s);} 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[3][3] = {1,2,3,4,5,6,7,8,9}; int i, s = 0; for(i=0; i<3; i++) s += a[i][2-i]; printf("%d", s);} 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int t = a[0][0]; a[0][0] = a[1][1]; a[1][1] = t; printf("%d", a[0][0] + a[1][1]);} 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int i, s = 0; for(i=0; i<3; i++) s += a[0][i]; printf("%d", s);} 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int i, s = 0; for(i=0; i<2; i++) s += a[i][1-i]; printf("%d", s);} 四、程序填空题(根据题意,将空缺的语句补上) 1.以下程序将二维数组a的行和列互换后存入数组b中(即矩阵转置)。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int b[3][2]; int i, j; for(i=0; i<2; i++) { for(j=0; j<3; j++) ___________________; } for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("%d ", b[i][j]); printf(" "); }} 2.以下程序查找二维数组a中的最大值。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j, max; max = a[0][0]; for(i=0; i<3; i++) { for(j=0; j<3; j++) { if(__________) max = a[i][j]; } } printf("%d", max);} 3.以下程序将二维数组a的每一行元素之和分别输出。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j, rowSum; for(i=0; i<3; i++) { _________________; for(j=0; j<3; j++) rowSum +=a[i][j]; printf("%d ", rowSum); } } 4.以下程序输出二维数组a的反对角线(从右上到左下)上的元素。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i; for(i=0; i<3; i++) { printf("%d ", __________); } } 5.以下程序将二维数组a的所有元素乘以2后输出。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int i, j; for(i=0; i<2; i++) { for(j=0; j<3; j++) { ___________________; printf("%d ", a[i][j]); } printf(" "); } } 五、编程题。 1. 编写程序,定义一个3行4列的二维整型数组,从键盘输入所有元素的值,然后输出这个数组的所有元素(按行列格式输出)。 2.编写程序,定义一个3行3列的二维数组,从键盘输入所有元素的值,然后找出其中的最大值并输出。 3.编写程序,定义一个2行3列的二维数组,从键盘输入所有元素的值,然后计算并输出所有元素的平均值。 4.编写程序,定义一个3行3列的二维数组,并初始化为{{1,2,3},{4,5,6},{7,8,9}},然后输出其转置矩阵(行列互换)。 5.编写程序,定义一个4行4列的二维数组,从键盘输入所有元素的值,然后计算并输出两条对角线元素之和。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 6.2节:二维数组的定义与引用 一、单项选择题 1.若有定义 int a[3][4];,则数组 a 中包含的元素个数是( ) A. 7 B. 12 C. 34 D. 64 【答案】B 【解析】二维数组的元素总数等于第一维长度乘以第二维长度。此处为3×4=12 个整型元素。 2.设有定义 int a[2][3] = {{1, 2}, {3, 4, 5}};,则 a[1][1] 的值是( ) A. 2 B. 3 C. 4 D. 5 【答案】C 【解析】数组 a 有2行3列。第一行初始化为 {1, 2, 0}(不足补0),第二行初始化为 {3, 4, 5}。a[1][1] 指向第二行第二列的元素,即 4。 3.若定义 int a[][3] = {1, 2, 3, 4, 5, 6, 7};,则数组 a 的第一维长度(行数)为( ) A. 2 B. 3 C. 4 D. 7 【答案】B 【解析】列宽固定为3。初始化列表中有7个元素。第一行填3个(1,2,3),第二行填3个(4,5,6),第三行填1个(7),共需要3行。 4.在C语言中,二维数组在内存中的存储顺序是( ) A. 按列优先存储 B. 按行优先存储 C. 随机存储 D. 按元素值大小存储 【答案】B 【解析】C语言采用“行优先”顺序存储二维数组,即先存放第0行的所有元素,再存放第1行的所有元素,以此类推。 5.设有定义 int a[2][3] = {1, 2, 3, 4, 5, 6};,则 a[0][2] 的值是( ) A. 2 B. 3 C. 4 D. 5 【答案】B 【解析】数据按行填充。第一行(下标0)依次为 1, 2, 3。a[0][2] 即第一行第三个元素,值为3。 6.执行一下代码的输出结果是( ) int a[2][2] = {{1}, {2}}; printf("%d", a[1][0]); A. 1 B. 2 C. 0 D. 随机值 【答案】B 【解析】a[1] 对应第二行,初始化为 {2},即 {2, 0}。a[1][0] 是该行第一个元素,值为2。 7.若二维数组a有m行n列,则计算任意元素a[i][j]在数组中位置的公式是( ) A. i*n + j B. j*m + i C. i*m + j D. j*n + i 【答案】A 【解析】按行存储,前i行共有i*n个元素,加上本行的j个位置,位置为i*n + j(相对基地址的偏移)。 8.若有定义 int a[4][4];,则以下能正确引用数组元素的是( ) A. a[4][4] B. a[0][4] C. a[3][3] D. a[-1][0] 【答案】C 【解析】 下标范围是0~3。A、B、D均发生数组越界。 9.以下代码执行后,sum 的值是( ) int a[2][2] = {{1, 2}, {3, 4}}; int i, j, sum = 0; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) sum += a[i][j]; A. 6 B. 8 C. 10 D. 12 【答案】C 【解析】代码计算数组所有元素之和:1+2+3+4=10 。 10.下列二维数组定义中,正确的是( ) A. int a[ ][ ] = {1,2,3,4,5,6}; B. int a[2,3]; C. int a[2][3] = {{1,2},{3,4},{5,6}}; D. int a[][3] = {{1,2,3},{4,5,6}}; 【答案】D 【解析】A选项必须指定列数或给出完整的初始化列表;B选项下标应用[2][3];C初始化行数超过定义的行数2。 二、填空题。 1.已知int a[][3] = {{1,2,3},{4,5}};,则数组a的行数为___________。 【答案】2 【解析】列数为3,初始化列表给出了两行(第二行不足补0),故为2行。 2.若有定义int a[2][3] = {{1},{2,3}};,则a[0][2]的值为___________。 【答案】0 【解析】第一行:1,0,0;第二行:2,3,0。a[0][2]是第一行第三列,值为0。 3.若有int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};,则a[1][2]的值为___________。 【答案】6 4.若二维数组a有m行n列,则在内存中,a[i][j]之前有__________个元素。 【答案】i*n+j 【解析】按行存储,前i行有i*n个元素,本行前j个元素,共i*n+j个。 5.若有int a[2][3] = {1,2,3,4,5,6};,则a[1][0]的值为___________。 【答案】4 6.以下代码段的输出是___________。 int a[2][2] = {{1,2},{3,4}}; printf("%d", a[0][1] + a[1][0]); 【答案】5 【解析】a[0][1]=2, a[1][0]=3, 和为5。 7.二维数组a[M][N]中,若行下标 i、列下标 j 均合法,则元素a[i][j]的前一个元素是___________。 【答案】a [i][j-1] 【解析】行优先存储,同一行内前一个元素列下标减 1。 8.定义一个 3 行 4 列的整型二维数组,语句为___________。 【答案】int a[3][4]; 【解析】二维数组定义格式:类型 数组名 [行数][列数]; 9.int k[2][3] = {1,2,3,4};,k[1][2]的值为___________。 【答案】0 【解析】未赋值元素补 0。 10.定义int g[2][3] = {1,2,3,4,5,6};,g[1][1]的值为___________。 【答案】5 【解析】第 2 行第 2 列元素为 5。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {{1, 2}, {3, 4}}; printf("%d", a[1][0]); } 【答案】3 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {1, 2, 3, 4, 5, 6}; int i, j; for(i = 0; i < 2; i++) { for(j = 0; j < 3; j++) printf("%d ", a[i][j]); printf(" "); } } 【答案】 1 2 3 4 5 6 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {{1}, {2}}; printf("%d", a[0][1] + a[1][0]); } 【答案】2 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3], i, j; for(i = 0; i < 2; i++) for(j = 0; j < 3; j++) a[i][j] = i + j; printf("%d", a[1][2]); } 【答案】3 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int i, s = 0; for(i=0; i<2; i++) s += a[i][i]; printf("%d", s); } 【答案】5 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {1,2,3,4,5,6}; int i, s = 0; for(i=0; i<2; i++) s += a[i][1]; printf("%d", s); } 【答案】7 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[3][3] = {1,2,3,4,5,6,7,8,9}; int i, s = 0; for(i=0; i<3; i++) s += a[i][2-i]; printf("%d", s); } 【答案】15 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int t = a[0][0]; a[0][0] = a[1][1]; a[1][1] = t; printf("%d", a[0][0] + a[1][1]); } 【答案】5 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int i, s = 0; for(i=0; i<3; i++) s += a[0][i]; printf("%d", s); } 【答案】6 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][2] = {1,2,3,4}; int i, s = 0; for(i=0; i<2; i++) s += a[i][1-i]; printf("%d", s); } 【答案】5 四、程序填空题(根据题意,将空缺的语句补上) 1.以下程序将二维数组a的行和列互换后存入数组b中(即矩阵转置)。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int b[3][2]; int i, j; for(i=0; i<2; i++) { for(j=0; j<3; j++) ___________________; } for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("%d ", b[i][j]); printf(" "); } } 【答案】b[j][i] = a[i][j] 2.以下程序查找二维数组a中的最大值。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j, max; max = a[0][0]; for(i=0; i<3; i++) { for(j=0; j<3; j++) { if(__________) max = a[i][j]; } } printf("%d", max); } 【答案】a[i][j] > max 3.以下程序将二维数组a的每一行元素之和分别输出。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j, rowSum; for(i=0; i<3; i++) { _________________; for(j=0; j<3; j++) rowSum +=a[i][j]; printf("%d ", rowSum); } } 【答案】rowSum = 0 4.以下程序输出二维数组a的反对角线(从右上到左下)上的元素。 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i; for(i=0; i<3; i++) { printf("%d ", __________); } } 【答案】a[i][2-i] 5.以下程序将二维数组a的所有元素乘以2后输出。 #include <stdio.h> main() { int a[2][3] = {{1,2,3},{4,5,6}}; int i, j; for(i=0; i<2; i++) { for(j=0; j<3; j++) { ___________________; printf("%d ", a[i][j]); } printf(" "); } } 【答案】a[i][j] = a[i][j] * 2 五、编程题。 1. 编写程序,定义一个3行4列的二维整型数组,从键盘输入所有元素的值,然后输出这个数组的所有元素(按行列格式输出)。 【参考代码】 #include <stdio.h> main() { int a[3][4]; int i, j; // 输入 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("%d ", a[i][j]); } printf(" "); } } 2.编写程序,定义一个3行3列的二维数组,从键盘输入所有元素的值,然后找出其中的最大值并输出。 【参考代码】 #include <stdio.h> main() { int a[3][3]; int i, j, max; // 输入 for(i=0; i<3; i++) { for(j=0; j<3; j++) { scanf("%d", &a[i][j]); } } // 找最大值 max = a[0][0]; for(i=0; i<3; i++) { for(j=0; j<3; j++) { if(a[i][j] > max) { max = a[i][j]; } } } printf("%d", max); } 3.编写程序,定义一个2行3列的二维数组,从键盘输入所有元素的值,然后计算并输出所有元素的平均值。 【参考代码】 #include <stdio.h> main() { int a[2][3]; int i, j, sum = 0; float avg; // 输入并求和 for(i=0; i<2; i++) { for(j=0; j<3; j++) { scanf("%d", &a[i][j]); sum += a[i][j]; } } avg = sum / 6.0; printf("%.2f", avg); } 4.编写程序,定义一个3行3列的二维数组,并初始化为{{1,2,3},{4,5,6},{7,8,9}},然后输出其转置矩阵(行列互换)。 【参考代码】 #include <stdio.h> main() { int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j; for(i=0; i<3; i++) { for(j=0; j<3; j++) { printf("%d ", a[j][i]); // 行变列 } printf(" "); } } 5.编写程序,定义一个4行4列的二维数组,从键盘输入所有元素的值,然后计算并输出两条对角线元素之和。 【参考代码】 #include <stdio.h> main() { int a[4][4]; int i, j, sum = 0; // 输入 for(i=0; i<4; i++) { for(j=0; j<4; j++) { scanf("%d", &a[i][j]); } } // 计算两条对角线元素之和 for(i=0; i<4; i++) { sum += a[i][i]; // 主对角线 sum += a[i][3-i]; // 副对角线 } // 如果矩阵阶数为奇数,中心元素会被加两次,但本题是4阶,没有中心元素重复问题 printf("%d", sum); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第6章 第2节:二维数组的定义与引用(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第6章 第2节:二维数组的定义与引用(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第6章 第2节:二维数组的定义与引用(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。