1、第七章 变量的存储类别一、选择题1有以下程序#include int a=2;int f(int n) static int a=3;int t=0;if(n%2) static int a=4; t += a+; else static int a=5; t += a+; return t+a+;void main() int s=a, i;for( i=0; iint m=1;int n=5;int min(int a,int b);void main( )int m=100,n=10,t;t=min(m,n);printf (“%dn“, t);int min(int a,int b)i
2、nt c;c=(avoid main( )int m=1,n=2,t=3;+m;t+=+n;int n=10,t;t=n*2;m+=t;printf(“%d,%d,%dn“,m,n,t);printf(“%d,%d,%dn“,m,n,t);A) 22,11,5 B)22,10,2018,5,6 22,3,6C) 32,9,5 D) 16,21,610,10,20 22,3,9答案:B9以下叙述中正确的是 。(A)全局变量的作用域一定比局部变量的作用域范围大 (B)静态(static)类别变量的生存期贯穿于整个程序的运行期间 (C)函数的形参都属于全局变量 (D)未在定义语句中赋初值的 auto
3、变量和 static变量的初值都是随机值答案:B10.下面程序的输出是 。#include int fun3 (int x) static int a=3; a+=x; return(a);void main( ) int k=2,m=1,n;n=fun3(k);n=fun3(m);printf(“%dn“,n);(A)3 (B)4 (C)6 (D)9答案:C11.有以下程序#include int a=2;int f(int *a) return(*a)+;void main( ) int s=0; int a=5;s+=f(s+=f(printf(“%dn“,s);执行后输出结果是 。(A
4、)10 (B)9 (C)7 (D)8答案:C12以下只有在使用时才为该类型变量分配内存的存储类说明是 。(A ) auto 和 static ( B) auto 和 register ( C) register 和 static ( D) extern 和 register答案:B13.下面叙述中正确的是 。A)全局变量的作用域一定比局部变量的作用域范围大 B)静态(static)类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋初值的 auto变量和 static变量的初值都是随机值答案:B14在 C语言中,形参的缺省存储类型是 。A)auto B)
5、register C)static D)extern答案:A15下面程序运行后的输出结果是 。#include int f() static int i=0;int s=1;s+=i;i+;return s;void main( ) int i,a=0;for(i=0;ivoid main( ) int i=1,j=3;printf(“%d,“,i+);int i=0;i+=j*2;printf(“%d,%d,“, i ,j);printf(“%d,%dn“, i ,j);其输出结果是A)1,6,3,1,3 B)1,6,3,2,3 C)1,6,3,6,3 D)1,7,3,2,3答案:B)17.
6、 以下程序:#include void fun (int *s) static int j=0;dosj+=sj+1;while (+jint a=1;int fun(int k)static int a=5;a+=k; printf(“%d “,a);return(a);void main( )int b=3;printf(“%dn“,fun(b+fun(a); (A)6 9 9 (B)6 6 9 (C)6 15 15 (D)6 6 15答案:C19. 下列程序的输出结果为 。#include int c=6;void test(int *x, int y) *x=3* (*x);y=*x+
7、y;c=y%(*x);printf (“x=%d,y=%d,c=%dn“,*x,y,c);void main ( ) int a=1,b=4;test(printf (“a=%d,b=%d,c=%dn“,a,b,c);(A)x=1,y=7,c=3 (B)x=3,y=7,c=1a=3,b=4,c=1 a=4,b=3,c=1(C)x=3,y=7,c=1 (D)x=3,y=4,c=1a=3,b=4,c=1 a=3,b=7,c=1答案:C20. 以下程序的运行结果是 。#include int d=1;void fun (int p)int d=5;d+=p+;printf (“%d “,d);voi
8、d main ( )int a=3;fun(a);d+=a+;printf (“%dn“,d);A)5 3 B)8 4 C)5 8 D)5 4答案:B二、填空题1只有在函数内才能使用的变量称为_【_1_】_变量。答案:【1】内部或局部2主函数也_【_1_】_使用其它函数中定义的局部变量。答案:【1】不能3不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。此说法正确吗?_【_1_】_。答案:【1】正确4在所有函数之外定义的变量称为_【_1_】_变量。答案:【1】外部或全局5设全局变量的作用是:增加了_【_1_】_间数据联系的渠道。答案:【1】函数6全局变量可以为其它函数所共用,它的
9、有效范围为:从_【_1_】_的位置开始到文件结束。答案:【1】定义7建议不在必要时不要使用全局变量,因为它使函数的_【_1_】_降低了。答案:【1】通用性或可靠性8外部变量的定义只能有_【_1_】_次,而外部变量的说明可以有_【_2_】_次。答案:【1】一;【2】多9对外部变量的初始化只能在_【_1_】_时进行。答案:【1】定义10如果在局部变量的作用范围内与外部变量同名,则_【_1_】_变量不起作用。答案:【1】外部11从变量的_【_1_】_(即从空间)角度来分,可以分为全局变量和局部变量。答案:【1】作用域12从变量值存在的时间(即_【_1_】_)角度来分,可以分为静态存储变量和动态存储变
10、量。答案:【1】生存期13在 C语言中每一个变量和函数有两个属性:_【_1_】_和数据的存储类别。答案:【1】数据类型14存储类别指的是数据在_【_1_】_中的存储方法。答案:【1】内存15在 C语言中,存储方法分为两大类:静态存储类和动态存储类,具体包含四种:自动的、_【_1_】_、静态的、_【_2_】_。前两种属于动态存储类,后两种属于静态存储类。答案:【1】寄存器的;【2】外部的16静态存储是整个程序运行时间都存在,而动态存储则是在调用函数时临时分配单元。所以,形式参数属于_【_1_】_存储类。答案:【1】动态17自动变量、寄存器变量、形式参数都属于局部变量,在离开函数时,其值_【_1_
11、】_,而静态局部变量在离开函数时,其值_【_2_】_。答案:【1】就消失;【2】仍保留18如果需要保留函数上一次调用结束时的值,或变量初始化后只被引用而不改变其值,则这时采用_【_1_】_变量比较方便,以免每次调用时重新赋值。答案:【1】静态19如不必要,不要多用静态局部变量。不仅长期占用内存不释放,浪费空间,而且当调用次数多时往往弄不清其当前值是什么,降低了程序的_【_1_】_。答案:【1】可读性20对自动变量如果不赋初值,则它的值是一个_【_1_】_值。答案:【1】不确定的21对静态变量和外部变量是在编译时赋初值的,即只赋初值一次。如果在定义时不赋初值的话,则系统自动对数值型变量赋初值_【
12、_1_】_或对字符型变量赋初值_【_2_】_。答案:【1】0;【2】022全局变量包括外部变量和静态外部变量,两者的区别是:_【_1_】_变量只限于本文件引用,而_【_2_】_变量允许其它文件引用。答案:【1】静态外部;【2】外部23函数本质上是全局的,因为一个函数要被另外的函数调用,但是,根据函数能否被其它源文件调用,将函数区分为_【_1_】_函数和_【_2_】_函数。答案:【1】内部;【2】外部24如果在定义函数时省略关键字_【_1_】_,则隐含为外部函数。答案:【1】extern25在定义内部函数时,需在函数类型前面加上关键字_【_1_】_。答案:【1】static26. 以下程序的正确运行结果是_。#include int f(int a);void main() int a=2,k;for(k=0;kint a=4,b=6;int max(int a,int b)int c;c=ab?a:b;return(c);void main()int a=8;printf(“%dn“,max(a,b);答案:828. 以下程序的正确运行结果是_。#include int f(int a)auto int b=0;static c=2;b+;c+;return(a+b+c);void main()int a=1,n;