变量的存储类别题库共25页word资料
C语言变量存储类型
1.存储类型和数据类型。
存储类型是针对变量而言的,它规定了变量的存储位置,从而也确认了其作用域和生存期;数据类型也可以针对变量,它规定了变量所占内存空间的大小。
2.C中只有两种存储类型:自动类和静态类。
全局变量只能是静态类,而局部变量可以任意。
3.说明变量存储类型的格式:<存储类型> <数据类型> <变量名表>;(存储/数据类型可以交换次序),与存储类别有关的说明符:auto(自动),static(静态),register(寄存器),extern (外部)。
4.计算机内存分三部分:动态存储区(堆栈)、静态存储区、程序代码区。
动态存储区用来保存函数调用时的返回地址、自动类别的局部变量等;静态存储区用以存放全局变量及静态类别的局部变量;程序代码区存放各类代码。
5.C++中,可以用static说明"静态函数",其不允许嵌套定义,也不允许外部编译单元中的函数对它进行调用。
******************************************************************************/ #include<stdio.h>/******************************************************************************1.对于全局变量可以使用extern和static两种说明符。
2.全局变量的定义只能出现一次,在定义全局变量时,不可使用extern说明符。
3.全局变量的说明(使用extern)可多次出现在需要的地方,说明的作用是扩展该全局变量的作用域,可以对同一变量进行多次extern声明。
4.全局变量的生存期是整个程序的运行时间。
5.全局变量可以进行不同函数之间的传值。
******************************************************************************/ int i=10; //注意:extern int i=10;是一个具体变量的定义,不是外部变量的声明int main(){/****************************************************************************** 1.static局部变量只有在第一次执行时才进行初始化,若定义时没有指定初值,编译器自动为其赋0。
变量的储存类型
(1)自动型(堆栈型)auto内部变量省略存储类型符:内部变量是指在函数内部定义的变量。
在函数或复合语句中定义变量时省略存储符,系统默认所定义变量的存储类型是自动型。
自动型所在存储区域:存储类型是自动型的变量,存储在系统内存的堆栈区。
栈区分配存储区域,函数调用结束时,C语言就释放变量,节省内存空间。
释放变量:从内存堆栈区中收回分配给变量的存储空间。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,还要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数是,执行自动型变量数据定义语句,则系统为其在内存堆栈区分配存储菜单元,放入数据,函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在内存堆栈区分配存储单元,放入数据,函数结束时再一次释放存储单元。
(2)寄存器型register所在存储区域:CPU通用寄存器寄存器型变量的数量:通用寄存器在CPU中,数量很少。
通用寄存器在CPU中有很多特定的用途,所以寄存器型变量通常最多只允许2个,定义4字节或4字节以上的变量,通常不定义成寄存器型。
因此long,fioat,double,unsingedlong等其存储类型都不定义成寄存器型。
寄存器型变量过多的处理方式:如果在数据定义语句中的寄存器数量过多,所占用寄存器数量超过了所能提供寄存器的数目,编译系统将多余的寄存器变量改为自动型变量。
存储空间的存在:寄存器型变量只能在函数中定义,运行到数据语句,则为变量在CPU 通过寄存器中为其分配内存,退出函数将释放所占用寄存器。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,则以后要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数时,执行寄存器型变量数据定义语句,则系统为其在寄存器配存储单元,放入数据。
函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在寄存器分配存储单元,放入数据,函数结束时再一次释放存储单元。
(3)静态型static所在存储区域:存储类型是静态型的变量,存储在系统内存的数据区。
变量的存储类型
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(寄存器)变量:存放在寄存器中的变量。
(整理)第04章 变量的存储类型
第4章变量的存储类型4.1 概述C语言中的变量具有两种属性:根据变量所持有数据的性质不同而分为各种数据类型;根据变量的存储方式不同而分为各种存储类型.变量的数据类型决定了该变量所占内存单元的大小及形式;变量的存储类型规定了该变量所在的存储区域,因而规定了该变量作用时间的长短,即寿命的长短,这种性质又称为"存在性".变量在程序中说明的位置决定了该变量的作用域,即在什么范围内可以引用该变量,"可引用"又称为"可见",所以这种性质又称为"可见性".计算机的内存和CPU中的寄存器都可以存放数据,变量究竟存放在何处则由存储类来决定.存储类型用来说明变量的作用域,生存期,可见性和存储方式.下面解释几个概念:1 作用域:是该变量在其上有定义的程序部分,通俗的说,即该变量起作用的某个程序区域。
2 变量的生存期:是指它从产生到消亡的存在时间,即变量从定义开始到它所占有的存储空间被系统收回为止的这段时间。
3 变量的可见性的含义:在某个程序区域,可以对变量进行访问(或称存取)操作,我们则称该变量在该区域为可见的,否则为不可见的。
再引入几个概念:4 全局变量和局部变量在一个函数内部或复合语句内部定义的变量叫内部变量,又称为"局部变量"。
在函数外定义的变量称为外部变量,又称为"全局变量"。
如:int x ;void main( ){int a, b;float c;……..}x 定义在函数外,是全局int 型变量a,b定义在main()函数内是局部int 型变量c 定义在main()函数内是局部float 型变量6 动态存储变量和静态存储变量。
在程序运行期间,所有的变量均需占有内存,有的是临时占用内存,有的是整个程序运行过程中从头到尾占用内存。
对于在程序运行期间根据需要进行临时性动态分配存储空间的变量称为"动态存储变量",对于在程序运行期间永久性占用内存的变量称为"静态存储变量".一个正在运行的程序可将其使用内存的情况分为如下三类(如下图):程序代码区: 程序的指令代码存放在程序代码区。
第6章 变量的存储类别和作用域
释放内存空间函数free
调用形式: free(void *ptr);
功能:释放ptr所指向的一块内存空间,ptr是一个任意类型 的指针变量,它指向被释放区域的首地址。被释放区应是由 malloc或calloc函数所分配的区域。
【例1】内存的分配与释放。
#include <stdio.h>
#include <malloc.h>
C语言规定,函数内凡未加存储类型说明的变量均视为自动 变量,也就是说自动变量可省去说明符auto。例如:
{
{
int i,j,k; char c;
等价于
auto int i,j,k; auto char c;
……
……
}
}
静态变量
• 静态变量的存储类别说明符是static。 • 静态变量属于静态存储方式,但是属于静态存储方式的量
变量的存储类别
在C语言中,变量的存储类别有3种:
• auto(自动变量)
——动态存储方式
• static(静态变量)
——静态存储方式
• register(寄存器变量) ——动态存储方式
变量说明的完整形式为
存储类别说明符 数据类型说明符 变量名,变量名…;
例如:static int a,b;
1.自动变量
返回值为该内存空间的首地址,把该地址赋予指针变量p。
分配内存空间函数 calloc
调用形式: (类型说明符*)calloc(n,size)
功能:在内存动态存储区中分配n块长度为“size”字节的 连续区域。函数的返回值为该区域的首地址。 calloc函数与malloc 函数的区别仅在于一次可以分配n块 区域。
是从定义变量的位置开始到该文件结束。
第6章 变量的存储类型和作用域(习题答案及解析)
习题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中的寄存器中,这种变量叫"寄存器变量",只有局部自动变量和形式参数可以作为寄存器变量。
变量的作用域和存储类别
8.3.2 外部函数 定义:定义一个函数时,在函数返回值的类型前加上 说明符“extern”,外部函数在整个源程序中都有效。 定义外部函数的一般形式: extern 返回值的类型 函数名(形式参数列表) 说明:因为函数的本质是外部的,extern说明符可以 省略,若在函数定义中没有说明extern或static则默认 为extern。外部函数可被其他编译单位中的函数调用。 例如:extern int f(int a,int b){ } 习题 填空题P135 1.
8.3 函数的存储分类 8.3.1 内部函数 定义:在一个源文件中定义的函数只能被文件中的函 数调用,而不能被同一源程序其他文件中的函数调用。 定义内部函数的一般形式: static 返回值的类型 函数名(形式参数列表) 说明:内部函数也称为静态函数,但此处静态static不 是存储方式,而是对函数的调用范围只限于本文件。 例如:static int f(int a,int b){ } 作用:函数f只能在本文件中调用,而不能在别的源文 件中调用。
第8章 变量的作用域和存储类别
本章重点 8.1 变量的作用域 8.2 变量的存储类别 8.3 函数的存储分类
8.1 变量的作用域
变量定义:指给变量分配确定的存储单元。 变量说明:说明变量的性质,而不分配存储单元。 变量作用域:变量在程序中可以被使用的有效范围。 8.1.1 局部变量 定义:指在一个函数内部或复合语句内部定义的变量。 int func1(int a) /*本函数中变量a,b,c有效*/ { int b,c; ……} 注意:形式参数与实际参数范围不同,形式参数变 量是属于被调函数的局部变量,实际参数变量是 属于主调函数的局部变量。
8.2 变量的存储类别
变量的两种属性:数据类型和数据的存储类别。 存储类别:指数据的存储位置与生存期,而变量在 内存中占据存储空间的时间称为变量的生存期。 变量存储方式可分为静态存储方式和动态存储方式。 静态存储方式:程序运行期间分配固定的存储空间。 动态存储方式:程序运行期间根据需要动态分配存 储空间。 有4个说明符与这两种存储方式相关:auto(自动的)、 static (静态的) 、 register (寄存器的) 和extern (外 部的) 。
第4章 变量的存储类型(2015)
第4 章 变量的存储类型
第4章 变量的存储类型
C 语 言 程 序 设 计 设 计
• • • •
变量的内存本质 自动型变量[auto] 寄存器型变量[register] 外部参照型变量[extern]
• 静态型变量[static]
第4章 变量的存储类型
1. 变量的本质
C 语 言 程 序 设 计 设 计
C 语 言 程 序 设 计 设 计
变量定义的一般形式为: <存储类型> 数据类型 变量名表; 存储类型包括: auto register extern static
自动型 寄存器型 外部参照型 静态型
第4章 变量的存储类型
C 语 言 程 序 设 计 设 计
数据类型
变量的数据性质决定了该变量所占内存单元的大小及形式。
void main( )
{ int i; for(i=0; i<3; i++) { printf("%d\t", f()); }
}
运行结果为: 7 8 9
示例: 外部静态变量和外部变量的区别(EX05)
/* file1.c */
要访问另一个文件中定义的跨文件作用域的全局变量,必须进行 extern说明。
作用域及寿命
全局存在,全局可见 .
第4章 变量的存储类型
示例:
C 语 言 程 序 设 计 设 计
/*file1.c*/ etern int x ; void main( ) { x++; }
/*file2.c*/ etern int x ; void fun1( ) { x+=3; }
void main( ) { unsigned int i; printf(“\a调用delay1( ) 第一次延时\n"); for ( i=0 ; i<60000 ; i++) { delay1(); } printf(“\a第1次延时结束!\n 调用第 2 次延时!\n" ); for ( i=0 ; i<60000 ; i++) { delay2(); } printf("\a第2次延时结束!\n");
C语言程序设计 变量的存储类别
执行调用函数 fun1 中每次都执行了把值 1 赋于分配给变量 f 的存储空间的指令,产生了
以上的第一行显示输出结果。
(2) 函数 fun2 中的变量 f 在定义时使用了关键字 static 指定的存储类别,它被编译
程序理解为是长生命期的局部变量,在程序编译、连接时为它在静态存储区分配存储空间,
并将该变量初始化为 1。而在程序执行时,执行到主函数中第二个 for 语句要三次调用函数 fun2 ,在每次进入函数 fun2 时,也是系统在动态存储区给形参 x 分配临时的存储空间, 并执行指令把实参传递给形参 x,在每次退出函数 fun2 时系统只收回分配给形参 x 存储 空间。而函数 fun2 中的局部变量 f 是用存储类别 static 指明的局部变量,它的存储空 间是在程序编译、连接时分配在静态存储区并对完成初始化(有些编译器是在第一次执行该 定义语句时进行内存分配),在三次执行调用函数 fun2 中使用变量名 f 访问的都是在程 序编译、连接时分配在静态存储区的同一个存储空间,并且在整个程序的执行期间,该存储 空间不会被作其它用途,再次进入函数 fun2 时该存储空间的内容就是上次退出该函数时的 内容,故产生了以上的第二行显示输出结果。
(1) 自动变量 用关键字“auto”作存储类型说明的是自动变量,自动变量在动态存储区内分配空间。 “auto”也可以省略,前面的很多例题中凡未加“auto” 说明的变量,又无其它存储形式 说明的,均属动态存储。如在某函数中有定义: int a; auto float b; 则 a,b 都是自动变量。对于定义在函数中的某个变量,虽然该函数在程序执行中被多 次调用,但每次调用后该变量的内容不需要保留给以后再次调用该函数时使用,这个变量就 应该被定义成自动变量。自动变量是短生命期的局部变量,安排在动态存储区,由系统自动 分配和释放,用到时分配内存,不用时释放内存,以节省程序执行时的内存资源。 (2) 局部静态变量 用关键字 static 加以说明的局部变量为局部静态变量。局部静态变量在静态存储区分 配空间。 定义在函数中的某个变量,若该函数在程序执行中被多次调用,并且调用后该变量的内 容需要保留给以后再次调用该函数时使用的,这个变量就应该被定义为局部静态变量。局部 静态变量是长生命期的局部变量。尽管该函数执行结束,但变量的内容需要保留,也就是分 配给该变量的存储区的内容需要保留,这个存储区不能被作它用。因此,局部静态变量只能 安排在静态存储区。 (3) 寄存器变量 用关键字 register 说明的局部变量为寄存器变量。寄存器变量的值存放在 CPU 的寄存 器中。这样,可以提高程序的执行效率。寄存器数目有限,不能任意定义,有的小型机准许 使用 3 个寄存器来容纳寄存器变量。 【例 7-4】局部变量存储方式举例,分析下面程序运行结果:
变量的存储类别题库-25页word资料
第七章变量的存储类别一、选择题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. 以下程序的正确运行结果是_____________。
C语言-变量的存储类型
运行结果: main:a=3,b=4 sub:a=6,b=7 main:a=3,b=4
7.3 全局变量—外部变量
定义:在函数外定义,可为本文件所有函数共用。
有效范围:从定义变量的位置开始到本源文件结束, 及有extern声明的其它源文件。
▪ 外部变量声明: extern 数据类型 变量表; ▪ 外部变量定义与外部变量声明不同 ▪ 若外部变量与局部变量同名,则外部变量被屏蔽
第7章 变量的存储类型
main()
{
int a;
a=10;
2000
printf(“%d”,a);
}
程序中使用变量名对内存操作
内存
10
变量是对程序中数据的存储空间的抽象
…….
•变量的属性
数据类型:变量所持有的数据的性质(操作属性) 存储属性:
存储器类型:寄存器、静态存储区、动态存储区 生存期:变量在某一时刻存在——静态变量与动 态变量 作用域:变量在某区域内有效——局部变量与全 局变量
int a=3,b=5; max(int a, int b) {
int c; c=a>b?a:b; return(c); } main() { int a=8; printf("max=%d",max(a,b)); }
extern int a,b; int max() 外部变量声明 {
int z; z=a>b?a:b; return(z); } main() { printf("max=%d",max()); } int a=13,b=-8;
局部变量和全局变量。
7.1.3 变量的存储类型ຫໍສະໝຸດ 程序区静态存储区 动态存储区
全局变量、局部静态变量
变量的存储
第一题、单项选择题(每题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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章变量的存储类别一、选择题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_】_。