第34练 单元8 通过指针引用数组《C语言程序设计》(高教版第2版)一课一练
|
2份
|
8页
|
28人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第34练,内容涵盖单元8“考试系统”的优化8.2.2 通过指针引用数组。
《C语言程序设计》(高教版第2版)一课一练 第34练
单元8 “考试系统”的优化
8.2.2 通过指针引用数组
1、 单项选择题(本题共5小题)
1、关于 C 语言数组名的描述,正确的是( )
A. 数组名是可修改的变量,能执行++操作
B. 数组名代表数组首元素的地址,是常量
C. 数组名可以直接赋值给普通整型变量
D. 数组名指向数组的最后一个元素
2、若有定义int a[5], *p = a;,以下哪个表达式不能表示数组元素a[2]?( )
A. a[2]
B. *(a+2)
C. *(p+2)
D. *p+2
3、对于二维数组int s[3][4];,以下哪个表达式表示第 1 行第 2 列元素的地址?( )
A. s[1]+2
B. *(s+1)+2
C. &s[1][2]
D. 以上都是
4、以下属于数组指针(指向一维数组的指针)的正确定义格式是( )
A. int *p[4];
B. int (*p)[4];
C. int p*[4];
D. int (*p)(4);
5、当数组名作为函数实参传递时,形参接收的内容是( )
A. 数组所有元素的值
B. 数组首元素的地址
C. 数组的长度
D. 数组最后一个元素的地址
2、 判断题(本题共4题)
1、若指针p指向整型数组a的首元素,执行p++操作后,p会移动 1 个字节的位置。( )
2、二维数组s[3][4]中,s[0]和*s的含义完全相同,都表示第 0 行第 0 列元素的地址。( )
3、指向同一数组的两个指针p1和p2,可以执行p1+p2的算术运算。( )
4、数组名作函数参数时,形参定义为int a[]和int *a是等价的,都会被编译器处理为指针变量。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序使用指针实现选择排序法,对一维数组元素按从小到大排序,请补充缺失代码使程序正常运行。
#include <stdio.h>
#define N 10
void sort(int *a) {
int i, j, k;
int temp;
for(i = 0; i < N-1; i++) {
k = i;
//遍历后续元素,找到最小值的下标k(指针方式比较)
for(j = i+1; j < N; j++) {
if(___ (1) _) {
k = j;
}
}
//交换当前元素a[i]和最小值元素a[k](指针方式操作)
temp = __ (2) __;
____;
____;
}
}
void display(int *a) {
int i;
for(i = 0; i < N; i++) {
printf("%d\t", *(a+i));
}
printf("
");
}
int main() {
int arr[N] = {23,34,-1,2,6,78,-54,20,18,-15};
printf("排序前:
");
display(arr);
// 调用sort函数对数组排序
__(3) __;
printf("排序后:
");
display(arr);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第34练,内容涵盖单元8“考试系统”的优化8.2.2 通过指针引用数组。
《C语言程序设计》(高教版第2版)一课一练 第34练
单元8 “考试系统”的优化
8.2.2 通过指针引用数组
1、 单项选择题(本题共5小题)
1、关于 C 语言数组名的描述,正确的是( )
A. 数组名是可修改的变量,能执行++操作
B. 数组名代表数组首元素的地址,是常量
C. 数组名可以直接赋值给普通整型变量
D. 数组名指向数组的最后一个元素
【答案】B
【解析】数组名是数组首元素的地址,属于常量,程序运行期间不能被修改,因此无法执行++等赋值操作;数组名是地址类型,不能赋值给普通整型变量;它指向数组的第一个元素而非最后一个,选项 B 符合数组名的特性。
2、若有定义int a[5], *p = a;,以下哪个表达式不能表示数组元素a[2]?( )
A. a[2]
B. *(a+2)
C. *(p+2)
D. *p+2
【答案】D
【解析】*p表示指针p指向的首元素a[0],*p+2是a[0]的值加 2,并非a[2];选项 A 是下标法,选项 B 是数组名法,选项 C 是指针变量法,均能正确表示a[2]。
3、对于二维数组int s[3][4];,以下哪个表达式表示第 1 行第 2 列元素的地址?( )
A. s[1]+2
B. *(s+1)+2
C. &s[1][2]
D. 以上都是
【答案】D
【解析】s[1]是第 1 行的一维数组名,代表第 1 行首地址,s[1]+2偏移 2 个元素后指向第 1 行第 2 列;*(s+1)等价于s[1],因此*(s+1)+2与s[1]+2含义相同;&s[1][2]直接取第 1 行第 2 列元素的地址,三个表达式均正确。
4、以下属于数组指针(指向一维数组的指针)的正确定义格式是( )
A. int *p[4];
B. int (*p)[4];
C. int p*[4];
D. int (*p)(4);
【答案】B
【解析】选项 A 是指针数组(存储指针的数组);选项 B 中,()优先级高于[],p首先是指针,指向包含 4 个整型元素的一维数组,属于数组指针;选项 C 语法错误;选项 D 是指向参数为 4 个整型的函数的指针。
5、当数组名作为函数实参传递时,形参接收的内容是( )
A. 数组所有元素的值
B. 数组首元素的地址
C. 数组的长度
D. 数组最后一个元素的地址
【答案】B
【解析】数组名作实参时,传递的是数组首元素的地址,形参(数组形式或指针形式)与实参数组共用同一片内存空间,对形参的操作会直接影响实参数组。
2、 判断题(本题共4题)
1、若指针p指向整型数组a的首元素,执行p++操作后,p会移动 1 个字节的位置。( )
【答案】×
【解析】指针的步长由指向的变量类型决定,整型变量占 4 字节(或 2 字节),p++会让指针移动一个整型元素的大小(4 字节),而非 1 个字节。
2、二维数组s[3][4]中,s[0]和*s的含义完全相同,都表示第 0 行第 0 列元素的地址。( )
【答案】√
【解析】s是二维数组名,*s等价于s[0],二者都代表第 0 行一维数组的首地址,即&s[0][0]。
3、指向同一数组的两个指针p1和p2,可以执行p1+p2的算术运算。( )
【答案】×
【解析】指向同一数组的指针可以相减,结果为两个指针之间的元素个数差,但指针相加无实际意义,编译器会报错。
4、数组名作函数参数时,形参定义为int a[]和int *a是等价的,都会被编译器处理为指针变量。( )
【答案】√
【解析】形参的数组形式只是语法上的简化,编译器会自动将其转换为指针形式,二者都用于接收实参传递的数组首地址。
3、 程序填空题(本题共1题)
1、题目描述:以下程序使用指针实现选择排序法,对一维数组元素按从小到大排序,请补充缺失代码使程序正常运行。
#include <stdio.h>
#define N 10
void sort(int *a) {
int i, j, k;
int temp;
for(i = 0; i < N-1; i++) {
k = i;
//遍历后续元素,找到最小值的下标k(指针方式比较)
for(j = i+1; j < N; j++) {
if(___ (1) _) {
k = j;
}
}
//交换当前元素a[i]和最小值元素a[k](指针方式操作)
temp = __ (2) __;
____;
____;
}
}
void display(int *a) {
int i;
for(i = 0; i < N; i++) {
printf("%d\t", *(a+i));
}
printf("
");
}
int main() {
int arr[N] = {23,34,-1,2,6,78,-54,20,18,-15};
printf("排序前:
");
display(arr);
// 调用sort函数对数组排序
__(3) __;
printf("排序后:
");
display(arr);
return 0;
}
【答案】
(1) *(a+j) < *(a+k)
(2) *(a+i); *(a+i) = *(a+k); *(a+k) = temp
(3) sort(arr)
【解析】
(1) 通过指针方式比较当前元素*(a+j)与当前最小值元素*(a+k),若前者更小,则更新最小值下标k,符合选择排序 “找最小值” 的核心逻辑。
(2) 先保存当前元素*(a+i)到临时变量temp,再将最小值元素*(a+k)赋值给*(a+i),最后把temp赋值给*(a+k),完成两个元素的交换。
(3) 调用sort函数,传入数组名arr(即数组首地址),实参将地址传递给形参指针a,实现对原数组的排序操作。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$