第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,实现对原数组的排序操作。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第34练 单元8 通过指针引用数组《C语言程序设计》(高教版第2版)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。