国家二级C语言机试(函数和数组)模拟试卷21
选择题
1.有以下程序
void fun2(char a,char b) main()
{printf(\\(B)
A. A B E F
B. C D E F
C. A B C D
D. C D A B
解析:在fun1()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行fun2(’E’,’F’)语句,变量a、b的值变为’E’、’F’并输出。
2.有以下程序
#include main(){int k=4,m=1,p;
fun(int a,int b){int static m=0,i=2; p=fun(k,m);
i=i+m+1; printf(\\(A)
A. 8,17
B. 7,16
C. 8,8
D. 7,17
解析:本题考查了静态变量以及局部变量的同名问题。主函数中调用fun函数两次,第一次调用fun(4,1),形参a和b接收以后,i值为3,m的值为8,调用结束返回8存放到p中并且输出p的值为8,除了静态变量m和i,变量a,b撤销。第二次调用fun(4,1),接收实参值以后,i为3+8+1,而m为12+4+1,即输出函数值17。
3.有以下程序
#include
func(int n) void main()
{static int num=1; {func(3);func(4);printf(\\(C)
A. 4 5
B. 3 5
C. 4 8
D. 3 4
解析:在函数func(int n)中定义了局部静态变量num,其初始值等于l,所以在主函数中执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)时,输出8。
4.有以下程序
fun(int x,int y) main()
{static int m=0,i=2; {int j=l,m=1,k;
i+=m+1;m=i+x+y;return m; k=fun(j,m);printf(\\(B)
A. 5,5
B. 5,11
C. 11,11
D. 11,5
解析:子函数fun(int x,int y),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为11。
5.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是(D)
A. extern和register
B. auto和static
C. static和register
D. auto和register
解析:在C语言中,动态变量(auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量(extern)一经定义,系统为其分配固定的内存单元;静态变量(static),编译系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在CPU的寄存器中。
6.有以下程序
#include main(){int i,s=1:
int fun(){static int x=1; for(i=1;i<=3;i++)
x*=2; s*=fun();
return x;} printf(\\(D)
A. 0
B. 10
C. 30
D. 64
解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8,值为64。
7.有以下程序
#include
int f(int n);
main(){int a=3,s; int f(int n){static int a=1;
s=f(a); n+=a++;
s=s+16(a); return n;
printf(\\(A)
A. 9
B. 8
C. 7
D. 10
解析:在主函数中第一次调用f(a)时,得到变量s的值等于4,在第二次调用f(a)时,在子函数f中由于变量a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用f(a)后,其返回值等于5,最后变量s的值等于9。
8.有以下程序
#include
int fun(){static int x=1; main(){int i,s=1;
x+=1; for(i=1;i<=5;i++)s+=fun();
return x;) printf(\\(B)
A. 11
B. 21
C. 6
D. 120
解析:这道试题主要考查了局部静态变量的应用。在函数fun()中定义了局部静态变量整型x,其初值等于1,在主函数中循环执行5次,第一次变量s的值等于3,变量x的值等于2,第二次变量s的值等于6,变量x的值等于3,第三次变量s的值等于10,变量x的值等于4,第四次变量s的值等于15,变量x的值等于5,第五次变量s的值等于21,变量x的值等于6。
9.有以下程序
int fun(int x[],int n) main()
{static int sum=0,i;{int a[]={1,2,3,4,5),b[]={6,7,8,9),s=0;
for(i=0;i<n;i++) sum+=x[i]; s=fun(a,5)+fun(b,4);printf(\\(C)
A. 50
B. 45
C. 60
D. 55
解析:在函数int fun(int x[],int n)的定义中,变量sum使用了static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期问,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数int fun(int x[],int n)的功能是求出数组x[]各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量sum=1+2+3+4+5=15.当再次调用F
本文档预览:3600字符,共11025字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载