变量的存储类别题库共25页文档
- 格式:doc
- 大小:48.50 KB
- 文档页数:25
第一题、单项选择题(每题1分,5道题共5分)1、以下程序:main( ) {int x=5; if (x--<5) printf(“%d\n”, x); else printf(“%d\n”, x++); },程序运行后,输出结果是:A、3B、4C、5D、62、若int w=1, x=2, y=3, z=4;则条件表达式“w>x?w:y<z?y:z”的结果为:;A、4B、3C、2D、13、设x、y均为int类型变量,且x=10,y=3,则语句 printf(“%d,%d\n”,x--,--y);的输出结果是:A、10,3B、9,3C、9,2D、10,24、若a为int类型,且其值为5,则执行完表达式a+=a-=a*a后,a的值是( )。
A、-5B、20C、-40D、255、在C语言程序中,当调用函数时,正确的是( )。
A、形参不需要分配存储单元B、内部变量开始占用存储单元C、外部变量开始占用存储单元D、全局变量开始占用存储单元第二题、多项选择题(每题2分,5道题共10分)1、已知int a[]={1,2,3,4,5,6,7,8,9},*p = a; 则值为3的表达式是()A、p+=2,*(p++)B、p+=2,*++pC、p+=2,*p++D、p+=2,++*p2、如果全局的外部变量和函数体内定义的局部变量重名,则错误说法为:A、出错B、局部变量优先C、外部变量优先D、全局的外部变量优先3、在C语言中,存储类别包括()。
A、静态B、浮点类型C、整型D、寄存器4、下列选项中关于外部变量,正确的是( )。
A、main函数是主函数,不在main函数内部定义的变量都是外部变量B、外部变量必须定义在源程序的开始处C、外部变量必须定义在所有函数的外面D、定义外部变量时,可以进行初始化5、下列选项中关于变量的生存期,不正确的描述是( )。
A、auto型变量是静态存储的,其生存期等同于程序的运行期。
B、static变量是动态存储的,函数调用结束时,static变量所占用的内存单元被释放C、register变量都是动态存储的D、外部变量都是静态存储的第三题、判断题(每题1分,5道题共5分)1、有如下程序main(){int x=3; do { printf(“%d”,x--);} while(!x); } ,该程序的执行结果是陷入死循环正确错误2、声明一个函数为外部函数,应该在声明函数的函数类型的前面加extern。
(1)自动型(堆栈型)auto内部变量省略存储类型符:内部变量是指在函数内部定义的变量。
在函数或复合语句中定义变量时省略存储符,系统默认所定义变量的存储类型是自动型。
自动型所在存储区域:存储类型是自动型的变量,存储在系统内存的堆栈区。
栈区分配存储区域,函数调用结束时,C语言就释放变量,节省内存空间。
释放变量:从内存堆栈区中收回分配给变量的存储空间。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,还要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数是,执行自动型变量数据定义语句,则系统为其在内存堆栈区分配存储菜单元,放入数据,函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在内存堆栈区分配存储单元,放入数据,函数结束时再一次释放存储单元。
(2)寄存器型register所在存储区域:CPU通用寄存器寄存器型变量的数量:通用寄存器在CPU中,数量很少。
通用寄存器在CPU中有很多特定的用途,所以寄存器型变量通常最多只允许2个,定义4字节或4字节以上的变量,通常不定义成寄存器型。
因此long,fioat,double,unsingedlong等其存储类型都不定义成寄存器型。
寄存器型变量过多的处理方式:如果在数据定义语句中的寄存器数量过多,所占用寄存器数量超过了所能提供寄存器的数目,编译系统将多余的寄存器变量改为自动型变量。
存储空间的存在:寄存器型变量只能在函数中定义,运行到数据语句,则为变量在CPU 通过寄存器中为其分配内存,退出函数将释放所占用寄存器。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,则以后要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数时,执行寄存器型变量数据定义语句,则系统为其在寄存器配存储单元,放入数据。
函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在寄存器分配存储单元,放入数据,函数结束时再一次释放存储单元。
(3)静态型static所在存储区域:存储类型是静态型的变量,存储在系统内存的数据区。
(完整版)变量的概念及基本性质练习题变量是编程中常见的概念之一,用于存储和表示各种不同类型的数据。
在这份文档中,我们将探讨变量的概念及其基本性质,并提供一些练题供练和巩固研究。
变量的概念变量是程序中用于存储和表示数据的一种方式。
通过给变量赋值,我们可以向计算机提供各种不同类型的数据,在程序执行过程中使用这些数据进行计算和处理。
每个变量都有一个名称和一个对应的值,可以通过名称来引用和操作变量的内容。
变量的基本性质1. 变量类型:变量可以是不同的类型,如整数(int)、浮点数(float)、字符串(string)等。
不同类型的变量在内存中占用的空间大小和存储方式也不同,因此在使用变量之前需要先确定其类型。
变量类型:变量可以是不同的类型,如整数(int)、浮点数(float)、字符串(string)等。
不同类型的变量在内存中占用的空间大小和存储方式也不同,因此在使用变量之前需要先确定其类型。
2. 变量命名规则:变量名称由字母、数字和下划线组成,但不能以数字开头。
变量名称应具有一定的描述性,以便于程序的可读性和维护性。
变量命名规则:变量名称由字母、数字和下划线组成,但不能以数字开头。
变量名称应具有一定的描述性,以便于程序的可读性和维护性。
3. 变量赋值:通过赋值语句(如`x = 5`),我们可以将一个具体的值赋给变量。
这样,变量就可以代表这个值,并在程序中使用。
变量赋值:通过赋值语句(如`x = 5`),我们可以将一个具体的值赋给变量。
这样,变量就可以代表这个值,并在程序中使用。
4. 变量的引用:可以通过变量的名称来引用和访问其值。
在程序中,我们可以使用变量进行各种操作,比如计算、打印等。
变量的引用:可以通过变量的名称来引用和访问其值。
在程序中,我们可以使用变量进行各种操作,比如计算、打印等。
5. 变量的作用域:变量的作用域指的是变量可以被访问的范围。
在不同的代码块中定义的变量具有不同的作用域,有些变量只能在特定的代码块中使用。
7.3 变量的存储类型7.3.1 静态存储方式和动态存储方式变量值在内存的存在的时间来分为静态存储方式和动态存储方式。
静态存储方式:在程序运行期间分配固定的存储空间;动态存储方式:在程序运行期间根据需要进行动态的分配存储空间。
用户使用的存储空间:由程序区、静态存储区和动态存储区三部分组成(如下图所示)。
数据分别存放在静态存储区和动态存储区中。
动态存储区主要存放函数的形式参数、自动变量和函数用时的现场保护和返回地址等。
在函数调用开始分配动态存储空间,函数结束时释放这些空间。
7.3.2 变量的存储类型变量属性:数据类型属性和存储类型属性。
变量的存储类型:auto(自动)型、static(静态)型、register(寄存器)型和extern(外部)型四种。
1.Auto(自动)变量auto变量只用于定义局部变量,存储在内存中动态存储区。
定义形式为:auto <数据类型> <变量名表>;局部变量存储类型缺省时为auto型。
例如:int f (int x) /*定义f函数,x为形参*/{auto int a, b; /*定义整型变量a、b为自动变量*/float y; /*定义y,缺省存储类型时为自动变量*/…}2.static(静态)变量static型可定义全局变量和局部变量。
static(静态)变量在静态存储区分配存储单元。
在程序运行行期间自始至终占用被分配的存储空间。
定义形式为:注意:⑴静态局部变量是在编译时赋初值的。
以后每次调用函数时不再重新赋初值而只引用上次函数调用结束时的值。
⑵静态局部变量时没有赋初值,编译时自动赋0或空字符(对字符变量)。
static <数据类型> <变量名表>;【例7.4】分析下列程序运行结果。
void main( ){void f( );f( );f( );f( );}void f( ){int x=0;x++;printf("%d\t",x);}运行结果为:1 1 1将程序中语句int x=0改为static int x=0;运行结果为:1 2 3 为什么?3.register(寄存器)变量register(寄存器)变量:存放在寄存器中的变量。
变量类型存储方法
1、整型类型(int)
整型类型是最基本的变量类型,一般用于存储整数,可以表示整数,
负数,零等值,它的存储方法是把正整数的最高位存储在最低地址处,其
他位依次向高地址存储,而负数则根据补码原理,将一个负数的补码存储,即正数的反码+1,负数的存储方式与正数的存储方式相反。
2、浮点型(float)
浮点型是一种双精度数据类型,包含整数位、小数位和指数位,在存
储时首先将符号位存储到最低位,对于正数,符号位为0;然后其后的8
位用来存储指数,最高位代表正负,如果为1则代表负,0代表正数,接
下来的7位代表指数数,最后剩下的位置用来存储小数位,指数位用来表
明小数位在指数位之前的位数,指数位越高,数值越大,即2^8-1=255时,指数位为7
3、字符型(char)
字符型是一种变量类型,用于表示字符、字符串等值,其中8位二进
制表示一个字符,通常用ASCII码表示字符,其具体存储方式是把每一个
字符的ASCII码存储到最低位,其他位依次向高位存储,以此表示一个完
整的字符。
4、布尔型(bool)
布尔类型变量的存储方式一般以unsigned int类型表示,其中,最
低位表示任意布尔类型结果的真假,如果真则为1,假则为0。
习题6 参考答案一、选择题6.1 C 分析:全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的函数访问所以C选项说法错误。
6.2 D 分析:auto变量又称为自动变量,函数定义变量时,如果没有指定存储类别,系统就认为所定义的变量具有自动类别,D选项正确。
static变量又称为静态变量,编译时为其分配的内存在静态存储区中。
register变量又称为寄存器变量,变量的值保留在CPU的寄存器中,而不是像一般变量那样占内存单元。
当定义一个函数时,若在函数返回值的类型前加上说明符extern时,称此函数为外部函数,外部函数在整个源程序中都有效。
6.3 A分析:auto用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。
这个关键字通常会被省略,因为所有的变量默认就是auto的。
register定义的变量告诉编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。
这一点是它与堆栈变量和堆变量的区别。
变量用static告知编译器,自己仅仅在变量的作用范围内可见。
这一点是它与全局变量的区别。
当static用来修饰全局变量时,它就改变了全局变量的作用域。
extern 限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。
extern 外部声明, 该变量在其他地方有被定义过。
6.4 C 分析:auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。
register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫"寄存器变量",只有局部自动变量和形式参数可以作为寄存器变量。
第七章变量的存储类别一、选择题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++;elsestatic 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答案: C2. 凡是函数中未指定存储类别的局部变量,其默认的存储类别是。
A) auto B) register C) extern D) static答案:A3. 以下不正确的说法是。
A)在不同的函数中可以使用名称相同的变量B)在函数内定义的变量只在本函数范围内有效C)形式参数是局部变量D)在函数内的复合语句中定义的变量在本函数范围内有效答案:D4. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是。
A) auto B) register C) extern D) static答案:D5.如果在一个函数中的复合语句中定义了一个变量,则以下说法正确的是。
A)在本函数范围内有效B)在本程序范围内有效C)只在复合语句中有效D)非法变量答案:C6. 下列变量定义错误的是。
A) int x,y;B) register static int a,b,c;C) auto int x,y;D) extern int A;答案:B7. 以下程序的正确运行结果是_____________。
#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答案:C8. 以下程序的正确运行结果是_____________。
#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);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变量和static变量的初值都是随机值答案:B10.下面程序的输出是。
#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答案:C11.有以下程序#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答案: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)register C)static D)extern答案:A15.下面程序运行后的输出结果是。
#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答案:D16. 以下程序:#include <stdio.h>void main( )int i=1,j=3;printf("%d,",i++);int i=0;i+=j*2;printf("%d,%d,", i ,j);printf("%d,%d\n", 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. 以下程序:#include <stdio.h>void fun (int *s)static int j=0;dos[j]+=s[j+1];while (++j<2);void main( )int k, 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)34756 B)23445 C)35745 D)12345答案:C)18. 以下程序的输出结果是。
#include <stdio.h>int a=1;int fun(int k)static int a=5;a+=k; printf("%d ",a);return(a);void main( )int b=3;printf("%d\n",fun(b+fun(a)));(A)6 9 9 (B)6 6 9 (C)6 15 15 (D)6 6 15答案:C19. 下列程序的输出结果为。
#include <stdio.h>int c=6;void test(int *x, int y)*x=3* (*x);y=*x+y;c=y%(*x);printf ("x=%d,y=%d,c=%d\n",*x,y,c);void main ( )int a=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=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 <stdio.h>int d=1;void fun (int p)int d=5;d+=p++;printf ("%d ",d);void main ( )int a=3;fun(a);d+=a++;printf ("%d\n",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.全局变量可以为其它函数所共用,它的有效范围为:从_【_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_】_。