第33练 单元8 指针变量《C语言程序设计》(高教版第2版)一课一练
|
2份
|
7页
|
21人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第33练,内容涵盖单元8“考试系统”的优化的8.2.1 指针变量。
《C语言程序设计》(高教版第2版)一课一练 第33练
单元8 “考试系统”的优化
8.2.1 指针变量
1、 单项选择题(本题共5小题)
1、关于指针的核心概念,下列说法正确的是( )
A. 指针就是变量的数值
B. 指针就是变量的内存地址
C. 指针是专门存储整数的变量
D. 指针只能指向整型变量
【答案】B
【解析】指针本质是内存地址,用来指向特定类型的变量、数组或函数;选项 A 混淆了指针与变量值的概念,选项 C 错误,指针存储的是地址而非普通整数,选项 D 错误,指针可以指向任意数据类型的变量。
2、下列指针变量的定义语句正确的是( )
A. int p;
B. int *p;
C. int *p = 10;
D. *int p;
【答案】B
【解析】定义指针变量需在变量名前加*作为指针声明符;选项 A 是普通整型变量,选项 C 不能直接给指针赋值整数(应赋值地址),选项 D 语法错误,类型名需放在*之前。
3、指针变量作为函数参数时,传递的内容是( )
A. 变量的数值副本
B. 变量的内存地址
C. 指针变量本身
D. 函数的入口地址
【答案】B
【解析】指针作为函数参数属于地址传递,将变量的内存地址传递给形参指针,使形参和实参指向同一片内存空间,形参修改会直接影响实参。
4、已知int a=10; int *p=&a;,下列语句能正确输出变量 a 的值的是( )
A. printf ("% d", p);
B. printf ("% d", *p);
C. printf ("% d", &p);
D. printf ("% d", &a);
【答案】B
【解析】*p是取值运算符,表示获取指针 p 指向的内存单元内容,即变量 a 的值;选项 A 输出指针 p 存储的地址,选项 C 输出指针变量 p 自身的地址,选项 D 输出变量 a 的地址。
5、关于指针变量的赋值规则,下列说法错误的是( )
A. 指针变量的类型必须与指向的变量类型一致
B. 同类型的指针变量之间可以互相赋值
C. 可以直接将整数赋值给指针变量
D. 可以用&运算符获取变量地址赋值给指针变量
【答案】C
【解析】指针变量存储的是内存地址,直接赋值整数会导致指针指向非法内存,引发程序错误;其他选项均符合指针赋值的语法规则。
2、 判断题(本题共4题)
1、指针变量的作用是存储变量的数值。( )
【答案】×
【解析】指针变量的核心作用是存储变量的内存地址,通过地址可以间接访问变量的内容,而非直接存储变量数值。
2、当指针作为函数参数时,修改形参指针指向的内容,会同步改变主调函数中实参指向的变量值。( )
【答案】√
【解析】指针作为函数参数是地址传递,形参和实参指向同一片内存空间,修改形参指向的内容等同于修改实参指向的变量值。
3、定义指针变量时,变量名前的*号表示取指针指向的内容。( )
【答案】×
【解析】定义指针变量时的*是指针声明符,仅用于表明该变量是指针变量;在引用指针时的*才表示取指针指向的内容。
4、int *p; char a='A'; p=&a;这段代码是合法的。( )
【答案】×
【解析】指针变量p是指向整型的指针,变量a是字符型,两者类型不匹配,不能将字符型变量的地址赋值给整型指针变量,会触发类型错误。
3、 程序填空题(本题共1题)
1、题目描述:以下程序通过指针作为函数参数实现两个整数的交换功能,请补充缺失代码;
#include <stdio.h>
// 定义交换函数,形参为指针变量
void swap( (1)____ ) {
int temp;
// 保存第一个指针指向的变量值
temp = (2)____;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a, b;
// 定义两个整型指针变量
(3)____;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
// 让指针指向变量a和b
p1 = (4)____;
p2 = &b;
printf("交换前:a=%d, b=%d
", a, b);
// 调用交换函数,传递变量地址
(5)____;
printf("交换后:a=%d, b=%d
", a, b);
return 0;
}
【答案】
(1) int *p1, int *p2
(2) *p1
(3) int *p1, *p2
(4) &a
(5) swap (&a, &b) 或 swap (p1, p2)
【解析】
(1) 交换函数需要接收两个整型变量的地址,因此形参定义为两个指向整型的指针变量,保证与实参类型匹配;
(2) 临时变量 temp 需先保存*p1的值,避免交换时数据被覆盖,*p1表示取指针 p1 指向的变量内容;
(3) 定义两个整型指针变量 p1 和 p2,用于存储变量 a 和 b 的地址;
(4) 使用&a获取变量 a 的地址,赋值给指针 p1,使 p1 指向 a;
(5) 调用 swap 函数时,既可以直接传递变量的地址&a、&b,也可以传递已经指向 a、b 的指针变量 p1、p2,两种方式均为地址传递,能实现变量值的交换。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第33练,内容涵盖单元8“考试系统”的优化的8.2.1 指针变量。
《C语言程序设计》(高教版第2版)一课一练 第33练
单元8 “考试系统”的优化
8.2.1 指针变量
1、 单项选择题(本题共5小题)
1、关于指针的核心概念,下列说法正确的是( )
A. 指针就是变量的数值
B. 指针就是变量的内存地址
C. 指针是专门存储整数的变量
D. 指针只能指向整型变量
2、下列指针变量的定义语句正确的是( )
A. int p;
B. int *p;
C. int *p = 10;
D. *int p;
3、指针变量作为函数参数时,传递的内容是( )
A. 变量的数值副本
B. 变量的内存地址
C. 指针变量本身
D. 函数的入口地址
4、已知int a=10; int *p=&a;,下列语句能正确输出变量 a 的值的是( )
A. printf ("% d", p);
B. printf ("% d", *p);
C. printf ("% d", &p);
D. printf ("% d", &a);
5、关于指针变量的赋值规则,下列说法错误的是( )
A. 指针变量的类型必须与指向的变量类型一致
B. 同类型的指针变量之间可以互相赋值
C. 可以直接将整数赋值给指针变量
D. 可以用&运算符获取变量地址赋值给指针变量
2、 判断题(本题共4题)
1、指针变量的作用是存储变量的数值。( )
2、当指针作为函数参数时,修改形参指针指向的内容,会同步改变主调函数中实参指向的变量值。( )
3、定义指针变量时,变量名前的*号表示取指针指向的内容。( )
4、int *p; char a='A'; p=&a;这段代码是合法的。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序通过指针作为函数参数实现两个整数的交换功能,请补充缺失代码;
#include <stdio.h>
// 定义交换函数,形参为指针变量
void swap( (1)____ ) {
int temp;
// 保存第一个指针指向的变量值
temp = (2)____;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a, b;
// 定义两个整型指针变量
(3)____;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
// 让指针指向变量a和b
p1 = (4)____;
p2 = &b;
printf("交换前:a=%d, b=%d
", a, b);
// 调用交换函数,传递变量地址
(5)____;
printf("交换后:a=%d, b=%d
", a, b);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$