内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——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定义为全局变量。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$