第七章 变量的存储类别
一、选择题
1.有以下程序
#include <stdio.h>
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; i<3; i++) s+=f(i);
printf("%d\n", s);
}
程序运行后的输出结果是______。
A)26 B)28 C)29 D)24
答案: C
2. 凡是函数中未指定存储类别的局部变量,其默认的存储类别是 。
A) auto B) register C) extern D) static
答案:A
3. 以下不正确的说法是 。
A) 在不同的函数中可以使用名称相同的变量
B) 在函数内定义的变量只在本函数范围内有效
C) 形式参数是局部变量
D) 在函数内的复合语句中定义的变量在本函数范围内有效
答案:D
4. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是 。
A) auto B) register C) extern D) static
答案:D
5. 如果在一个函数中的复合语句中定义了一个变量,则以下说法正确的是 。
A) 在本函数范围内有效
B) 在本程序范围内有效
C) 只在复合语句中有效
D) 非法变量
答案:C
6. 下列变量定义错误的是 。
A) int x,y;
B) register static int a,b,c;
C) auto int x,y;
D) extern int A;
答案:B
7. 以下程序的正确运行结果是_____________。
#include <stdio.h>
int m=1;
int n=5;
int min(int a,int b);
void main( )
{
int m=100,n=10,t;
t=min(m,n);
printf ("%d\n", t);
}
int min(int a,int b)
{
int c;
c=(a<=b)? a:b;
return(c);
}
A) 1 B) 5 C) 10 D) 0
答案:C
8. 以下程序的正确运行结果是_____________。
#include <stdio.h>
void main( )
{
int m=1,n=2,t=3;
++m;
t+=++n;
{
int n=10,t;
t=n*2;
m+=t;
printf("%d,%d,%d\n",m,n,t);
}
printf("%d,%d,%d\n",m,n,t);
}
static修饰的变量A) 22,11,5 B)22,10,20
18,5,6 22,3,6
C) 32,9,5 D) 16,21,6
10,10,20 22,3,9
答案:B
9.以下叙述中正确的是 。
(A)全局变量的作用域一定比局部变量的作用域范围大
(B)静态(static)类别变量的生存期贯穿于整个程序的运行期间
(C)函数的形参都属于全局变量
(D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
答案:B
10.下面程序的输出是 。
#include <stdio.h>
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("%d\n",n);
}
(A)3 (B)4 (C)6 (D)9
答案:C
11.有以下程序
#include <stdio.h>
int a=2;
int f(int *a)
{
return(*a)++;
}
void main( )
{
int s=0;
{
int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行后输出结果是 。
(A)10 (B)9 (C)7 (D)8
答案:C
12.以下只有在使用时才为该类型变量分配内存的存储类说明是 。
(A)auto和static (B)auto和register
(C)register和static (D)extern和register
答案:B
13.下面叙述中正确的是 。
A)全局变量的作用域一定比局部变量的作用域范围大
B)静态(static)类别变量的生存期贯穿于整个程序的运行期间
C)函数的形参都属于全局变量
D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
答案:B
14.在C语言中,形参的缺省存储类型是 。
A)auto B)register C)static D)extern
答案:A
15.下面程序运行后的输出结果是 。
#include <stdio.h>
int f()
{
static int i=0;
int s=1;
s+=i;i++;
return s;
}
void main( )
{
int i,a=0;
for(i=0;i<5;i++)
a+=f( );
printf("%d\n",a);
}
A)20 B)24 C)25 D)15
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论