第32练 单元7 局部变量与全局变量、存储方式、内部 外部函数全解《C语言程序设计》(高教版第2版)一课一练
|
2份
|
7页
|
39人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元7的第32练,内容涵盖单元7“考试系统”的模块化设计的7.2.7~7.2.9 局部变量与全局变量、存储方式、内部 / 外部函数全解。
《C语言程序设计》(高教版第2版)一课一练 第32练
单元7 “考试系统”的模块化设计
7.2.7~7.2.9 局部变量与全局变量、存储方式、内部 / 外部函数全解
1、 单项选择题(本题共5小题)
1、关于局部变量的描述,错误的是( )
A. 函数体内定义的局部变量,作用域仅限该函数体内
B. 不同函数中的同名局部变量,内存单元不同,互不干扰
C. 复合语句内的局部变量,仅在该复合语句范围内有效
D. 局部变量在程序运行全程占据固定的内存单元
2、当全局变量与局部变量同名时,程序执行时遵循的原则是( )
A. 全局变量优先
B. 就近原则,局部变量优先
C. 编译报错,不允许同名
D. 随机选择其中一个
3、以下关于静态局部变量的特点,正确的是( )
A. 每次调用函数时都会重新初始化
B. 在编译时一次性初始化,函数调用结束后仍保留值
C. 属于动态存储变量,函数结束后释放内存
D. 不能在复合语句中定义
4、内部函数(静态函数)的定义关键字是( )
A. extern
B. auto
C. static
D. register
5、自动变量的默认存储类别符是( )
A. static
B. auto
C. extern
D. register
2、 判断题(本题共4题)
1、不同函数中定义的同名局部变量,会互相干扰,因为变量名完全相同。( )
2、静态局部变量的初值是在程序运行时,每次调用函数都重新初始化。( )
3、全局变量默认是外部变量,用 extern 关键字声明后,可以被其他源文件的函数调用。( )
4、寄存器变量存储在 CPU 的寄存器中,访问速度比内存中的变量更快,适合频繁操作的数据。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于统计函数count()的调用次数,并计算 1 到输入整数的累加和,其中调用次数用静态局部变量记录,累加和用全局变量存储,请补充缺失代码使程序正常运行。
#include <stdio.h>
// 定义全局变量sum,用于存储累加和
(1)
int count() {
//定义静态局部变量num,用于记录函数调用次数
(2)
num++;
return num;
}
void add(int n) {
for(int i=1; i<=n; i++) {
//将i累加到全局变量sum中
(3)
}
}
int main() {
int n, call_times;
printf("请输入一个整数:");
scanf("%d", &n);
// 第一次调用count函数
call_times = count();
printf("第%d次调用count函数
", call_times);
//调用add函数计算累加和
(4)
printf("1到%d的累加和为:%d
", n, sum);
// 第二次调用count函数
call_times = count();
printf("第%d次调用count函数
", call_times);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元7的第32练,内容涵盖单元7“考试系统”的模块化设计的7.2.7~7.2.9 局部变量与全局变量、存储方式、内部 / 外部函数全解。
《C语言程序设计》(高教版第2版)一课一练 第32练
单元7 “考试系统”的模块化设计
7.2.7~7.2.9 局部变量与全局变量、存储方式、内部 / 外部函数全解
1、 单项选择题(本题共5小题)
1、关于局部变量的描述,错误的是( )
A. 函数体内定义的局部变量,作用域仅限该函数体内
B. 不同函数中的同名局部变量,内存单元不同,互不干扰
C. 复合语句内的局部变量,仅在该复合语句范围内有效
D. 局部变量在程序运行全程占据固定的内存单元
【答案】D
【解析】局部变量属于动态存储变量,仅在函数或复合语句执行时临时分配内存,执行结束后立即释放内存单元,不会全程占据固定空间,选项 D 错误;其他选项均符合局部变量的作用域和存储特性。
2、当全局变量与局部变量同名时,程序执行时遵循的原则是( )
A. 全局变量优先
B. 就近原则,局部变量优先
C. 编译报错,不允许同名
D. 随机选择其中一个
【答案】B
【解析】C 语言规定,当全局变量和局部变量同名时,在局部变量的作用域范围内,局部变量生效,同名全局变量暂时失效,即遵循 “就近原则”。
3、以下关于静态局部变量的特点,正确的是( )
A. 每次调用函数时都会重新初始化
B. 在编译时一次性初始化,函数调用结束后仍保留值
C. 属于动态存储变量,函数结束后释放内存
D. 不能在复合语句中定义
【答案】B
【解析】静态局部变量存储在静态存储区,编译时完成初始化,程序运行全程占据固定内存,函数调用结束后不会释放,保留当前值;选项 A、C 错误,静态局部变量可在复合语句中定义,选项 D 错误。
4、内部函数(静态函数)的定义关键字是( )
A. extern
B. auto
C. static
D. register
【答案】C
【解析】内部函数需用 static 关键字修饰,作用域仅限定义它的源文件,不能被其他文件调用;extern 用于外部函数和全局变量声明,auto 是自动变量默认存储类别,register 用于寄存器变量。
5、自动变量的默认存储类别符是( )
A. static
B. auto
C. extern
D. register
【答案】B
【解析】自动变量是 C 语言默认的存储类别,auto 关键字可以省略,未指定存储类别的局部变量默认是自动变量,属于动态存储类型。
2、 判断题(本题共4题)
1、不同函数中定义的同名局部变量,会互相干扰,因为变量名完全相同。( )
【答案】×
【解析】局部变量的作用域局限于各自的函数或复合语句,运行时占据不同的内存单元,即使变量名相同,也不会互相干扰,各自独立生效。
2、静态局部变量的初值是在程序运行时,每次调用函数都重新初始化。( )
【答案】×
【解析】静态局部变量的初值在程序编译阶段一次性完成赋值,程序运行期间不会再次初始化,函数调用结束后仍保留当前值。
3、全局变量默认是外部变量,用 extern 关键字声明后,可以被其他源文件的函数调用。( )
【答案】√
【解析】全局变量默认存储在静态存储区,作用域从定义位置到文件末尾;用 extern 声明后,可将其作用域扩展到其他源文件,实现跨文件调用。
4、寄存器变量存储在 CPU 的寄存器中,访问速度比内存中的变量更快,适合频繁操作的数据。( )
【答案】√
【解析】寄存器直接集成在 CPU 内,读取数据的速度远快于内存,因此循环变量、累加变量等频繁操作的数据,用 register 修饰可提升程序执行效率。
3、 程序填空题(本题共1题)
1、题目描述:以下程序用于统计函数count()的调用次数,并计算 1 到输入整数的累加和,其中调用次数用静态局部变量记录,累加和用全局变量存储,请补充缺失代码使程序正常运行。
#include <stdio.h>
// 定义全局变量sum,用于存储累加和
(1)
int count() {
//定义静态局部变量num,用于记录函数调用次数
(2)
num++;
return num;
}
void add(int n) {
for(int i=1; i<=n; i++) {
//将i累加到全局变量sum中
(3)
}
}
int main() {
int n, call_times;
printf("请输入一个整数:");
scanf("%d", &n);
// 第一次调用count函数
call_times = count();
printf("第%d次调用count函数
", call_times);
//调用add函数计算累加和
(4)
printf("1到%d的累加和为:%d
", n, sum);
// 第二次调用count函数
call_times = count();
printf("第%d次调用count函数
", call_times);
return 0;
}
【答案】
(1) int sum = 0;
(2) static int num = 0;
(3) sum += i;
(4) add(n);
【解析】
(1) 全局变量sum需在函数外部定义并初始化为 0,作用域覆盖整个程序,用于存储累加的最终结果。
(2) 静态局部变量num用static修饰并初始化为 0,编译时完成初始化,函数调用结束后保留当前值,实现记录调用次数的功能。
(3) 在add函数的循环中,将每次的循环变量i累加到全局变量sum中,逐步计算 1 到 n 的累加和。
(4) 在main函数中调用add函数,传入用户输入的整数n,触发累加计算逻辑,将结果存储到全局变量sum中。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$