内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第26练,内容是6.4-6.5 局部变量、全局变量、静态变量、外部变量。
《C语言》(第五版)一课一练 第26练
6.4-6.5 局部变量、全局变量、静态变量、外部变量
一、单选题
1. 关于C语言局部变量,以下说法正确的是( )
A. 局部变量可以在程序的任何函数中直接访问
B. 局部变量默认具有全局作用域
C. 局部变量在其所在函数和复合语句内有效
D. 局部变量在程序运行期间一直占用内存
2. 关于C语言全局变量,以下说法正确的是( )
A. 全局变量定义时必须加global关键字
B. 全局变量不能在所有函数中共享使用
C. 全局变量的作用域限定在定义它的文件中
D. 在函数外部定义的变量称为全局变量
3. 以下程序段中静态局部变量的特点是
void f()
{
static int count = 0;
count++;
printf("%d ", count);
}( )
A. count每次调用f时重新初始化为0
B. count的值在调用f时不能再被修改
C. count在多次调用间保持上一次的值
D. static修饰符让count变为全局变量
4. 已知以下程序:
int x = 5;
void f()
{
int x = 10;
printf("%d ", x);
}
main() { f(); printf("%d", x); }
输出结果是( )
A. 10 5
B. 5 10
C. 5 5
D. 10 10
5. C语言中,函数内部定义的未加存储类别说明符的变量,其默认存储类别是( )
A. static(静态存储类别)
B. register(寄存器存储类别)
C. extern(外部存储类别)
D. auto(自动存储类别)
6. 以下程序输出结果是
void test()
{
int a = 0;
static int b = 0;
a++; b++;
printf("a=%d, b=%d
", a, b);
}
main() { test(); test(); test(); }( )
A. 三次均输出 a=1, b=1
B. a=1,b=1 / a=1,b=2 / a=1,b=3
C. a=1,b=1 / a=1,b=1 / a=1,b=1
D. a=1,b=1 / a=2,b=2 / a=3,b=3
7. 关于extern关键字的作用,以下说法正确的是( )
A. extern声明可以引用另一个文件中定义的全局变量
B. extern用于定义一个新的全局变量
C. extern修饰的变量用于引用当前文件之外的全局变量
D. extern变量的值在多次调用后自动重置为0
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
int n = 10;
void func()
{
static int m = 5;
int k = 2;
m = m + k;
n = n + m;
printf("%d %d
", m, n);
}
main()
{
func();
func();
}
三、案例分析题
9. 以下程序的函数counter每被调用一次就返回一个递增的计数值(从1开始)。请填空。
#include <stdio.h>
int counter()
{
【1】 int cnt = 0;
cnt = cnt + 1;
return cnt;
}
main()
{
printf("%d ", counter());
printf("%d ", counter());
printf("%d", counter());
}
四、综合应用题
10. 编写一个C程序:定义一个函数 float average(float score),该函数接收一次考试分数,利用静态变量累计已输入的总分和人数,返回当前的平均分。在main中连续输入5个分数,每输入一个就调用average并输出累计平均分。
提示:使用static变量存储总分和人数,每次调用时更新并返回计算结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《C语言》(第五版)《一课一练》第26练,内容是6.4-6.5 局部变量、全局变量、静态变量、外部变量。
《C语言》(第五版)一课一练 第26练
6.4-6.5 局部变量、全局变量、静态变量、外部变量
一、单选题
1. 关于C语言局部变量,以下说法正确的是( )
A. 局部变量可以在程序的任何函数中直接访问
B. 局部变量默认具有全局作用域
C. 局部变量在其所在函数和复合语句内有效
D. 局部变量在程序运行期间一直占用内存
【答案】C
【解析】局部变量(自动变量)定义在函数内部及复合语句中,作用域限定在定义该变量的函数及复合语句范围内,外部函数不能直接访问。局部变量在函数被调用时分配内存,函数执行完毕后自动释放。没有加static关键字的局部变量属于自动存储类别。
2. 关于C语言全局变量,以下说法正确的是( )
A. 全局变量定义时必须加global关键字
B. 全局变量不能在所有函数中共享使用
C. 全局变量的作用域限定在定义它的文件中
D. 在函数外部定义的变量称为全局变量
【答案】D
【解析】全局变量在所有函数外部定义,从定义位置开始到源文件结束范围内的所有函数都可以使用(除非被同名的局部变量屏蔽)。使用extern声明后,其他源文件中的函数也可以引用。C语言中没有global关键字,定义在函数外的变量自动具有全局作用域。
3. 以下程序段中静态局部变量的特点是
void f()
{
static int count = 0;
count++;
printf("%d ", count);
}( )
A. count每次调用f时重新初始化为0
B. count的值在调用f时不能再被修改
C. count在多次调用间保持上一次的值
D. static修饰符让count变为全局变量
【答案】C
【解析】static修饰的局部变量具有静态存储期,初始化过程在程序启动时进行一次,其值在函数多次调用之间保持不变。第一次调用f时count从0增至1输出1;第二次调用count从1增至2输出2;第三次输出3,以此类推。
4. 已知以下程序:
int x = 5;
void f()
{
int x = 10;
printf("%d ", x);
}
main() { f(); printf("%d", x); }
输出结果是( )
A. 10 5
B. 5 10
C. 5 5
D. 10 10
【答案】A
【解析】当局部变量与全局变量同名时,在局部变量的作用域内,局部变量会屏蔽同名的全局变量。f函数中int x=10是局部变量,输出的10是局部x的值。main中访问的x没有局部定义,使用的是全局变量x=5,输出5。两个变量虽然同名但互不影响。
5. C语言中,函数内部定义的未加存储类别说明符的变量,其默认存储类别是( )
A. static(静态存储类别)
B. register(寄存器存储类别)
C. extern(外部存储类别)
D. auto(自动存储类别)
【答案】D
【解析】函数内定义的变量如果没有明确指定存储类别,默认为auto(自动存储类别)。auto变量在函数调用时分配存储空间,函数返回时自动释放。auto关键字在实际编程中通常省略不写,省略后编译器仍按自动变量处理。register是建议编译器将变量放入寄存器的类别。
6. 以下程序输出结果是
void test()
{
int a = 0;
static int b = 0;
a++; b++;
printf("a=%d, b=%d
", a, b);
}
main() { test(); test(); test(); }( )
A. 三次均输出 a=1, b=1
B. a=1,b=1 / a=1,b=2 / a=1,b=3
C. a=1,b=1 / a=1,b=1 / a=1,b=1
D. a=1,b=1 / a=2,b=2 / a=3,b=3
【答案】B
【解析】a是自动变量,每次调用test时重新分配并初始化为0,每次a从0到1,输出a=1。b是静态局部变量,初始化一次后值持续保持。第一次b从0到1,第二次从1到2,第三次从2到3。三次调用输出结果依次为a=1,b=1、a=1,b=2、a=1,b=3。
7. 关于extern关键字的作用,以下说法正确的是( )
A. extern声明可以引用另一个文件中定义的全局变量
B. extern用于定义一个新的全局变量
C. extern修饰的变量用于引用当前文件之外的全局变量
D. extern变量的值在多次调用后自动重置为0
【答案】A
【解析】extern关键字用于声明一个变量(注意是声明不是定义),表示该变量已在其他文件中定义过,也可以在本文件后面的位置定义,当前代码可以引用它。这样可以访问跨文件的全局变量。extern声明不会为变量分配新的存储空间,作用是告诉编译器该变量的类型和名称。
二、简答题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
int n = 10;
void func()
{
static int m = 5;
int k = 2;
m = m + k;
n = n + m;
printf("%d %d
", m, n);
}
main()
{
func();
func();
}
【答案】7 17
9 26
【解析】第一次调用func:m=5+2=7(静态变量m保持新值),n=10+7=17(全局变量被修改),输出7 17。第二次调用:m=7+2=9(m保持了上次的7),n=17+9=26(n保持了上次的17),输出9 26。此题综合展示了静态变量与全局变量的持久性。
三、案例分析题
9. 以下程序的函数counter每被调用一次就返回一个递增的计数值(从1开始)。请填空。
#include <stdio.h>
int counter()
{
【1】 int cnt = 0;
cnt = cnt + 1;
return cnt;
}
main()
{
printf("%d ", counter());
printf("%d ", counter());
printf("%d", counter());
}
【答案】【1】static
【解析】要实现每次调用返回递增计数值的功能,cnt必须用static修饰为静态局部变量。这样cnt初始化流程不会重复执行,每次调用在原来值基础上加1后返回。若不加static,cnt每次会重新初始化为0,counter一直返回1。程序最终输出1 2 3。
四、综合应用题
10. 编写一个C程序:定义一个函数 float average(float score),该函数接收一次考试分数,利用静态变量累计已输入的总分和人数,返回当前的平均分。在main中连续输入5个分数,每输入一个就调用average并输出累计平均分。
提示:使用static变量存储总分和人数,每次调用时更新并返回计算结果。
【答案】#include <stdio.h>
float average(float score)
{
static float sum = 0;
static int count = 0;
sum = sum + score;
count = count + 1;
return sum / count;
}
main()
{
float s;
int i;
printf("请输入5个分数:
");
for (i = 0; i < 5; i++)
{
scanf("%f", &s);
printf("当前平均分=%.2f
", average(s));
}
}
【解析】average函数内部声明两个static变量sum(累计总分)和count(累计人数),每次调用时用当前分数更新sum和count,返回sum/count作为实时平均分。使用static确保这些统计数据在多次调用之间持续有效,每次求得的平均分都基于全部历史数据。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$