题目
填空题(每空2分,共40分)请将每一个空的正确答案写在答题卡的[1]至[20]序号的横线上,答在试卷上不得 分。(1)栈的基本运算有三种:入栈、退栈和 [1] 。答案:[1]读栈顶[1]元素评析:栈的基本运算有三种:入栈、退栈和读栈项元素。入栈运算是指在栈项位置插入一个新元素。这个运算有两个基本操作:首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。退栈运算是指取出栈顶元素并赋给一个指定的变量。这个运算有两个基本操作:首先将栈顶元素(栈项指针指向的元素)赋给一个指定的变量,然后将栈项指针退一(即top减1)。读栈顶元素是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它的值赋给一个变量。(2)在面向对象方法中,信息隐蔽是通过对象的 [2] 性来实现的。答案:[2]封装评析:软件工程[2]的基本原则包括抽象、信息隐蔽、模块化[3]、局部化、确定性、一致性、完备性和可验证性。信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。(3)数据流的类型有 [3] 和事务型。答案:[3]变换型评析:典型的数据流类型有两种:变换型和事务型。变换型:是指信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。(4)数据库系统中实现各种数据管理功能的核心软件称为 [4] 。答案:[4]数据库管理系统或DBMS评析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织[4]、数据操纵、数据维护、控制及保护和数据服务[5]等。数据库管理系统是数据库系统的核心。(5)关系模型的数据操纵即是建立在关系上的数据操纵,一般有 [5] 、增加、删除 和修改四种操作。答案:[5]查询评析:关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除和修改四种操作。数据查询:用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。数据删除的基本单位是一个关系内的元组[6],它的功能是将指定关系内的指定元组删除。数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。数据修改是在一个关系中修改指定的元组和属性。(6)下列程序的输出结果是 [6] 。main()(int a=l,b=2;a=a+b;b=a-b;a=a-b;printf(”%d,%dn”,a,b);)答案:[6]2,1评析:本题中,执行a=a+b时,a=l,b=2,a=l+2=3;b=a-b时,a=3,b=2,b=3-2=1;a=a-b时,a=3,b=l,a=3.1=2;因此,本题的输出是2,1.(7)下列程序的输出结果是16.00,请填空;,main()(int a=9,b=2:float x= [7] ,y=1.1,z;z=a/2+b*x/y+l/2;printf(”%5.2tin”,z);)答案:[7]6.6评析:本题,已知结果z=16.00,即16.0=a/2+b*x/y+l/2,分别把a、b代入,得到16.0=9/2+2″x/1.1+1/2。因为a=9,a是整型,所以9/2的值在没有进行类型转换时,等于4,1/2同理,等于0。代入求一元一次方程,很容易就可以得出x=6.6。(8)用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间, 请填空。st=(chhr*) [8] ;答案:181 malloc(11)评析:malloc函数的格式是:void*(或char*)malloc(size),size表示应分配的存储区。此题要分配11字节的单元,把11代入即可。(9)下列程序段[7]的输出结果是 [9] 。main()(char b[]=”Hello,you”;b[5]=0;printf(”%sn”,b);)答案:[9]Hello评析:字符串中,数值0或符号‘O’表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。(10)下列程序段的输出结果是 [10] 。int n=’c’:switch(n++)(default:printf(”error”);break;case。a’:case’A。:caseIb’:tase’B’:printf(”good”);break;case’c’:case’C’:printf(”pass”);case’d’:case’D’:printf(”warn”);)答案:[10]passwarn评析:n++是在执行完其所在的语句后再加l,因此,在执行case的时候,n的值依然为‘c’,执行case‘c’后面的语句,先打印出“pass”;在执行完case‘c’后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是:passwarn。(11)以下程序通过函数指针p调用函数mn,请在填空栏内,写出定义变量p的语句。void fun(int‘x,int*y)( …… )main()( int a=lO,b=20;[11] :p=fun; p(&a,&b);……)答案:[11]void(*p)();评析:要定义p为指向函数的指针变量,需写成:void(*p)();注意+p两侧的括弧不可以省略,表示p先与*结合,是指针变量,再与后面的()结合,表示此指针变量指向函数,这个函数无返回值(同fun函数)。(12)以下程序的输出结果 [12] 。main()(int p[7]={ll,13,14,15,16,17,18);int i=0,J=0;while(1<7&&p[i]%2==1)j+=p[i++];printf(”%dn”J);}答案:[12]24评析:本题程序定义了一维数组p,有七个数组元素,整型变量i,.j初值分别为0,当while的条件表达式(i<7&&p[i]%2==1)的值为真时,执行语句j+=p[i++];,如:当i=0时,i<7为真,p[I]%2=11%2=1,表达式(p[i]%2:=1)的值为真,所以整个表达式(i<7&&p[i]%2==1)的值为真,执行j=j+p[i++]=0+11=11,i=l;依次类推可以得出答案24。(13)下列程序的输出结果是 [13] 。void fun(int *n)(while((*n)–);printf(”%d”,++(*n));)main()( int a=100;fun(&a);)答案:[13]0评析:在函数fun()中,while((*n)–)是先引用+n的值,再做(*n)–运算,所以循环结束时*n的值为O,再做(+n)–运算后,*n的值为-1;执行++(*n)后,*n的值是O。(14)以下程序的输出结果是 [14] 。main()(int arr[]={30,25,20,15,10,5),*p=arr;p++;printf(”%dn”,*(p+3));)答案:[14]10评析:整型指针最初被赋的值是数组art的头指针,即指向数组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为10。(15)以下程序运行后的输出结果是 [15] 。main()(char a[]=”Language”,b[]=”Programe”;char *p1,*p2;int k:pl=a,p2=b;for(k=0;k<=7;k++)if(*(pl+k)==*(p2+k))printf(”%c”,*(pl+k));)答案:[15]gae评析:本题定义了两个字符串数组a[],b[],字符型指针变量p1和p2,且分别指向字符串数组a和b,执行for循环,当if(*(pl+k)==*(p2+k))条件为真,执行输出*(pl+k)对应的字符。即当k=0时,*(pl+k)对应的字符串数组a.中的字符L,*(p2+k)对应的字符串数组b中的字符P,因此if(*(pl+k)==*(p2+k))条件为假,不执行printf语句,依次类推,将字符串数组a和b中对应位置上的字符一一比较,如果对应位置上的字符相同,则输出该字符。(16)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文 件中,请填空。#include ”stdio.H”FILE *fp;main()( char ch;if((fp=fopen( [16] ))==NULL)exit(0);while((ch=getchar())!=’@’)fputc(ch,fp);fclose(fp);)答案:[l6]“bi.Dat”, “w”或“bi.dat”,“w+”或“bi.dat”,“r+”评析:本题的考点是fopen()函数,此函数的格式是fopen(文件名,使用文件方式),题目的要求是将从键盘读入的文本写到文件中,因此选择的打开方式应该是“w”(只写)。或者是读写“r+”或“w+”。(17)以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填空。main()(int i,a[20],sum,count;sum=count= [17] ;for(i=0;i<20;i++)scanf(”%d”, [18] );for(i=0;i<20;i++){if(a[I]>0){ count++;sum+= [19] ;)}printf(”sum=%d,count=%dn”,sum,count);}答案:[17]0[18]&a[i][19]a[i]评析:本题要求从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。程序中首先要对存放正数个数的变量count及存放和值的变量sum初始化为0,所以第一空应填:0。接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第二空应填:&a[i]。最后通过sum+=a[i];语句累加正数a[i]的值到sum中,因此第三空应填:a[i]。(18)若变量n中的值为24,则pint函数共输出 [20] 行。void prnt(int n,int aa[])( int i;for(I=1;i<=n;i++){ printf(”%6d”,aa[I]);if(!(i%5,J)printf(“n”);)printf(”n”);}答案:[20]5评析:本题的关键在于if(!(i%5))printf(“n”);这句,即如果i可被5整除时,则换行。i值为24,可以被5整除4次,并余4,因此,prnt函数共输出5行,最后一行有4个
填空题(每空2分,共40分)
请将每一个空的正确答案写在答题卡的[1]至[20]序号的横线上,答在试卷上不得    分。
(1)栈的基本运算有三种:入栈、退栈和  [1]  。
答案:[1]读栈顶[1]元素
评析:栈的基本运算有三种:入栈、退栈和读栈项元素。
入栈运算是指在栈项位置插入一个新元素。这个运算有两个基本操作:首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。
退栈运算是指取出栈顶元素并赋给一个指定的变量。这个运算有两个基本操作:首先将栈顶元素(栈项指针指向的元素)赋给一个指定的变量,然后将栈项指针退一(即top减1)。
读栈顶元素是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它的值赋给一个变量。
(2)在面向对象方法中,信息隐蔽是通过对象的  [2]  性来实现的。
答案:[2]封装
评析:软件工程[2]的基本原则包括抽象、信息隐蔽、模块化[3]、局部化、确定性、一致性、完备性和可验证性。
信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
(3)数据流的类型有  [3]  和事务型。
答案:[3]变换型
评析:典型的数据流类型有两种:变换型和事务型。
变换型:是指信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。
(4)数据库系统中实现各种数据管理功能的核心软件称为  [4]  。
答案:[4]数据库管理系统或DBMS
评析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织[4]、数据操纵、数据维护、控制及保护和数据服务[5]等。数据库管理系统是数据库系统的核心。
(5)关系模型的数据操纵即是建立在关系上的数据操纵,一般有  [5]   、增加、删除    和修改四种操作。
答案:[5]查询
评析:关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除和修改四种操作。
数据查询:用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。
数据删除的基本单位是一个关系内的元组[6],它的功能是将指定关系内的指定元组删除。
数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。
数据修改是在一个关系中修改指定的元组和属性。
(6)下列程序的输出结果是  [6]  。
main()
{
int a=l,b=2;
a=a+b;b=a-b;a=a-b;
printf(”%d,%d\n”,a,b);
}
答案:[6]2,1
评析:本题中,执行a=a+b时,a=l,b=2,a=l+2=3;b=a-b时,a=3,b=2,b=3-2=1;a=a-b时,a=3,b=l,a=3.1=2;因此,本题的输出是2,1.
(7)下列程序的输出结果是16.00,请填空;,
main()
{
int a=9,b=2:
float x=  [7]  ,y=1.1,z;
z=a/2+b*x/y+l/2;
printf(”%5.2tin”,z);
}
答案:[7]6.6
评析:本题,已知结果z=16.00,即16.0=a/2+b*x/y+l/2,分别把a、b代入,得到16.0=9/2+2″x/1.1+1/2。
因为a=9,a是整型,所以9/2的值在没有进行类型转换时,等于4,1/2同理,等于0。代入求一元一次方程,很容易就可以得出x=6.6。
(8)用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,    请填空。
st=(chhr*)  [8]  ;
答案:181 malloc(11)
评析:malloc函数的格式是:void*(或char*)malloc(size),size表示应分配的存储区。此题要分配11字节的单元,把11代入即可。
(9)下列程序段[7]的输出结果是  [9]  。
main()
{char b[]=”Hello,you”;
b[5]=0;
printf(”%s\n”,b);
}
答案:[9]Hello
评析:字符串中,数值0或符号‘\O’表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。
(10)下列程序段的输出结果是  [10]  。
int  n=’c’:
switch(n++)
{default:printf(”error”);break;
case。a’:
case’A。:
caseIb’:
tase’B’:printf(”good”);break;
case’c’:case’C’:printf(”pass”);
case’d’:case’D’:printf(”warn”);
}
答案:[10]passwarn
评析:n++是在执行完其所在的语句后再加l,因此,在执行case的时候,n的值依然为‘c’,执行case‘c’后面的语句,先打印出“pass”;在执行完case‘c’后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是:passwarn。
(11)以下程序通过函数指针p调用函数mn,请在填空栏内,写出定义变量p的语句。
void fun(int‘x,int*y)
{  ……  }
main()
{ int a=lO,b=20;
[11]  :
p=fun;  p(&a,&b);
……
}
答案:[11]void(*p)();
评析:要定义p为指向函数的指针变量,需写成:void(*p)();注意+p两侧的括弧不可以省略,表示p先与*结合,是指针变量,再与后面的()结合,表示此指针变量指向函数,这个函数无返回值(同fun函数)。
(12)以下程序的输出结果  [12]  。
main()
{
int p[7]={ll,13,14,15,16,17,18};
int i=0,J=0;
while(1<7&&p[i]%2==1)j+=p[i++];
printf(”%d\n”J);
}
答案:[12]24
评析:本题程序定义了一维数组p,有七个数组元素,整型变量i,.j初值分别为0,当while的条件表达式(i<7&&p[i]%2==1)的值为真时,执行语句j+=p[i++];,如:当i=0时,i<7为真,p[I]%2=11%2=1,表达式(p[i]%2:=1)的值为真,所以整个表达式(i<7&&p[i]%2==1)的值为真,执行j=j+p[i++]=0+11=11,i=l;依次类推可以得出答案24。
(13)下列程序的输出结果是  [13]   。
void fun(int *n)
{
while((*n)–);
printf(”%d”,++(*n));
}
main()
{  int  a=100;
fun(&a);
}
答案:[13]0
评析:在函数fun()中,while((*n)–)是先引用+n的值,再做(*n)–运算,所以循环结束时*n的值为O,再做(+n)–运算后,*n的值为-1;执行++(*n)后,*n的值是O。
(14)以下程序的输出结果是  [14]  。
main()
{
int arr[]={30,25,20,15,10,5},*p=arr;
p++;
printf(”%d\n”,*(p+3));
)
答案:[14]10
评析:整型指针最初被赋的值是数组art的头指针,即指向数组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为10。
(15)以下程序运行后的输出结果是  [15]  。
main()
{
char a[]=”Language”,b[]=”Programe”;
char *p1,*p2;
int k:
pl=a,p2=b;
for(k=0;k<=7;k++)
if(*(pl+k)==*(p2+k))printf(”%c”,*(pl+k));
}
答案:[15]gae
评析:本题定义了两个字符串数组a[],b[],字符型指针变量p1和p2,且分别指向字符串数组a和b,执行for循环,当if(*(pl+k)==*(p2+k))条件为真,执行输出*(pl+k)对应的字符。即当k=0时,*(pl+k)对应的字符串数组a.中的字符L,*(p2+k)对应的字符串数组b中的字符P,因此if(*(pl+k)==*(p2+k))条件为假,不执行printf语句,依次类推,将字符串数组a和b中对应位置上的字符一一比较,如果对应位置上的字符相同,则输出该字符。
(16)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文    件中,请填空。
#include  ”stdio.H”
FILE  *fp;
main()
{   char ch;
if((fp=fopen(  [16]  ))==NULL)exit(0);
while((ch=getchar())!=’@’)fputc(ch,fp);
fclose(fp);
}
答案:[l6]“bi.Dat”, “w”或“bi.dat”,“w+”或“bi.dat”,“r+”
评析:本题的考点是fopen()函数,此函数的格式是fopen(文件名,使用文件方式),题目的要求是将从键盘读入的文本写到文件中,因此选择的打开方式应该是“w”(只写)。或者是读写“r+”或“w+”。
(17)以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填空。
main()
{
int i,a[20],sum,count;
sum=count=  [17]  ;
for(i=0;i<20;i++)scanf(”%d”,  [18]   );
for(i=0;i<20;i++)
{
if(a[I]>0)
{ count++;
sum+=   [19]  ;
}
}
printf(”sum=%d,count=%d\n”,sum,count);
}
答案:[17]0
[18]&a[i]
[19]a[i]
评析:本题要求从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。程序中首先要对存放正数个数的变量count及存放和值的变量sum初始化为0,所以第一空应填:0。接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第二空应填:&a[i]。最后通过sum+=a[i];语句累加正数a[i]的值到sum中,因此第三空应填:a[i]。
(18)若变量n中的值为24,则pint函数共输出  [20]  行。
void prnt(int n,int aa[])
{  int i;
for(I=1;i<=n;i++)
{   printf(”%6d”,aa[I]);
if(!(i%5,J)printf(“\n”);
}
printf(”\n”);
}
答案:[20]5
评析:本题的关键在于if(!(i%5))printf(“\n”);这句,即如果i可被5整除时,则换行。i值为24,可以被5整除4次,并余4,因此,prnt函数共输出5行,最后一行有4个
题目解答
答案
请将每一个空的正确答案写在答题卡的[1]至[20]序号的横线上,答在试卷上不得    分。
(1)算法的复杂度主要包括时间复杂度和  [1]  复杂度。
答案:[1]空间
评析:习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。
(2)数据的物理结构在计算机存储空间中的存放形式称为数据的  [2]  。
答案:[2]内模式[8]或物理模式或存储模式
评析:一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据库内部的表示方法。例如,记录的存储方式是顺序存储[9]、索引按照什么方式组织;数据是否压缩存储,是否加密等。
(3)若按功能划分,软件测试的方法通常分为  [3]  测试方法和黑盒测试方法。
答案:[3]白盒
评析:软件测试的方法有三种:动态测试[10]、静态测试[11]和正确性证明[12]。设计测试实例的方法一般有两类:黑盒测试方法和自盒测试方法。
(4)数据库三级模式体系结构的划分,有利于保持数据库的  [4]  。
答案:[4]数据独立性
评析:数据库的三级模式体系结构把数据的组织管理工作进行了划分,把数据的具体组织留给DBMS管理,使用户能逻辑地[13]、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式,保证了数据的独立性。
(5)在关系运算中,查找满足一定条件的元组的运算称之为  [5]  。
答案:[5]选择
评析:在关系数据库中,选择运算也是一个元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由R中的那些满足逻辑条件的元组所组成。
(6)在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为4;一个double型数据在内存中所占的字节数为  [6]  。
答案:[6]8
评析:在一般16位PC机中,一个float型数据在内存中占4个字节(32位),一个double型数据占8个字节。
(7)设有以下变量定义,并已赋确定的值,
char w;int x;float y;double z;
则表达式:w*x+z-y所求得的数据类型[14]为  [7]  。
答案:[7]double型或双精度[15]型
评析:①先进行W*X的运算,先将字符型w转换成整型,运算结果为整型;②再将W*X的结果与z相加,要先将第一步的整型转换为double型,运算结果为double型;③最后将W*X+Z的结果与y相减,要先将float型y转换成double型,结果为double型。
(8)若运行时给变量x输入12,则以下程序的运行结果是  [8]  ;
main(){
int,y;
scanf(””%d””,&X);
y=x>12?x+lO:x-12;
printf(“”%d\n”",y);
}
答案:[8]0
评析:三目运算符的形式为(表达式1)7(表达式2):(表达式3)。当(表达式1)值为真时,返回(表达式2)的值;为假时,返回(表达式3)的值。题中因为x>t2为假,所以结果为x-12,即为0。
(9)四条语句:x++;、++x;、x=x+l;、x=l+x;,执行后都使变量x中的值增l,请写出一条同一功能的赋值语句[16](不得与列举的相同)  [9]  。
答案:[9]x+=1:
评析:题面中的四条语句的作用是使x的值加1,在c中有多种方法可以对变量进行加1操作,这里可以利用C的复合赋值运算符+=实现,本题答案为x+=1:。
(10)设有以下定义和语句,则*(*(p+2)+1)的值为  [10]  。
int[3][2]={10,20,30,40,50,60},(*p)[2];
p=a;
答案:[10]60
评析:本题定义了一个3行2列的二维数组a,并定义了一个指向两个元素的一维数组指针p,让p指向二维数组a的首行。*(*(p+2)+1)是引用a[2][1],其值是60。
(11)若要使指针p指向一个double类型的动态存储单元[17],请填空。
p=  [11]  malloc(sizeof(double));
答案:[11](double*)
评析:函数malloc返回的是void*,所以若要使指针指向一个double类型,则必须进行类型转换,类型转换格式为:(数据类型*)。
(12)下面程序的功能:输出100以内能被3整除且个位数为6的所有整数,请补充完整。
main().
{  int ij;
for(i=O;  [12]  ;i++)
{ j=I*10+6;
if(  [13]  )continue;
printf(“%d”,j);
}
}
答案:[12]i
[13]j%3!=0
评析:本题要求输出100以内能被3整除且个位数为6的所有整数,程序中j=i*10+6;语句是求个位数为6的整数,由此可得出程序的循环次数为i
(13)函数mycmp(char*s,char。t)的功能是比较字符串s和t的大小,当s等于t时返回0,
当s>t返回正值,当s
mycmp(char*s,char*t)
{  while(*s==*t)
{  if(*s==’\0’)return 0;
++s;++t;
}
return(  [14]  );
}
答案:[14]*s-*t或-*t+*s
评析:函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化来改变指针所指向的字符,要改变s和t所指不同字符的ASCII码的差值,必须使用“*s-*t”得出。
(14)以下程序运行后的输出结果是  [15]  。
void fun(、)
{
static int a=0:
a+=2;printf(”%d”,a);
}
main()
{  int cc;
for(CC=1;cc<4;cc++)fun();
printf(”\n”);
}
答案:[15]2 4 6
评析:static声明的外部变量只限于被本文件引用,而不能被其他文件引用。用static来声明一个变量的作用有:①对局部变量[18]用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域[19]只限于本文件模块(即被声明的文件中)。
(15)下列程序的运行结果是  [16]  。
main()
{  union EXAMPLE
{ struct
{int x;int y;}in;
int a;
int b:
}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf(”%d,%d\n”,e.in.x,e.in.y);
}
答案:[16]4,8
评析:c语言规定,共用体中各个成员变量在内存中占用同一段内存单元,即e.in.x和e.a、e.b占用同一段内存单元,由于e.in.x和e.a、e.b占用的是同一段内存单元,所以程序最后的打印结果为“4,8”。

(16)在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数    是  [17]  函数。
答案:[17][NNlrewind或fseek
评析:在对文件进行操作的过程中,若要求文件的位置回到文件的开头,可以调用rewind或fseek函数。其中rewind函数的作用是将位置指针重新返回文件的开头,而fseek函数可以实现文件指针的定位。
(17)以下函数用于求出一个2×4矩阵中的最大元素值。
max_value(arr)
int arr[][4];
{
int I,J,max;
max=alT[0][0];
for(i=0;i<2;i++)
for(j=0;  [18]  ;J++)
if(  [19]  >max)max=[2Q];
return(max);
}
答案:[18]j<4
[19]arr[i][j]
[20]arr[i][j]
评析:2*4矩阵实际上就是一个二维数组,结合本题应为arr[2][4],所以在第一个循环中应当填写“4”;第二个横线处是要判断当前的数组元素值是否大于max,所以应填写arr[i][j];第三个横线处是要将当前大于max的数组元素的值赋给变量max,所以应当填写“arr[i][il”。