第40练 第7章 变量的存储类型《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
38人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第40练,内容涵盖第7章函数的7.8.3 变量的存储类型(auto/static/register/extern)。
《C语言程序设计》(电子工业出版社)一课一练 第40练
第7章 函数
7.8.3 变量的存储类型(auto/static/register/extern)
1、 单项选择题(本题共4小题)
1、下列关于 auto 变量的描述,正确的是( )
A. auto 关键字必须显式声明,不能省略
B. auto 变量属于静态存储方式,函数调用结束后存储空间不释放
C. 函数中的形参默认属于 auto 变量
D. auto 变量如果不赋初值,默认值为 0
2、静态局部变量与自动变量的核心区别是( )
A. 静态局部变量的作用域更大
B. 静态局部变量在编译时只赋初值一次,函数调用结束后保留存储空间
C. 静态局部变量只能在函数内部定义
D. 静态局部变量必须赋初值,否则会报错
3、下列变量中,不能用 register 关键字声明的是( )
A. 函数的形参
B. 函数内部的自动变量
C. 静态局部变量
D. 复合语句中的自动变量
4、extern 关键字的主要作用是( )
A. 声明静态局部变量
B. 扩展外部变量的作用域
C. 定义自动变量
D. 提高变量的执行效率
2、 判断题(本题共3题)
1、自动变量如果在定义时不赋初值,其默认值为 0 或空字符。( )
2、用 static 声明的局部变量,在函数调用结束后,其存储空间不会被释放,值会保留到下一次调用。( )
3、register 变量可以是全局变量,目的是提高全局变量的访问效率。( )
3、 填空题(本题共2题)
1、动态存储区中存放的数据包括:函数形式参数、自动变量、______。
2、用 static 声明的局部变量,其存储区域在______,程序运行期间始终占据固定的存储空间。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
void add() {
// 定义静态局部变量,编译时初始化一次
static int sum = 0;
int temp = 1;
sum += temp;
printf("sum的值:%d
", sum);
}
int main() {
add();
add();
add();
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第40练,内容涵盖第7章函数的7.8.3 变量的存储类型(auto/static/register/extern)。
《C语言程序设计》(电子工业出版社)一课一练 第40练
第7章 函数
7.8.3 变量的存储类型(auto/static/register/extern)
1、 单项选择题(本题共4小题)
1、下列关于 auto 变量的描述,正确的是( )
A. auto 关键字必须显式声明,不能省略
B. auto 变量属于静态存储方式,函数调用结束后存储空间不释放
C. 函数中的形参默认属于 auto 变量
D. auto 变量如果不赋初值,默认值为 0
【答案】C
【解析】auto 关键字可以省略,未加 static 的局部变量和形参默认是 auto 类型,选项 A 错误;auto 变量属于动态存储方式,函数调用结束后释放存储空间,选项 B 错误;auto 变量不赋初值时,值是不确定的,选项 D 错误;只有选项 C 符合 auto 变量的特性。
2、静态局部变量与自动变量的核心区别是( )
A. 静态局部变量的作用域更大
B. 静态局部变量在编译时只赋初值一次,函数调用结束后保留存储空间
C. 静态局部变量只能在函数内部定义
D. 静态局部变量必须赋初值,否则会报错
【答案】B
【解析】静态局部变量和自动变量的作用域都局限于函数内部,选项 A 错误;两者都可以在函数内部定义,选项 C 错误;静态局部变量不赋初值时默认是 0,不会报错,选项 D 错误;选项 B 准确描述了静态局部变量的生存期和初始化特点,是核心区别。
3、下列变量中,不能用 register 关键字声明的是( )
A. 函数的形参
B. 函数内部的自动变量
C. 静态局部变量
D. 复合语句中的自动变量
【答案】C
【解析】register 变量只能是局部自动变量或函数形参,静态局部变量属于静态存储方式,不能放在 CPU 寄存器中,因此无法用 register 声明,选项 C 正确。
4、extern 关键字的主要作用是( )
A. 声明静态局部变量
B. 扩展外部变量的作用域
C. 定义自动变量
D. 提高变量的执行效率
【答案】B
【解析】extern 用于声明已定义的外部变量,让定义点之前的函数也能合法使用该变量,从而扩展其作用域;选项 A 是 static 的作用,选项 C 是 auto 的作用,选项 D 是 register 的作用,因此选项 B 正确。
2、 判断题(本题共3题)
1、自动变量如果在定义时不赋初值,其默认值为 0 或空字符。( )
【答案】×
【解析】自动变量属于动态存储方式,不赋初值时,其值是随机的不确定值,只有静态局部变量或全局变量不赋初值时才默认是 0 或空字符,因此该表述错误。
2、用 static 声明的局部变量,在函数调用结束后,其存储空间不会被释放,值会保留到下一次调用。( )
【答案】√
【解析】静态局部变量存储在静态存储区,程序运行期间始终占据存储空间,函数调用结束后不会释放,下次调用时会继续使用上次保留的值,符合静态存储的特性。
3、register 变量可以是全局变量,目的是提高全局变量的访问效率。( )
【答案】×
【解析】register 变量只能是局部自动变量或函数形参,全局变量属于静态存储方式,无法放入 CPU 寄存器中,因此不能用 register 声明全局变量,该表述错误。
3、 填空题(本题共2题)
1、动态存储区中存放的数据包括:函数形式参数、自动变量、______。
【答案】函数调用时的现场保护和返回地址
【解析】动态存储区用于存放程序运行时临时需要的动态数据,现场保护和返回地址是函数调用过程中必须保存的信息,属于动态存储区的内容。填写该内容,能完整覆盖动态存储区的存储范围,符合知识点要求。
2、用 static 声明的局部变量,其存储区域在______,程序运行期间始终占据固定的存储空间。
【答案】静态存储区
【解析】静态局部变量属于静态存储方式,与全局变量同属静态存储区,这是它能在函数调用结束后保留值的核心原因。明确该存储区域,能清晰区分静态局部变量和自动变量的本质差异。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
void add() {
// 定义静态局部变量,编译时初始化一次
static int sum = 0;
int temp = 1;
sum += temp;
printf("sum的值:%d
", sum);
}
int main() {
add();
add();
add();
return 0;
}
【答案】
程序运行结果:
sum 的值:1
sum 的值:2
sum 的值:3
【解析】
sum是静态局部变量,编译时仅初始化一次为 0,每次调用add函数时保留上次的值;temp是自动变量,每次调用都会重新初始化 1。第一次调用add后sum=1,第二次调用后sum=2,第三次调用后sum=3,因此依次输出对应的结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$