第8章 第47练 指针应用实例《编程语言基础-C语言》(高教版第5版)一课一练
|
2份
|
6页
|
31人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第47练,内容涵盖第8章 指针的8.7指针的应用实例。
《编程语言基础-C语言》(高教版第5版)第47练
第8章 指针
8.7 指针的应用实例(原卷版)
一、单项选择题(本题共5小题)
1、以下程序通过指针遍历数组并求元素之和,横线处应填写( )
int a[5] = {2,4,6,8,10};
int *p = a, sum = 0;
while (p < a + 5) {
______;
p++;
}
printf("sum=%d", sum);
A. sum = *p++
B. sum += *p
C. sum = sum + p
D. sum += a[p]
2、以下自定义函数的功能是通过指针统计字符串的长度,横线处应填写( )
int my_strlen(char *s) {
int len = 0;
while (______) {
len++;
s++;
}
return len;
}
A. s != '\0'
B. *s
C. *s != '
'
D. s++
3、若有函数定义 void swap(int *p1, int *p2),则以下调用语句正确的是( )
A. swap(a, b);
B. swap(&a, &b);
C. swap(*a, *b);
D. swap(a[0], b[0]);
4、有以下程序段,输出结果是( )
#include <stdio.h>
int main() {
char s[] = "world";
char *p = s;
p += 2;
printf("%s", p);
return 0;
}
A. wo
B. world
C. rld
D. ld
5、关于指针的应用实例,以下说法正确的是( )
A. 数组名作为函数参数时,函数内无法修改原数组的值
B. 指针运算中,p+n 表示地址值增加 n 个字节
C. 指向字符串的指针可以直接通过下标引用字符,但不能修改字符串常量内容
D. 两个不同类型的指针可以直接互相赋值
二、判断题(本题共5小题)
1、在指针与数组的应用中,*(p+i) 与 p[i] 是完全等价的,但编译器处理方式不同。( )
2、用指针变量作为函数参数时,实参传递给形参的是地址值,这种传递方式仍属于“值传递”。( )
3、若有 char *p = "C语言";,则可以通过 p[0] = 'c'; 将字符串首字母改为小写。( )
4、以下程序段通过指针遍历实现了数组元素的累加,代码正确。( )
int a[5] = {1,2,3,4,5}, sum = 0, *p = a;
for (int i = 0; i < 5; i++) {
sum += *(p + i);
}
printf("sum=%d", sum);
5、函数名本身就是一个指针,指向函数的入口地址,可以通过函数指针来调用函数。( )
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第47练,内容涵盖第8章 指针的8.7指针的应用实例。
《编程语言基础-C语言》(高教版第5版)第47练
第8章 指针
8.7 指针的应用实例(解析版)
一、单项选择题(本题共5小题)
1、以下程序通过指针遍历数组并求元素之和,横线处应填写( )
int a[5] = {2,4,6,8,10};
int *p = a, sum = 0;
while (p < a + 5) {
______;
p++;
}
printf("sum=%d", sum);
A. sum = *p++
B. sum += *p
C. sum = sum + p
D. sum += a[p]
【答案】B
【解析】程序通过指针变量 p 遍历数组,每次循环先累加当前指针指向的元素值(*p),再让指针后移。选项B sum += *p 正确累加当前元素;A中 *p++ 虽然能得到值但 p++ 的副作用会导致本次累加和下轮移动混乱;C中加的是地址而非值;D中 p 作数组下标会先转换为整数,不正确。
2、以下自定义函数的功能是通过指针统计字符串的长度,横线处应填写( )
int my_strlen(char *s) {
int len = 0;
while (______) {
len++;
s++;
}
return len;
}
A. s != '\0'
B. *s
C. *s != '
'
D. s++
【答案】B
【解析】指针指向字符串,通过 *s 可以获取当前字符。当 *s 不为 '\0' 时循环继续,等同于 (*s) != '\0'。选项A比较的是地址而非字符,错误;C判断换行符不是字符串结束标志;D是移动指针,不是循环条件。
3、若有函数定义 void swap(int *p1, int *p2),则以下调用语句正确的是( )
A. swap(a, b);
B. swap(&a, &b);
C. swap(*a, *b);
D. swap(a[0], b[0]);
【答案】B
【解析】指针作为函数参数可实现“双向”数据传递,即主调函数通过指针将被调函数修改后的值带回来,这是指针应用的经典场景。swap 函数要求传递两个整型变量的地址,选项 swap(&a, &b) 符合要求,将变量 a、b 的地址作为实参传递给形参 p1、p2。
4、有以下程序段,输出结果是( )
#include <stdio.h>
int main() {
char s[] = "world";
char *p = s;
p += 2;
printf("%s", p);
return 0;
}
A. wo
B. world
C. rld
D. ld
【答案】C
【解析】初始 p 指向字符串首字符 'w',p += 2 使指针向后移动2个字符,指向 'r'。printf("%s", p) 从当前位置输出直到结束符 \0,输出 "rld"。
5、关于指针的应用实例,以下说法正确的是( )
A. 数组名作为函数参数时,函数内无法修改原数组的值
B. 指针运算中,p+n 表示地址值增加 n 个字节
C. 指向字符串的指针可以直接通过下标引用字符,但不能修改字符串常量内容
D. 两个不同类型的指针可以直接互相赋值
【答案】C
【解析】char *p = "hello"; 中 p 指向字符串常量的首地址,字符串常量在只读存储区,可通过 p[i] 访问但不能修改。选项A错误,数组名作参数时传地址,可修改原数组;B错误,指针加n移动 n * sizeof(指向类型) 字节;D错误,不同类型的指针不能直接赋值,需强制类型转换。
二、判断题(本题共5小题)
1、在指针与数组的应用中,*(p+i) 与 p[i] 是完全等价的,但编译器处理方式不同。( )
【答案】×
【解析】C语言规定下标运算 p[i] 在编译时被转换为 *(p+i),两者在编译后的目标代码完全相同,这是指针与数组密切关系的体现。
2、用指针变量作为函数参数时,实参传递给形参的是地址值,这种传递方式仍属于“值传递”。( )
【答案】√
【解析】虽然指针参数可以实现“传址”的效果,但C语言中所有参数传递本质都是值传递——实参把地址值复制给形参,形参得到地址的副本,但通过该地址可以访问原变量。
3、若有 char *p = "C语言";,则可以通过 p[0] = 'c'; 将字符串首字母改为小写。( )
【答案】×
【解析】p 指向字符串常量,字符串常量通常存储在只读存储区,不能通过指针修改其内容。若要修改,应使用字符数组。
4、以下程序段通过指针遍历实现了数组元素的累加,代码正确。( )
int a[5] = {1,2,3,4,5}, sum = 0, *p = a;
for (int i = 0; i < 5; i++) {
sum += *(p + i);
}
printf("sum=%d", sum);
【答案】√
【解析】程序通过指针加法运算 *(p + i) 依次访问数组元素,等价于 a[i],代码逻辑正确,输出结果为 sum=15。
5、函数名本身就是一个指针,指向函数的入口地址,可以通过函数指针来调用函数。( )
【答案】√
【解析】函数名在表达式中代表函数的入口地址,可以赋值给函数指针变量,通过函数指针来间接调用函数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$