变量的存储类别题库共25页word资料.docx
《变量的存储类别题库共25页word资料.docx》由会员分享,可在线阅读,更多相关《变量的存储类别题库共25页word资料.docx(18页珍藏版)》请在冰豆网上搜索。
![变量的存储类别题库共25页word资料.docx](https://file1.bdocx.com/fileroot1/2022-11/27/a7f1e896-7119-4d11-bda4-a9759cd83ef6/a7f1e896-7119-4d11-bda4-a9759cd83ef61.gif)
变量的存储类别题库共25页word资料
第七章变量的存储类别
一、选择题
1.有以下程序
#include
inta=2;
intf(intn)
staticinta=3;
intt=0;
if(n%2)
staticinta=4;t+=a++;
else
staticinta=5;t+=a++;
returnt+a++;
voidmain()
ints=a,i;
for(i=0;i<3;i++)s+=f(i);
printf("%d\n",s);
程序运行后的输出结果是______。
A)26B)28C)29D)24
答案:
C
2.凡是函数中未指定存储类别的局部变量,其默认的存储类别是。
A)autoB)registerC)externD)static
答案:
A
3.以下不正确的说法是。
A)在不同的函数中可以使用名称相同的变量
B)在函数内定义的变量只在本函数范围内有效
C)形式参数是局部变量
D)在函数内的复合语句中定义的变量在本函数范围内有效
答案:
D
4.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是。
A)autoB)registerC)externD)static
答案:
D
5.如果在一个函数中的复合语句中定义了一个变量,则以下说法正确的是。
A)在本函数范围内有效
B)在本程序范围内有效
C)只在复合语句中有效
D)非法变量
答案:
C
6.下列变量定义错误的是。
A)intx,y;
B)registerstaticinta,b,c;
C)autointx,y;
D)externintA;
答案:
B
7.以下程序的正确运行结果是_____________。
#include
intm=1;
intn=5;
intmin(inta,intb);
voidmain()
intm=100,n=10,t;
t=min(m,n);
printf("%d\n",t);
intmin(inta,intb)
intc;
c=(a<=b)?
a:
b;
return(c);
A)1B)5C)10D)0
答案:
C
8.以下程序的正确运行结果是_____________。
#include
voidmain()
intm=1,n=2,t=3;
++m;
t+=++n;
intn=10,t;
t=n*2;
m+=t;
printf("%d,%d,%d\n",m,n,t);
printf("%d,%d,%d\n",m,n,t);
A)22,11,5B)22,10,20
18,5,622,3,6
C)32,9,5D)16,21,6
10,10,2022,3,9
答案:
B
9.以下叙述中正确的是。
(A)全局变量的作用域一定比局部变量的作用域范围大
(B)静态(static)类别变量的生存期贯穿于整个程序的运行期间
(C)函数的形参都属于全局变量
(D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
答案:
B
10.下面程序的输出是。
#include
intfun3(intx)
staticinta=3;
a+=x;
return(a);
voidmain()
intk=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
inta=2;
intf(int*a)
return(*a)++;
voidmain()
ints=0;
inta=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)autoB)registerC)staticD)extern
答案:
A
15.下面程序运行后的输出结果是。
#include
intf()
staticinti=0;
ints=1;
s+=i;i++;
returns;
voidmain()
inti,a=0;
for(i=0;i<5;i++)
a+=f();
printf("%d\n",a);
A)20B)24C)25D)15
答案:
D
16.以下程序:
#include
voidmain()
inti=1,j=3;
printf("%d,",i++);
inti=0;
i+=j*2;
printf("%d,%d,",i,j);
printf("%d,%d\n",i,j);
其输出结果是
A)1,6,3,1,3B)1,6,3,2,3C)1,6,3,6,3D)1,7,3,2,3
答案:
B)
17.以下程序:
#include
voidfun(int*s)
staticintj=0;
do
s[j]+=s[j+1];
while(++j<2);
voidmain()
intk,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)fun(a);
for(k=0;k<5;k++)printf("%d",a[k]);
其输出结果是
A)34756B)23445C)35745D)12345
答案:
C)
18.以下程序的输出结果是。
#include
inta=1;
intfun(intk)
staticinta=5;
a+=k;printf("%d",a);
return(a);
voidmain()
intb=3;
printf("%d\n",fun(b+fun(a)));
(A)699(B)669(C)61515(D)6615
答案:
C
19.下列程序的输出结果为。
#include
intc=6;
voidtest(int*x,inty)
*x=3*(*x);y=*x+y;c=y%(*x);
printf("x=%d,y=%d,c=%d\n",*x,y,c);
voidmain()
inta=1,b=4;
test(&a,b);
printf("a=%d,b=%d,c=%d\n",a,b,c);
(A)x=1,y=7,c=3(B)x=3,y=7,c=1
a=3,b=4,c=1a=4,b=3,c=1
(C)x=3,y=7,c=1(D)x=3,y=4,c=1
a=3,b=4,c=1a=3,b=7,c=1
答案:
C
20.以下程序的运行结果是。
#include
intd=1;
voidfun(intp)
intd=5;
d+=p++;
printf("%d",d);
voidmain()
inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
A)53B)84C)58D)54
答案:
B
二、填空题
1.只有在函数内才能使用的变量称为_【_1_】_变量。
答案:
【1】内部或局部
2.主函数也_【_1_】_使用其它函数中定义的局部变量。
答案:
【1】不能
3.不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。
此说法正确吗?
_【_1_】_。
答案:
【1】正确
4.在所有函数之外定义的变量称为_【_1_】_变量。
答案:
【1】外部或全局
5.设全局变量的作用是:
增加了_【_1_】_间数据联系的渠道。
答案:
【1】函数
6.全局变量可以为其它函数所共用,它的有效范围为:
从_【_1_】_的位置开始到文件结束。
答案:
【1】定义
7.建议不在必要时不要使用全局变量,因为它使函数的_【_1_】_降低了。
答案:
【1】通用性或可靠性
8.外部变量的定义只能有_【_1_】_次,而外部变量的说明可以有_【_2_】_次。
答案:
【1】一;【2】多
9.对外部变量的初始化只能在_【_1_】_时进行。
答案:
【1】定义
10.如果在局部变量的作用范围内与外部变量同名,则_【_1_】_变量不起作用。
答案:
【1】外部
11.从变量的_【_1_】_(即从空间)角度来分,可以分为全局变量和局部变量。
答案:
【1】作用域
12.从变量值存在的时间(即_【_1_】_)角度来分,可以分为静态存储变量和动态存储变量。
答案:
【1】生存期
13.在C语言中每一个变量和函数有两个属性:
_【_1_】_和数据的存储类别。
答案:
【1】数据类型
14.存储类别指的是数据在_【_1_】_中的存储方法。
答案:
【1】内存
15.在C语言中,存储方法分为两大类:
静态存储类和动态存储类,具体包含四种:
自动的、_【_1_】_、静态的、_【_2_】_。
前两种属于动态存储类,后两种属于静态存储类。
答案:
【1】寄存器的;【2】外部的
16.静态存储是整个程序运行时间都存在,而动态存储则是在调用函数时临时分配单元。
所以,形式参数属于_【_1_】_存储类。
答案:
【1】动态
17.自动变量、寄存器变量、形式参数都属于局部变量,在离开函数时,其值_【_1_】_,而静态局部变量在离开函数时,其值_【_2_】_。
答案:
【1】就消失;【2】仍保留
18.如果需要保留函数上一次调用结束时的值,或变量初始化后只被引用而不改变其值,则这时采用_【_1_】_变量比较方便,以免每次调用时重新赋值。
答案:
【1】静态
19.如不必要,不要多用静态局部变量。
不仅长期占用内存不释放,浪费空间,而且当调用次数多时往往弄不清其当前值是什么,降低了程序的_【_1_】_。
答案:
【1】可读性
20.对自动变量如果不赋初值,则它的值是一个_【_1_】_值。
答案:
【1】不确定的
21.对静态变量和外部变量是在编译时赋初值的,即只赋初值一次。
如果在定义时不赋初值的话,则系统自动对数值型变量赋初值_【_1_】_或对字符型变量赋初值_【_2_】_。
答案:
【1】0;【2】'\0'
22.全局变量包括外部变量和静态外部变量,两者的区别是:
_【_1_】_变量只限于本文件引用,而_【_2_】_变量允许其它文件引用。
答案:
【1】静态外部;【2】外部
23.函数本质上是全局的,因为一个函数要被另外的函数调用,但是,根据函数能否被其它源文件调用,将函数区分为_【_1_】_函数和_【_2_】_函数。
答案:
【1】内部;【2】外部
24.如果在定义函数时省略关键字_【_1_】_,则隐含为外部函数。
答案:
【1】extern
25.在定义内部函数时,需在函数类型前面加上关键字_【_1_】_。
答案:
【1】static
26.以下程序的正确运行结果是_____________。
#include
intf(inta);
voidmain()
inta=2,k;
for(k=0;k<3;k++)printf("%d",f(a));
intf(inta)
intb=0;staticintc=3;
b++;c++;
return(a+b+c);
答案:
789
27.以下程序的正确运行结果是_____________。
#include
inta=4,b=6;
intmax(inta,intb)
intc;
c=a>b?
a:
b;
return(c);
voidmain()
inta=8;
printf("%d\n",max(a,b));
答案:
8
28.以下程序的正确运行结果是_____________。
#include
intf(inta)
autointb=0;
staticc=2;
b++;
c++;
return(a+b+c);
voidmain()
inta=1,n;
for(n=0;n<=2;n++)
printf("%d",f(a));
答案:
567
29.以下程序的正确运行结果是_____________。
#include
intn=1;
voidf();
voidmain()
staticintx=10;
inty;
y=n;
f();
printf("main:
%d,%d,%d\n",x,y,n);
voidf()
staticintx=5;
inty=4;
x=x+1;
n=n+10;
y=y+n;
printf("f:
%d,%d,%d\n",x,y,n);
答案:
f:
6,15,11
main:
10,1,11
30.以下程序的正确运行结果是_____________。
#include
intm=1;
intn=2;
intmul(inta,intb);
voidmain()
intm=5,n=10,s;
s=mul(m,n);
printf("m+n=%d\n",s);
intmul(inta,intb)
intc;
c=a*b;
return(c);
答案:
m+n=50
31.下列程序的输出结果为
#include
inta=0,b=0;
voidfun()
inta=5;
printf("%d,%d",a,b);
voidmain()
b=5;
fun();
printf("%d,%d\n",a,b);
答案:
5,50,5
32.以下程序的输出结果是。
#include
intfun(intx,inty)
staticintm=0,i=2;
i+=m+1;m=i+x+y;
returnm;
voidmain()
intj=4,m=1,k;
k=fun(j,m);printf("%d,",k);
k=fun(j,m);printf("%d\n",k);
答案:
8,17
33.以下程序的执行结果是。
#include
voidfunc(inta);
voidmain()
intk=4;func(k);func(k);
voidfunc(inta)
staticintm=0;
m+=a;
printf("x=%d,",m);
答案:
x=4,x=8,
34.下面程序运行后的输出结果是。
#include
intx=3;
voidincre();
voidmain()
inti;
for(i=1;ivoidincre()
staticintx=1;
x*=x+1;
printf("%d",x);
答案:
26
35.以下程序的输出结果是。
#include
voidmain()
inta=3,b=2,c=1;
c-=++b;
b*=a+c;
intb=5,c=12;
c/=b*2;
a-=c;
printf("%d,%d,%d,",a,b,c);
a+=--c;
printf("%d,%d,%d\n",a,b,c);
答案:
2,5,1,2,3,-2
36.要使一个局部变量在两次函数调用中保持其值,必须说明成是存储类型的。
答案:
Static
37.以下程序的运行结果为。
#include
voidas();
voidmain()
inti;
for(i=0;i<2;i++)
as();
voidas()
intlv=0;
staticintsv=0;
printf("lv=%d,sv=%d",lv,sv);
lv++;
sv++;
return;
答案:
lv=0,sv=0lv=0,sv=1
三、编程题
1.编写程序,统计从键盘上输入的字符包含的单词数,单词之间用空格分隔。
【要求】
①分析题意,建立数据模型,设计算法。
②编程
答案:
#include
main()
{chararrstr[100],ch1,ch2='';
inti,num;
i=0;
num=0;
gets(arrstr);
while(arrstr[i]!
='\0')
{ch1=arrstr[i];
if(i==0)ch2='';
elsech2=arrstr[i-1];
if(ch1!
=''&&ch2=='')num++;
i++;
printf("Thereare%dwords.\n",num);
2.编写程序。
将二维数组的行列互换后存到另一个二维数组中。
【要求】
①分析题意,建立数据模型,设计算法。
②编程
答案:
main()
{intarr1[2][3]={{1,2,3},{4,5,6}};
intarr2[3][2],i,j;
printf("arr1:
\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf("%6d",arr1[i][j]);
arr2[j][i]=arr1[i][j];
printf("\n");
printf("arr1:
\n");
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%6d",arr2[i][j]);
printf("\n");
3.编写程序。
输出两个数值中较大者。
(1)自定义函数max(x,y),返回值为x,y中较大者。
【要求】
①分析题意,建立数据模型,设计算法。
②编程
(2)在主函数main中输出。
【要求】
①分析题意,建立数据模型,设计算法。
②编程
答案:
inty=5;
main()
{intx=10;
printf("%d",max(x,y));
max(x,y)
{intz;
z=x>y?
x:
y;
return(z);
4.编写程序。
计算英文句子中最长单词包含的字符数。
(该句中只包含字符和空格,各单词间以空格作为分隔符,句子以“.”作为结束符。
)
【要求】
①分析题意,建立数据模型,设计算法。
②编程
答案:
#include
main()
{char*p,s[]={"Iamastudent."};
intmax=0,lens=0;
p=s;
while(*p!
='.')
{while(((*p<='z')&&(*p>='a'))||((*p<='Z')&&(*p>='A')))
{lens++;
p++;}
if(lens>max)max=lens;
lens=0;
p++;}
printf("max=%d",max);
5.编写程序。
给出年、月、日,计算该日是该年的第几天。
要求年、月、日在主函数main中输入,计算该日是该年的第几天的工作在函数getdays中完成。
【要求】
①分析题意,建立数据模型,设计算法。
②编程
答案:
unsignedmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
main()
{intyear,month,day,days;
printf("请输入年月日:
");
scanf("%u%u%u",&year,&month,&day);
if((year%4==0&&year%100!
=0)||(year%400)==0)months[2]=29;
days=getdays(month,day);
printf("%d年%d月%d日是该年的第%d天。
\n",year,month,day,days);
intgetdays(intmonth,intday)
{unsigneddays=0,i;
for(i=1;idays+=months[i];
days+=day;
returndays;
希望以上资料对你有所帮助,附励志名言3条:
1、要接受自己行动所带来的责任而非自己成就所带来的荣耀。
2、每个人都必须发展两种重要的能力适应改变与动荡的能力以及为长期目标延缓享乐的能力。
3、将一付好牌打好没有什么了不起能将一付坏牌打好的人才值得钦佩。