内容正文:
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第20卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(十)二维数组的定义和使用
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第20卷
二维数组的定义和使用 学生练习卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.设有定义:int x[2][3]; 则以下关于二维数组x的叙述中错误的是( )
A.x[0]可以看作是由3个整型元素组成的一维数组
B.x[0]和x[1]是数组名,分别代表不同的地址常量
C.数组x包含6个元素
D.可以用语句:x[0]=0;为数组所有元素赋初值0
2.设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段,则该程序段的作用是计算( )
sum=0;
for(i=0;i<M;i++) sum+=x[i][0]+x[i][N-1];
for(j=1;j<N-1;j++) sum+=x[0][j]+x[M-1][j];
A.矩阵两条对角线元素之和 B.矩阵所有不靠边元素之和
C.矩阵所有元素之和 D.矩阵所有靠边元素之和
3.若有初始化语句:int a[3][4]={0};,则下列叙述中,正确的一项是( )
A.只有元素a[0][0]可以得到初值0
B.此初始化语句不正确
C.数组a中各元素都可以得到初值,但其值不一定为0
D.数组a中每个元素均可得到初值0
4.若有定义:int a[3][4];,则对a数组元素的正确引用是( )
A.a[3][4] B.a[1,3] C.a[1+1][0] D.a(2)(1)
5.以下能对二维数组a进行正确初始化的语句是( )
A.int a[2][ ]={{1,0,1},{5,2,3}};
B.int a[ ][3]={{1,0,1},{5,2,3}};
C.int a[2][4]={1,0,1},{5,4},{5}};
D.int a[ ][3]={{1,0,1,0},{ },{2,3}};
6.下列数组定义中,正确的是( )
A.int a[][2]={1,2,3,4} B.int a[][]={1,2,3,4}
C.int a[2][]={1,2,3,4} D.int a[2,2]={1,2,3,4}
7.若有 int a[2][3] = {0};,则 a[1] 的类型是( )
A.int * B.int[3] C.int** D.int
8.以下代码的功能是( )
void func(int arr[][4], int row) {
for(int i=0; i<row; i++) {
for(int j=0; j<4; j++) {
printf("%d ", arr[i][j]);
}
}
}
A.计算数组总和 B.按行打印数组 C.查找最大值 D.转置数组
9.以下代码的输出是( )
int arr[2][3] = {1,2,3,4,5,6};
printf("%d", arr[1][2]);
A.3 B.4 C.5 D.6
10.若有 int arr[][3] = {{1}, {2,3}};,则 arr[1][2] 的值是( )
A.0 B.1 C.2 D.3
11.以下代码的输出是( )
int arr[][2] = {1,2,3,4,5};
printf("%d", arr[2][1]);
A.0 B.2 C.3 D.4
12.以下关于二维数组初始化的描述,错误的是( )
A.可以省略行数 B.每行的列数必须相同
C.未初始化的元素默认为0 D.可以仅初始化部分行
13.有定义 int a[3][4];,则元素 a[2][3] 的地址与是 等价( )
A.a + 2*4 + 3 B.&a[0][0] + 2*4 + 3 C.a[2] + 3 D.*(a + 2) + 3
14.以下定义二维数组的语句中,正确的是( )
A.int arr[][];
B.int arr[3][4] = {{1,2}, {3}};
C.float arr[2,3];
D.char arr[2][3] = {"ab", "cd", "ef"};
15.有以下定义语句,则不能输出b[6][7]的值的语句是( )
int b[2][3]={2,3,4,5,6,7};int (*m)[3]=b;int *w=*b;
A.printf(“%d”, *(*(b+1)+2)); B.printf(“%d”,w[1][2]);
C.printf(“%d”, m[1][2]); D.printf(“%d”, *(*(m+1)+2));
16.执行以下程序段的输出结果是( )
main()
{char s[4][5]={{'a','\0','b','\0'},{"bc"},"bcd","e\0"};
puts(s[1]);getch();}
A.ab B.bc C.bcd D.e
17.下列定义语句中,能正确定义二维数组的一项是( )
A.int a[ ][3]; B.int a[ ][3]={2*3};
C.int a[ ][3]={ }; D.int a[2][3]={{1},{2},{3,4}};
18.若二维数组a有m列,则在a[i][j]前面的元素个数为( )
A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1
139.执行以下程序段的输出结果是( )
main( )
{int i,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",x[i][2-i]);getch();}
A.159 B.147 C.357 D.369
20.定义如下变量和数组:
Int i;
Int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,};
则下面语句的输出结果是( )
for(i=0;i<4;i++) prinft(“%3d”,x[i][3-i]);
A.1 5 9 13 B.1 6 11 16 C.4 7 10 13 D.4 8 12 16
二、程序设计题(本大题共4小题,每题10分,共40分)
21.代码实现输入两个矩阵 A(m×n)和 B(n×p),输出它们的乘积矩阵 C(m×p)。
22.计算并输出杨辉三角的前10行。杨辉三角的前五行如图所示,其中最左和最右两个数均为1,中间的每个元素等于左上角和右上角两个元素之和。
23.请设计一个程序,实现以下功能:定义一个二维整型数组 matrix[3][4],并通过用户输入为数组的每个元素赋值,计算每行元素的总和,并输出结果。
程序设计要求:
使用嵌套的循环结构来遍历数组的每个元素。
利用用户输入的数据对数组进行初始化。
24.请设计一个程序,实现以下功能:
(1)定义一个二维整型数组 matrix[2][3],并通过用户输入为数组的每个元素赋值。
(2)找出数组中的最大值、最小值,并输出结果。
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第20卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(十)二维数组的定义和使用
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第20卷
二维数组的定义和使用 学生练习卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.设有定义:int x[2][3]; 则以下关于二维数组x的叙述中错误的是( )
A.x[0]可以看作是由3个整型元素组成的一维数组
B.x[0]和x[1]是数组名,分别代表不同的地址常量
C.数组x包含6个元素
D.可以用语句:x[0]=0;为数组所有元素赋初值0
【答案】D
2.设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段,则该程序段的作用是计算( )
sum=0;
for(i=0;i<M;i++) sum+=x[i][0]+x[i][N-1];
for(j=1;j<N-1;j++) sum+=x[0][j]+x[M-1][j];
A.矩阵两条对角线元素之和 B.矩阵所有不靠边元素之和
C.矩阵所有元素之和 D.矩阵所有靠边元素之和
【答案】D
3.若有初始化语句:int a[3][4]={0};,则下列叙述中,正确的一项是( )
A.只有元素a[0][0]可以得到初值0
B.此初始化语句不正确
C.数组a中各元素都可以得到初值,但其值不一定为0
D.数组a中每个元素均可得到初值0
【答案】D
4.若有定义:int a[3][4];,则对a数组元素的正确引用是( )
A.a[3][4] B.a[1,3] C.a[1+1][0] D.a(2)(1)
【答案】C
5.以下能对二维数组a进行正确初始化的语句是( )
A.int a[2][ ]={{1,0,1},{5,2,3}};
B.int a[ ][3]={{1,0,1},{5,2,3}};
C.int a[2][4]={1,0,1},{5,4},{5}};
D.int a[ ][3]={{1,0,1,0},{ },{2,3}};
【答案】B
6.下列数组定义中,正确的是( )
A.int a[][2]={1,2,3,4} B.int a[][]={1,2,3,4}
C.int a[2][]={1,2,3,4} D.int a[2,2]={1,2,3,4}
【答案】A
【详解】二维数组中,第一维长度可省,第二维不可省。
7.若有 int a[2][3] = {0};,则 a[1] 的类型是( )
A.int * B.int[3] C.int** D.int
【答案】A
8.以下代码的功能是( )
void func(int arr[][4], int row) {
for(int i=0; i<row; i++) {
for(int j=0; j<4; j++) {
printf("%d ", arr[i][j]);
}
}
}
A.计算数组总和 B.按行打印数组 C.查找最大值 D.转置数组
【答案】B
9.以下代码的输出是( )
int arr[2][3] = {1,2,3,4,5,6};
printf("%d", arr[1][2]);
A.3 B.4 C.5 D.6
【答案】D
10.若有 int arr[][3] = {{1}, {2,3}};,则 arr[1][2] 的值是( )
A.0 B.1 C.2 D.3
【答案】A
11.以下代码的输出是( )
int arr[][2] = {1,2,3,4,5};
printf("%d", arr[2][1]);
A.0 B.2 C.3 D.4
【答案】A
12.以下关于二维数组初始化的描述,错误的是( )
A.可以省略行数 B.每行的列数必须相同
C.未初始化的元素默认为0 D.可以仅初始化部分行
【答案】B
13.有定义 int a[3][4];,则元素 a[2][3] 的地址与是 等价( )
A.a + 2*4 + 3 B.&a[0][0] + 2*4 + 3 C.a[2] + 3 D.*(a + 2) + 3
【答案】C
14.以下定义二维数组的语句中,正确的是( )
A.int arr[][];
B.int arr[3][4] = {{1,2}, {3}};
C.float arr[2,3];
D.char arr[2][3] = {"ab", "cd", "ef"};
【答案】B
15.有以下定义语句,则不能输出b[6][7]的值的语句是( )
int b[2][3]={2,3,4,5,6,7};int (*m)[3]=b;int *w=*b;
A.printf(“%d”, *(*(b+1)+2)); B.printf(“%d”,w[1][2]);
C.printf(“%d”, m[1][2]); D.printf(“%d”, *(*(m+1)+2));
【答案】B
16.执行以下程序段的输出结果是( )
main()
{char s[4][5]={{'a','\0','b','\0'},{"bc"},"bcd","e\0"};
puts(s[1]);getch();}
A.ab B.bc C.bcd D.e
【答案】B
17.下列定义语句中,能正确定义二维数组的一项是( )
A.int a[ ][3]; B.int a[ ][3]={2*3};
C.int a[ ][3]={ }; D.int a[2][3]={{1},{2},{3,4}};
【答案】B
18.若二维数组a有m列,则在a[i][j]前面的元素个数为( )
A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1
【答案】B
139.执行以下程序段的输出结果是( )
main( )
{int i,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",x[i][2-i]);getch();}
A.159 B.147 C.357 D.369
【答案】C
20.定义如下变量和数组:
Int i;
Int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,};
则下面语句的输出结果是( )
for(i=0;i<4;i++) prinft(“%3d”,x[i][3-i]);
A.1 5 9 13 B.1 6 11 16 C.4 7 10 13 D.4 8 12 16
【答案】C
【分析】行0: {1, 2, 3, 4}
行1: {5, 6, 7, 8}
行2: {9,10,11,12}
行3: {13,14,15,16}
【详解】循环for(i=0;i<4;i++)中,每次输出x[i][3-i]:
当i=0:x[0][3] → 第0行第3列 → 4
当i=1:x[1][2] → 第1行第2列 → 7
当i=2:x[2][1] → 第2行第1列 → 10
当i=3:x[3][0] → 第3行第0列 → 13
因此输出为:4 7 10 13
二、程序设计题(本大题共4小题,每题10分,共40分)
21.代码实现输入两个矩阵 A(m×n)和 B(n×p),输出它们的乘积矩阵 C(m×p)。
【答案】#include <stdio.h>
int main() {
int m, n, p;
// 输入矩阵A的维度并读取矩阵A
scanf("%d %d", &m, &n);
int a[100][100];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
// 输入矩阵B的维度并读取矩阵B
scanf("%d %d", &n, &p);
int b[100][100];
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
scanf("%d", &b[i][j]);
}
}
// 计算矩阵乘积
int c[100][100] = {0};
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
// 输出结果矩阵
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
printf("%d ", c[i][j]);
}
printf("
");
}
return 0;
}
22.计算并输出杨辉三角的前10行。杨辉三角的前五行如图所示,其中最左和最右两个数均为1,中间的每个元素等于左上角和右上角两个元素之和。
【答案】#include <stdio.h>
int main() {
int arr[10][10] = { 0 };
int i = 0, j = 0;
arr[0][0] = 1;
printf("%d
", arr[0][0]);
for (i = 1; i < 10; i++) {
arr[i][0] = 1;
printf("%d ", arr[i][0]);
if (i > 1) {
for (j = 1; j < i; j++) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
printf("%d ", arr[i][j]);
}
}
arr[i][i] = 1;
printf("%d ", arr[i][i]);
printf("
");
}
return 0;
}
23.请设计一个程序,实现以下功能:定义一个二维整型数组 matrix[3][4],并通过用户输入为数组的每个元素赋值,计算每行元素的总和,并输出结果。
程序设计要求:
使用嵌套的循环结构来遍历数组的每个元素。
利用用户输入的数据对数组进行初始化。
【答案】#include <stdio.h>
int main() {
int matrix[3][4];
// 输入元素值
printf("请输入二维数组matrix[3][4]的元素值:
");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 计算每行元素的总和
for (int i = 0; i < 3; i++) {
int rowSum = 0; // 每行元素的总和
for (int j = 0; j < 4; j++) {
rowSum += matrix[i][j];
}
printf("第 %d 行元素的总和为: %d
", i+1, rowSum);
}
return 0;
}
【详解】程序首先定义了一个二维整型数组 matrix[3][4]。
接下来,通过嵌套的循环结构,使用 scanf 函数分别为二维数组的每个元素赋值。
然后,程序进入下一个嵌套的循环结构,用于计算每行元素的总和。对于每行来说,定义一个变量 rowSum 用于存储该行元素的总和,初始值为0。通过遍历每行的每个元素,并累加到 rowSum 变量中。
最后,在每次遍历完一行后,使用 printf 函数输出该行元素的总和。
24.请设计一个程序,实现以下功能:
(1)定义一个二维整型数组 matrix[2][3],并通过用户输入为数组的每个元素赋值。
(2)找出数组中的最大值、最小值,并输出结果。
【答案】#include <stdio.h>
int main() {
int matrix[2][3];
// 输入元素值
printf("请输入二维数组matrix[2][3]的元素值:
");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &matrix[i][j]);
}
}
int max = matrix[0][0];
int min = matrix[0][0];
// 查找最大值和最小值
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
}
if (matrix[i][j] < min) {
min = matrix[i][j];
}
}
}
printf("最大值: %d
", max);
printf("最小值: %d
", min);
return 0;
}
【详解】程序首先定义了一个二维整型数组 matrix[2][3]。
接下来,通过嵌套的循环结构,使用 scanf 函数分别为二维数组的每个元素赋值。
然后,定义了两个变量 max 和 min,用于记录数组中的最大值和最小值。将 max 和 min 的初始值设置为二维数组中的第一个元素 matrix[0][0]。
通过再次使用嵌套的循环结构遍历二维数组,与当前的最大值 max 和最小值 min 比较,并更新它们的值。
最后,使用 printf 函数输出找到的最大值和最小值。
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$