第21练 6.4 变量的作用域、6.5 变量的存储类别 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

2026-06-25
| 2份
| 11页
| 40人阅读
| 0人下载

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第21练,内容是6.4 变量的作用域、6.5 变量的存储类别。 《编程语言基础——C语言》(第5版)一课一练 第21练 6.4 变量的作用域、6.5 变量的存储类别 一、单选题 1. 关于局部变量,以下说法正确的是( ) A. 在函数内部定义的变量,其作用域限定在该函数内 B. 局部变量可以在程序的所有函数中使用 C. 局部变量离开定义它的函数后值自动保留 D. main()中的变量不是局部变量 2. 关于全局变量,以下说法正确的是( ) A. 全局变量必须在程序开头定义 B. 全局变量的有效范围是从定义位置到文件结束 C. 全局变量在所有源文件中均有效 D. 全局变量与局部变量同名时,两个变量合并为一个 3. 设有全局变量 int a=10; 在函数 func() 中定义同名局部变量 int a=5; 在 func() 中访问 a 时,实际使用的是( ) A. 全局变量a,值为10 B. 同时使用两个a,可能导致编译错误 C. 局部变量a,值为5,全局变量a被屏蔽 D. 由编译器随机决定使用哪一个 4. auto存储类别的变量具有的特点是( ) A. 程序运行期间一直占用内存,值不丢失 B. 只能用于全局变量 C. 可以不赋初值,系统自动初始化为0 D. 进入函数时分配内存,退出函数时释放内存 5. 有以下程序: void func() { static int x = 0; x++; printf("%d ", x); } main() { func(); func(); func(); } 程序的输出结果是( ) A. 0 0 0 B. 1 1 1 C. 1 2 3 D. 0 1 2 6. 关于register存储类别变量,正确的描述是( ) A. 将变量存储在CPU寄存器中以提高访问速度,适用于频繁使用的变量 B. register变量必须赋初值 C. register变量不能用于循环控制变量 D. 所有类型的变量都可以声明为register 7. 在C语言中,如果要在文件2中使用文件1中定义的全局变量,应该在文件2中使用( ) A. static声明该变量 B. extern关键字声明该变量 C. 重新定义一个同名变量 D. auto声明该变量 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int a = 10; void func() { int a = 3; a = a + 5; printf("%d ", a); } main() { func(); printf("%d ", a); } 三、程序填空题 9. 以下程序的功能是:使用static变量统计函数被调用的次数。请填空。 #include <stdio.h> void counter() { 【1】int count = 0; count++; printf("count=%d ", count); } main() { counter(); counter(); counter(); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是在func()中输出变量a的值,在main()中输出变量b的值。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 void func() L3 { L4 int a = 10, b = 20; L5 printf("func: a=%d ", a); L6 } L7 main() L8 { L9 func(); L10 printf("main: b=%d ", b); L11 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第21练,内容是6.4 变量的作用域、6.5 变量的存储类别。 《编程语言基础——C语言》(第5版)一课一练 第21练 6.4 变量的作用域、6.5 变量的存储类别 一、单选题 1. 关于局部变量,以下说法正确的是( ) A. 在函数内部定义的变量,其作用域限定在该函数内 B. 局部变量可以在程序的所有函数中使用 C. 局部变量离开定义它的函数后值自动保留 D. main()中的变量不是局部变量 【答案】A 【解析】局部变量是在函数内部声明的变量(包括形参),其作用域限定在该函数内,离开该函数后不再有效。main()中的变量也是局部变量。不同函数中可使用同名局部变量,它们代表不同的个体。 2. 关于全局变量,以下说法正确的是( ) A. 全局变量必须在程序开头定义 B. 全局变量的有效范围是从定义位置到文件结束 C. 全局变量在所有源文件中均有效 D. 全局变量与局部变量同名时,两个变量合并为一个 【答案】B 【解析】在函数外定义的变量称为全局变量(外部变量或全程变量)。其有效范围从定义位置开始到文件结束,此范围内的任何位置(包括函数内)都可访问。若需在多个源文件中使用,需用extern声明。 3. 设有全局变量 int a=10; 在函数 func() 中定义同名局部变量 int a=5; 在 func() 中访问 a 时,实际使用的是( ) A. 全局变量a,值为10 B. 同时使用两个a,可能导致编译错误 C. 局部变量a,值为5,全局变量a被屏蔽 D. 由编译器随机决定使用哪一个 【答案】C 【解析】C语言允许局部变量和全局变量同名。在局部变量的作用范围内,全局变量将被屏蔽,暂时不起作用。因此func()中访问的是局部变量a=5,而非全局变量a=10。 4. auto存储类别的变量具有的特点是( ) A. 程序运行期间一直占用内存,值不丢失 B. 只能用于全局变量 C. 可以不赋初值,系统自动初始化为0 D. 进入函数时分配内存,退出函数时释放内存 【答案】D 【解析】auto是局部变量默认的存储类别。auto变量采用动态存储方式:进入函数时分配内存空间,退出函数时释放空间。auto变量若不赋初值,其值是不确定的(随机值),不会自动初始化为0。 5. 有以下程序: void func() { static int x = 0; x++; printf("%d ", x); } main() { func(); func(); func(); } 程序的输出结果是( ) A. 0 0 0 B. 1 1 1 C. 1 2 3 D. 0 1 2 【答案】C 【解析】static局部变量采用静态存储方式,程序运行期间一直占用内存单元。即使函数调用结束,其值也不会消失。三次调用:第1次x从0增到1输出1,第2次x从1增到2输出2,第3次x从2增到3输出3。 6. 关于register存储类别变量,正确的描述是( ) A. 将变量存储在CPU寄存器中以提高访问速度,适用于频繁使用的变量 B. register变量必须赋初值 C. register变量不能用于循环控制变量 D. 所有类型的变量都可以声明为register 【答案】A 【解析】register变量建议编译器将变量存储在CPU寄存器中以提高访问速度。循环控制变量(如for中的i)常声明为register。但register只是建议,编译器可能不接受;且register变量不能取地址(&操作)。 7. 在C语言中,如果要在文件2中使用文件1中定义的全局变量,应该在文件2中使用( ) A. static声明该变量 B. extern关键字声明该变量 C. 重新定义一个同名变量 D. auto声明该变量 【答案】B 【解析】extern用于声明一个在其他文件中定义的全局变量,实现跨文件共享。static限制了全局变量的作用域(限定在本文件内),auto用于局部变量,重新定义同名变量会造成重复定义错误。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int a = 10; void func() { int a = 3; a = a + 5; printf("%d ", a); } main() { func(); printf("%d ", a); } 【答案】8 10 【解析】func()中定义了局部变量a=3,屏蔽了全局变量a=10。func()中a=3+5=8,输出8。main()中a访问的是全局变量,值仍为10。因此输出"8 10"。 三、程序填空题 9. 以下程序的功能是:使用static变量统计函数被调用的次数。请填空。 #include <stdio.h> void counter() { 【1】int count = 0; count++; printf("count=%d ", count); } main() { counter(); counter(); counter(); } 【答案】【1】static 【解析】static int count = 0声明count为静态局部变量。static变量在程序运行期间一直占用内存,函数调用结束其值不消失。三次调用后输出count=1, count=2, count=3。若用auto(默认),每次count都从0重新开始,输出三个"count=1"。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是在func()中输出变量a的值,在main()中输出变量b的值。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 void func() L3 { L4 int a = 10, b = 20; L5 printf("func: a=%d ", a); L6 } L7 main() L8 { L9 func(); L10 printf("main: b=%d ", b); L11 } 【答案】【1】L10: printf("main: b=%d ", b); → 修改为在main()中定义int b后再使用(b是func()中的局部变量,在main()中不可见)。可在L8后添加 int b = 30; 后编译通过,也可以将b定义为全局变量。 【解析】func()中定义的变量b是局部变量,其作用域限定在func()函数体内。main()中不能访问func()的局部变量b,会导致编译错误(变量未定义)。需在main()中重新定义b,或将b定义为全局变量。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第21练 6.4 变量的作用域、6.5 变量的存储类别 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
1
第21练 6.4 变量的作用域、6.5 变量的存储类别 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。