内容正文:
《编程语言基础-C语言》高等教育出版社(第5版)
第五章 数组 章节过关卷(一)(原卷版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、以下关于一维数组的定义,正确的是( )
A. int a[5];
B. int a[5] = {0};
C. int a[] = {1,2,3};
D. 以上都正确
2、若有定义 int a[5] = {1,2,3};,则 a[3] 的值是( )
A. 0
B. 3
C. 随机值
D. 编译错误
3、以下代码的输出结果是( )
int a[3] = {1,2,3};
printf("%d", a[3]);
A. 3
B. 0
C. 随机值
D. 编译错误
4、定义 int a[10];,则正确的数组元素引用是( )
A. a[10]
B. a[0]
C. a(1)
D. a[1.5]
5、以下程序段中,能将数组a所有元素初始化为0的是( )
A. int a[5] = 0;
B. int a[5] = {0};
C. int a[5] = {};
D. int a[5] = {1};
6、以下对一维数组a的正确输入语句是( )
A. scanf("%d", a);
B. for(i=0;i<5;i++) scanf("%d", a[i]);
C. for(i=0;i<5;i++) scanf("%d", &a[i]);
D. scanf("%d", &a);
7、以下代码的输出结果是( )
int a[5] = {2,4,6,8,10};
int i;
for(i=0;i<5;i++) printf("%d", a[i]%3);
A. 20211
B. 21020
C. 20210
D. 21021
8、以下关于二维数组的定义,错误的是( )
A. int a[2][3];
B. int a[][3] = {1,2,3,4,5};
C. int a[2][] = {1,2,3,4};
D. int a[2][3] = {{1},{2,3}};
9、若有定义 int a[2][3] = {{1,2},{3,4,5}};,则 a[1][2] 的值是( )
A. 0
B. 5
C. 4
D. 随机值
10、以下代码的输出结果是( )
int a[3][3] = {1,2,3,4,5,6,7,8,9};
int i,j,s=0;
for(i=0;i<3;i++) s += a[i][i];
printf("%d", s);
A. 15
B. 12
C. 18
D. 9
11、以下对二维数组a中第i行第j列元素的正确引用是( )
A. a(i,j)
B. a[i,j]
C. a[i][j]
D. a[i][j] 与 *(*(a+i)+j) 等价
12、若有定义 char str[10] = "hello";,则 strlen(str) 和 sizeof(str) 的值分别是( )
A. 5, 5
B. 5, 10
C. 6, 10
D. 5, 6
13、以下字符数组定义中,能正确存储字符串"abc"的是( )
A. char s[3] = {'a','b','c'};
B. char s[3] = "abc";
C. char s[4] = "abc";
D. char s[] = {'a','b','c'};
14、以下代码的输出结果是( )
char s[20] = "hello";
strcpy(s, "world");
printf("%s", s);
A. hello
B. world
C. helloworld
D. 编译错误
15、以下代码的输出结果是( )
char s1[20] = "abc", s2[20] = "def";
strcat(s1, s2);
printf("%s", s1);
A. abc
B. def
C. abcdef
D. abc def
16、以下代码中,能正确比较两个字符串是否相等的是( )
A. if(s1 == s2)
B. if(strcmp(s1, s2) == 0)
C. if(strcpy(s1, s2))
D. if(s1 = s2)
17、以下代码的输出结果是( )
char str[20] = "China";
printf("%d", strlen(str));
A. 5
B. 6
C. 20
D. 随机值
18、以下程序段用于将数组a中的元素逆序存放,划线处应填( )
int a[5] = {1,2,3,4,5};
int i, t;
for(i=0; i<2; i++) {
t = a[i];
a[i] = a[4-i];
________;
}
A. a[i] = t
B. a[4-i] = t
C. a[4-i] = a[i]
D. t = a[4-i]
19、以下代码的功能是( )
int a[10], i, max;
max = a[0];
for(i=1; i<10; i++)
if(a[i] > max) max = a[i];
A. 求数组最小值
B. 求数组最大值
C. 求数组和
D. 排序
20、以下关于二维数组的初始化,错误的是( )
A. int a[2][3] = {0};
B. int a[2][3] = {{1,2},{3,4,5}};
C. int a[2][3] = {1,2,3,4,5,6};
D. int a[2][3] = {1,2,3,4,5,6,7};
21、以下代码的输出结果是( )
int a[3][3] = {{1,2},{3,4},{5,6}};
printf("%d", a[1][2]);
A. 0
B. 4
C. 5
D. 随机值
22、以下函数用于输出二维数组的某一行,划线处应填( )
void print_row(int a[][3], int row) {
for(int j=0; j<3; j++)
printf("%d ", ________);
}
A. a[row][j]
B. a[j][row]
C. a[row+j]
D. a[row] + j
23、以下代码的输出结果是( )
char s[] = "Hello\0World";
printf("%s", s);
A. Hello
B. HelloWorld
C. Hello World
D. Hello\0World
24、以下程序段中,能正确输入一个字符串到数组s的是( )
A. scanf("%s", &s);
B. gets(s);
C. scanf("%c", s);
D. s = gets();
25、判断字符串a和b是否相等,应当使用( )。
A.if (a == b)
B.if (a = b)
C.if (strcpy (a,b))
D.if (strcmp (a,b))
二、多选题(本题共5小题,每题4分,共20分)
1、以下关于一维数组的定义,正确的有( )
A. int a[] = {1,2,3};
B. int a[3] = {0};
C. int a[3] = {1,2,3,4};
D. int a[3] = {1,2};
2、以下关于二维数组的说法,正确的有( )
A. 二维数组可以看作特殊的一维数组,其元素是一维数组
B. 二维数组在内存中是按行优先顺序存储的
C. 定义二维数组时,第一维长度可以省略,但第二维不能省略
D. 二维数组的初始化可以采用嵌套花括号或线性列表
3、以下关于字符数组和字符串的说法,正确的有( )
A. 字符串以'\0'作为结束标志
B. 字符数组不一定要包含'\0'
C. char s[] = "abc"; 等价于 char s[4] = {'a','b','c','\0'};
D. strlen(s) 计算的是字符数组的长度(包括'\0')
4、以下函数中,属于C语言标准库字符串处理函数的有( )
A. strcpy
B. strcat
C. strcmp
D. strlen
5、以下关于数组作为函数参数的说法,正确的有( )
A. 数组名作为实参时,传递的是数组首地址
B. 形参可以是数组名或指针变量
C. 在被调函数中,可以通过形参修改实参数组元素的值
D. 数组长度作为参数时,通常需要额外传递
三、判断题(本题共10小题,每题2分,共20分)
1、定义数组时,数组长度可以是变量。( )
2、数组元素的下标从0开始。( )
3、二维数组在内存中是按列优先顺序存储的。( )
4、字符数组只能存储字符,不能存储数字。( )
5、使用strcpy(s1, s2)时,要求s1的长度足够存放s2的内容(包括'\0')。( )
6、字符串"hello"的长度是6。( )
7、数组名是一个指针常量,其值不能被改变。( )
8、二维数组的行数可以省略,但列数不能省略。( )
9、char s[10]; s = "hello"; 是合法的。( )
10、使用gets函数输入字符串时,可以包含空格。( )
四、填空题(本题共5小题,每题2分,共10分)
1、若有定义 int a[5] = {2,4,6,8,10};,则 a[4] 的值为( )。
2、以下程序段的功能是求数组a中所有元素的平均值,请填空。( )
int a[10], i, sum = 0;
float avg;
for(i=0; i<10; i++) sum += ________;
avg = sum / 10.0;
3、以下程序段输出结果为 ( )。
char s[20] = "good";
strcat(s, " morning");
printf("%s", s);
4、二维数组 int a[3][4]; 共有( )个元素。
5、以下程序段输出字符串的长度为( )。
char str[100] = "Hello\0World";
printf("%d", strlen(str));
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《编程语言基础-C语言》高等教育出版社(第5版)
第五章 数组 章节过关卷(一)(解析版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、以下关于一维数组的定义,正确的是( )
A. int a[5];
B. int a[5] = {0};
C. int a[] = {1,2,3};
D. 以上都正确
【答案】D
【解析】A定义了长度为5的整型数组;B初始化第一个元素为0,其余默认为0;C省略长度时由初始化列表决定长度为3。三种写法均正确。
2、若有定义 int a[5] = {1,2,3};,则 a[3] 的值是( )
A. 0
B. 3
C. 随机值
D. 编译错误
【答案】A
【解析】部分初始化时,未显式赋值的元素自动初始化为0。
3、以下代码的输出结果是( )
int a[3] = {1,2,3};
printf("%d", a[3]);
A. 3
B. 0
C. 随机值
D. 编译错误
【答案】C
【解析】数组下标从0开始,a[3]越界访问,结果未定义,为随机值。
4、定义 int a[10];,则正确的数组元素引用是( )
A. a[10]
B. a[0]
C. a(1)
D. a[1.5]
【答案】B
【解析】下标应为整型表达式,范围0~9。
5、以下程序段中,能将数组a所有元素初始化为0的是( )
A. int a[5] = 0;
B. int a[5] = {0};
C. int a[5] = {};
D. int a[5] = {1};
【答案】B
【解析】{0}将第一个元素赋0,其余自动为0;A语法错误;C不合法;D只有a[0]=1。
6、以下对一维数组a的正确输入语句是( )
A. scanf("%d", a);
B. for(i=0;i<5;i++) scanf("%d", a[i]);
C. for(i=0;i<5;i++) scanf("%d", &a[i]);
D. scanf("%d", &a);
【答案】C
【解析】数组元素需用取地址符&;A中a是数组名代表首地址,但输入多个数时不正确;D中&a是数组地址,类型不匹配。
7、以下代码的输出结果是( )
int a[5] = {2,4,6,8,10};
int i;
for(i=0;i<5;i++) printf("%d", a[i]%3);
A. 20211
B. 21020
C. 20210
D. 21021
【答案】D
【解析】2%3=2,4%3=1,6%3=0,8%3=2,10%3=1,输出“21021”
8、以下关于二维数组的定义,错误的是( )
A. int a[2][3];
B. int a[][3] = {1,2,3,4,5};
C. int a[2][] = {1,2,3,4};
D. int a[2][3] = {{1},{2,3}};
【答案】C
【解析】二维数组定义时,第二维的长度不能省略。
9、若有定义 int a[2][3] = {{1,2},{3,4,5}};,则 a[1][2] 的值是( )
A. 0
B. 5
C. 4
D. 随机值
【答案】B
【解析】第一行初始化1,2,0;第二行初始化3,4,5;a[1][2]即第二行第三列为5。
10、以下代码的输出结果是( )
int a[3][3] = {1,2,3,4,5,6,7,8,9};
int i,j,s=0;
for(i=0;i<3;i++) s += a[i][i];
printf("%d", s);
A. 15
B. 12
C. 18
D. 9
【答案】A
【解析】主对角线元素1,5,9之和为15。
11、以下对二维数组a中第i行第j列元素的正确引用是( )
A. a(i,j)
B. a[i,j]
C. a[i][j]
D. a[i][j] 与 *(*(a+i)+j) 等价
【答案】D
【解析】C是标准写法,D是指针表示法,两者等价。
12、若有定义 char str[10] = "hello";,则 strlen(str) 和 sizeof(str) 的值分别是( )
A. 5, 5
B. 5, 10
C. 6, 10
D. 5, 6
【答案】B
【解析】strlen计算字符串长度(不含'\0'),为5;sizeof计算数组占用的字节数,为10。
13、以下字符数组定义中,能正确存储字符串"abc"的是( )
A. char s[3] = {'a','b','c'};
B. char s[3] = "abc";
C. char s[4] = "abc";
D. char s[] = {'a','b','c'};
【答案】C
【解析】字符串需要结束符'\0',因此长度至少为4;A、D没有结束符,不是字符串(只是字符数组);B数组长度不够。
14、以下代码的输出结果是( )
char s[20] = "hello";
strcpy(s, "world");
printf("%s", s);
A. hello
B. world
C. helloworld
D. 编译错误
【答案】B
【解析】strcpy将"world"复制到s中,覆盖原内容。
15、以下代码的输出结果是( )
char s1[20] = "abc", s2[20] = "def";
strcat(s1, s2);
printf("%s", s1);
A. abc
B. def
C. abcdef
D. abc def
【答案】C
【解析】strcat将s2连接到s1末尾,结果为"abcdef"。
16、以下代码中,能正确比较两个字符串是否相等的是( )
A. if(s1 == s2)
B. if(strcmp(s1, s2) == 0)
C. if(strcpy(s1, s2))
D. if(s1 = s2)
【答案】B
【解析】字符串比较应用strcmp函数,相等时返回0。
17、以下代码的输出结果是( )
char str[20] = "China";
printf("%d", strlen(str));
A. 5
B. 6
C. 20
D. 随机值
【答案】A
【解析】strlen计算字符个数直到'\0',不包括'\0',"China"有5个字符。
18、以下程序段用于将数组a中的元素逆序存放,划线处应填( )
int a[5] = {1,2,3,4,5};
int i, t;
for(i=0; i<2; i++) {
t = a[i];
a[i] = a[4-i];
________;
}
A. a[i] = t
B. a[4-i] = t
C. a[4-i] = a[i]
D. t = a[4-i]
【答案】B
【解析】交换a[i]和a[4-i]后,需将暂存的t赋给a[4-i]。
19、以下代码的功能是( )
int a[10], i, max;
max = a[0];
for(i=1; i<10; i++)
if(a[i] > max) max = a[i];
A. 求数组最小值
B. 求数组最大值
C. 求数组和
D. 排序
【答案】B
【解析】依次比较,max记录最大值。
20、以下关于二维数组的初始化,错误的是( )
A. int a[2][3] = {0};
B. int a[2][3] = {{1,2},{3,4,5}};
C. int a[2][3] = {1,2,3,4,5,6};
D. int a[2][3] = {1,2,3,4,5,6,7};
【答案】D
【解析】初始化值个数不能超过数组元素总数。
21、以下代码的输出结果是( )
int a[3][3] = {{1,2},{3,4},{5,6}};
printf("%d", a[1][2]);
A. 0
B. 4
C. 5
D. 随机值
【答案】A
【解析】每行未初始化部分自动补0,a[1][2]为0。
22、以下函数用于输出二维数组的某一行,划线处应填( )
void print_row(int a[][3], int row) {
for(int j=0; j<3; j++)
printf("%d ", ________);
}
A. a[row][j]
B. a[j][row]
C. a[row+j]
D. a[row] + j
【答案】A
【解析】行下标为row,列下标为j。
23、以下代码的输出结果是( )
char s[] = "Hello\0World";
printf("%s", s);
A. Hello
B. HelloWorld
C. Hello World
D. Hello\0World
【答案】A
【解析】字符串遇'\0'结束,只输出"Hello"。
24、以下程序段中,能正确输入一个字符串到数组s的是( )
A. scanf("%s", &s);
B. gets(s);
C. scanf("%c", s);
D. s = gets();
【答案】B
【解析】gets(s)输入一行字符串(含空格)到s;A中&s是数组地址,但%s期望char*,类型不匹配但可能警告;C只输入一个字符;D语法错误。
25、判断字符串a和b是否相等,应当使用( )。
A.if (a == b)
B.if (a = b)
C.if (strcpy (a,b))
D.if (strcmp (a,b))
【答案】D
【解析】对于字符串的大小判断只能用串比较函数,不能用关系运算符。
二、多选题(本题共5小题,每题4分,共20分)
1、以下关于一维数组的定义,正确的有( )
A. int a[] = {1,2,3};
B. int a[3] = {0};
C. int a[3] = {1,2,3,4};
D. int a[3] = {1,2};
【答案】ABD
【解析】A省略长度由初始化决定;B全0初始化;D部分初始化;C初始化值过多,编译错误。
2、以下关于二维数组的说法,正确的有( )
A. 二维数组可以看作特殊的一维数组,其元素是一维数组
B. 二维数组在内存中是按行优先顺序存储的
C. 定义二维数组时,第一维长度可以省略,但第二维不能省略
D. 二维数组的初始化可以采用嵌套花括号或线性列表
【答案】ABCD
【解析】所有选项均正确。
3、以下关于字符数组和字符串的说法,正确的有( )
A. 字符串以'\0'作为结束标志
B. 字符数组不一定要包含'\0'
C. char s[] = "abc"; 等价于 char s[4] = {'a','b','c','\0'};
D. strlen(s) 计算的是字符数组的长度(包括'\0')
【答案】ABC
【解析】strlen计算字符串长度,不包括'\0',D错误。
4、以下函数中,属于C语言标准库字符串处理函数的有( )
A. strcpy
B. strcat
C. strcmp
D. strlen
【答案】ABCD
【解析】均为<string.h>中的常用函数。
5、以下关于数组作为函数参数的说法,正确的有( )
A. 数组名作为实参时,传递的是数组首地址
B. 形参可以是数组名或指针变量
C. 在被调函数中,可以通过形参修改实参数组元素的值
D. 数组长度作为参数时,通常需要额外传递
【答案】ABCD
【解析】数组名作参数传递地址,形参可写为int a[]或int *a,可通过指针修改原数组,长度需另外传递。
三、判断题(本题共10小题,每题2分,共20分)
1、定义数组时,数组长度可以是变量。( )
【答案】×
【解析】C语言中数组长度必须是常量表达式。
2、数组元素的下标从0开始。( )
【答案】√
【解析】C语言数组下标起始为0。
3、二维数组在内存中是按列优先顺序存储的。( )
【答案】×
【解析】按行优先顺序存储。
4、字符数组只能存储字符,不能存储数字。( )
【答案】×
【解析】字符数组可存储数字字符,如'1',也可存储整数(ASCII码),但通常用于字符串。
5、使用strcpy(s1, s2)时,要求s1的长度足够存放s2的内容(包括'\0')。( )
【答案】√
【解析】否则会越界覆盖。
6、字符串"hello"的长度是6。( )
【答案】×
【解析】字符串长度指字符个数,不含'\0',为5。
7、数组名是一个指针常量,其值不能被改变。( )
【答案】√
【解析】数组名代表数组首地址,不可赋值。
8、二维数组的行数可以省略,但列数不能省略。( )
【答案】√
【解析】定义时第二维必须指定,第一维可省略。
9、char s[10]; s = "hello"; 是合法的。( )
【答案】×
【解析】数组名不能作为左值被赋值,只能用strcpy或初始化时赋值。
10、使用gets函数输入字符串时,可以包含空格。( )
【答案】√
【解析】gets读取一整行直到换行符,包括空格。
四、填空题(本题共5小题,每题2分,共10分)
1、若有定义 int a[5] = {2,4,6,8,10};,则 a[4] 的值为( )。
【答案】10
【解析】下标从0开始,a[4]是第五个元素。
2、以下程序段的功能是求数组a中所有元素的平均值,请填空。( )
int a[10], i, sum = 0;
float avg;
for(i=0; i<10; i++) sum += ________;
avg = sum / 10.0;
【答案】a[i]
【解析】累加每个元素的值。
3、以下程序段输出结果为 ( )。
char s[20] = "good";
strcat(s, " morning");
printf("%s", s);
【答案】good morning
【解析】strcat将" morning"连接到"good"末尾。
4、二维数组 int a[3][4]; 共有( )个元素。
【答案】12
【解析】3行4列,共12个元素。
5、以下程序段输出字符串的长度为( )。
char str[100] = "Hello\0World";
printf("%d", strlen(str));
【答案】5
【解析】strlen遇到第一个'\0'即停止,只计算"Hello"的5个字符。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$