全国二级C全真模拟.docx
《全国二级C全真模拟.docx》由会员分享,可在线阅读,更多相关《全国二级C全真模拟.docx(39页珍藏版)》请在冰点文库上搜索。
全国二级C全真模拟
(1)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:
前序遍历、【1】遍历和后序遍历。
答案:
【1】中序
评析:
在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:
前序遍历、中序遍历和后序遍历。
前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然先遍历右子树,然后访问根结点,最后遍历左子树。
(2)结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、【2】和限制使用goto语句。
答案:
【2】模块化
评析:
结构化程序设计方法的主要原则可以概括为自项向下、逐步求精、模块化和限制使用goto语句。
自顶向下:
程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。
不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
逐步求精:
对复杂问题,应设计一些子目标作过度,逐步细化。
模块化:
一个复杂问题,肯定是由若干稍简单的问题构成。
模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。
限制使用goto语句。
(3)软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【3】的设计来实现。
答案:
【3】测试实例
评析:
进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。
(4)数据库系统的三级模式分别为【4】模式、内部级模式与外部级模式。
答案:
【4】概念或概念级
评析:
数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级模式和外部级模式。
概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,.它还未深入到设备级上(如磁盘及磁盘操作)。
外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导面出。
(5)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、【5】和处理过程。
答案:
【5】数据存储
评析:
数据字典是各类数据描述的集合,它通常包括5个部分,即数据项,是数据的最小单位;数据结构,是若干数据项有意义的集合;数据流,可以是数据项,也可以是数据结构,表示(更多考试资讯尽在
(6)下面程序的输出是【6】。
main()
{intarr[10],i,k=O:
for(i=0;i<10;i++)
arr[i]=i;
for(I=1;i<4;i++)
k+=arr[I]+i;
printf("%d\n",k);}
答案:
【6】12
评析:
本题通过第一个for循环将数组arr[O]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:
i=l:
k=0+arr[1]+l即k=2:
i=2:
k=2+arr[2]+2即k=6:
i=3:
k=6+arr[3]+3即k=12;
(7)若a=10,b=20,则表达式!
(a
答案:
【7】0
评析:
已知a=10,b=20,所以逻辑表达式a
,表示反操作,所以整个语句的值应当为false,即为0。
(8)有以下程序:
intfa(intx){returnx*x;}
intfb(intx){returnx*x*x;}
intf(int(*f1)(),int(*f2)(),intx)
{returnf2(X)-n(x);}
main()
{inti;i=f(fa,fb,2);printf("%d\n",i);}
程序运行后,输出结果是【8】。
答案:
【8】4
评析:
在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。
在f中执行r2(x)-f1(x),实际上是执行了fb
(2).fa
(2),故执行i=(fa,fb,2)后i的值为2^3-2^2=4。
(9)下面程序的输出是【9】。
main()
{enumem{eml=3,em2=1,em3};
char*aa[]={"AA","BB","CC","DD"};
primf("%s%s%s\n",aa[eml],aa[em2],aa[em3]);
}
答案:
【9】DDBBCC
评析:
c语言对枚举的定义规定:
在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。
在本题中,没有明确说明枚举元素em3的值,则em3=em2+l=1+l=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为"DDBBCC"。
(10)若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【10】。
intb,c;floata;
scanf("%£%d,c=%d",&a,&b,&c)
答案:
【10】5.0,4,c=3
(1)下面的if语句与y=(x>=10)?
3*x-11:
(x<1)?
x:
2'x.1;的功能相同,请补充完整。
If( 【1】 )
if( 【2】 )y=2*x-1;
elsey=x;
elsey=3*x-11:
答案:
【1】x<10
【2】x>=1
评析:
条件表达式的一般形式为:
表达式l?
表达式2:
表达式3
条件运算符的执行顺序:
先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为O(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
y。
(x>。
10)?
3。
x-11:
(x>=1)?
x:
2*x-1;的功能是先求(x>=1)?
x:
2*x-1:
的值,所的的结果再与前面的语句构成条件表达式进行求值。
所以【1】应该填x<10,【2】应该填x>=1。
(2)以下程序中用户由键盘输入一个文件名,然后输入一串字符(用拌结束输入)存放到此
文件中,形成文本文件,并将字符的个数写到文件的尾部。
请填空。
#include
main()
{ FILE *fp;
char ch,fname[32];imcount=0;
printf("Inputthefilename:
");
scanf("%s",fname);
if((币=fopen( 【3】 ,"w+"))==NULL)
{ print印Can'topenfile:
%s\n",fname};exit(0);}
printf("Enterdata:
in");
while((ch=getchar())!
_1≠)')
{ fputc(ch,fp);count++;}
fprintf( 【4】,"\n%d\n",count);
fclose(fp);
}
答案:
【3】fname
【4】fp
评析:
fopen()函数实现打开文件的功能,通常的调用方式为:
FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一个横线处要求填写要打开文件的名字fname。
fprintf()函数的一般调用方式为:
fprintf(文件指针,格式字符串,输出表列),所以第二个横线处应填写fb。
(3)函数voidfun(noat*sn,intn)的功能是:
根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。
请补全程序。
S=I-1/3+1/5-1/7+...+1/(2n+1)
voidfun(float*sn,intn)
{ floats=O.O,w,f=-1.0;
inti=0:
for(I=0;i<=n;i+(更多考试资讯尽在
{f= 【5】 *f;
w=f/(2*i+1);
S+=W:
}
【6】 =s;
}
答案:
【5】-1或-1.0
【6】*sn
评析:
由于在对s求和时,相诹较畹姆鸥蘸孟喾矗诤齠un中没有对数据进行取反的操作,故第一空的目的是对数据进行取反,以保证序列中相邻两项的符号不同。
故第一个应填-1或-1.0。
在执行完循环体后,要将求和结果通过指针参数的形式传递给调用fun的函数,故第二空应填*sn。
(4)下面的函数strcat(strl,str2)实现将字符串str2拼接到字符串strl后面的功能。
请填空使之完整。
Char*strcat(strl,str2)
char*strl.*str2;
{ char*t=strl;
while( 【7】 )strl++;
while( 【8】 );
return(t);}
答案:
【7】*strl或*str1!
='\0'或*str1!
=0或*strl!
=NULL
【8】*strl++=*str2++或*strl++=*str2,*str2++
评析:
函数strcat(strl,str2)实现将字符串str2连接到字符串strl后面,所以首先要找到字符串strl的串尾,根据c语言的语法规定,一个串的串尾一定是一个隐含字符"\0",而在程序中,对字符串中字符的访问是通过两/卜指针变量来完成的,因此要找到字符串strl的串尾,要判断*strl是否为"\0",要找到字符串str2的串尾,要判断*str2是否为"\0",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写"*str1"和"*strl++=*str2++"。
(5)以下函数fun用于求两个整数a和b的最大公约数。
fun(a'b)
inta'b;
{intI,J,m,n;
if(a>b)
{m=a;a=b; 【9】 ;}
i=a.j=b;
while((n= 【10】 )!
=O)
{j=i;i= 【11】 ;}
retum(i);
}
答案:
【9】b=m
【10】j%i
【11】n
评析:
函数中的变量i和j分别存放两个形参的最小数和最大数,在语句i=a和i=b执行之前,要将a和b分别变为最小数和最大数,当a>b时,程序使用中间变量将两者交换,所以题中第一个空中应当填写"b=m";为求两个整数的最大公约数,程序的where循环条件必须为j整除i成立,所以题_中第二个空中应当填写"j%i";程序要通过i的值返回最大公约数,因此在循环中要将每次整除的公约数赋给i,以保证最后返回的是两个整数的最大公约数,所以第三个空中应当填写"n"。
(1)对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,需平均移动元素的个数为【l】。
答案:
【1】n/2
评析:
删除一个元素,平均移动的元素个数为(n-l+n-2+……+0)n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-l+n-2+……+1)n=(n+1)/2;所以总体平均移动元素个数为n/2。
(2)注释说明了程序的功能,它分为【2】注释和功能性注释。
答案:
【2】序言性
评析:
注释一般分为序言性注释和功能性注释。
(3)软件测试中路径覆盖测试是整个测试的基础,它是对软件【3】进行测试。
答案:
【3】结构
评析:
路径测试是白盒测试方法中的一种,它要求对程序中的每条路径最少检查一次,目的是对软件的结构进行测试。
(4)数据库技术的主要特点为数据的集成性、数据的高【4】和低冗余性、数据独立性和数据统一管理与控制。
答案:
【4】共享性
评析:
数据库技术的主要特点有以下几个方面:
数据的集成性,数据的高共享性与低冗余性,数据韵独立性,数据统一管理与控制。
(5)数据元素之间【5】的整体称为逻辑结构。
答案:
【5】逻辑关系
评析:
数据元素之间逻辑关系的整体称为逻辑结构。
数据的逻辑结构就是数据的组织形式。
(6)若有定义intm=5,y=2,则执行表达式y+=y-=m*=y后,y的值为【6】。
答案:
【6】.16
评析:
将赋值运算符右侧的"表达式"的值赋给左侧的变量,并且赋值运算符按照"白右而左"的结合顺序,本题表达式应先算m的值为10,再运算y的值为8,最后计算y=y+(-8)=-8+(-8)=-16。
(7)若x和y都是double型变量,]ix的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x)(更多考试资讯尽在
答案:
【7】8.000000
评析:
fabs函数功能是求x的绝对值,计算结果为double型。
pow功能是计算x的y次方的值,计算结果同样为double型。
所以本题表达式相当于2.0的3.0次方,结果为8.000000。
(8)设有chara,b;,若要通过a&b运算屏蔽掉a中的其它位,只保留第2位和第8位(右起为第1位),则b的二进制是【8】。
答案:
【8】10000010
评析:
运算"&"的规则是只有当两个相应的二进制位都为1时,该位的结果才为1。
要保留第2、8位,只要将其与二进制数10000010相与。
(9)下列程序执行后输出的结果是【9】。
f(inta)
{staticc=0;
C=a+C++:
return(c);
}
main()
{inta=2,i,k;
for(i=O;i<2;i++)
k=f(a++);
printf("%d\n",k);
}
答案:
【9】7
评析:
在程序执行时,static变量仅初始化一次,下次使用时将使用上次保存的值。
(10)下面程序执行后输出的结果是【10】。
intm=13:
intfun(intx,inty)
{intm=3;
return(x*y-m);
}
main()
{inta=7,b=5;
printf("%d\n",fun(a,b)/m);
}
答案:
【10】2
评析:
本题变量m既是外部变量(值是13),又是fun函数的局部变量(值为3)。
函数fun(x*y-m)的值为7*5-3=32,在main函数中,ftm(a,b)/m中的m应取外部变量的值13,因此输出2。
(1)以下程序的输出结果是________。
#include
#defineSQR(x)x*x
main()
{ inta,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
A)8
B)9
C)17
D)20
答案:
B
评析:
本题宏替换中遇到形参x以实参k+l代替,其它字符不变。
sQR(k+1)展开后应为字符串k+l*k+l。
(2)下面是对宏定义的描述,不正确的是_______。
A)宏不存在类型问题,宏名无类型,它的参数也无类型
B)宏替换不占用运行时间
C)宏替换时先求出实参表达式的值,然后代入形参运算求值
D)宏替换只不过是字符替代而已
答案:
C
评析:
宏替换实质上就是字符替代,它不可能进行计算,故c错误。
带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。
(3)以下程序(程序左边的数字为附加的行号)________。
1#include
2#include
3main()
4{chars[]="string";
5 puts(s);
6 strcpy(s,"hello");
7 printf("%3s\n",s);}
A)没有错
B)第1行有错
C)第6行有错
D)第7行有错
答案:
B
评析:
字符串复制函数strcpy包含在头文件string.h中,因此,程序中的第l行文件包含命令是错误的。
(4)若有如下说明,则__________的叙述是正确的。
structst
{ inta;
intb[2l;
}a;
A)结构体变量a与结构体成员a同名,定义是非法的
B)程序只在执行到该定义时才为结构体st分配存储单元
C)程序运行时为结构体st分配6个字节存储单元
D)类型名structst可以通过extern关键字提前引用(即引用在前,说明在后)
答案:
D
评析:
结构体变量a与结构体成员a同名是合法的定义,引用成员a的方法是a.a,变量a处于不同的"层次"上,系统完全能够分清。
st是一个结构体名,不会为结构体名分配存储空间,应该是在运行时为结构体变量a分配6个字节的存储单元,故选项B和选项C错误。
(5)若有以下结构体定义,则________是正确的引用或定义。
structexample
{ intx;
inty;
}v1;
A)example.x=10B)examplev2.x=10
C)structv2;v2.x=lO
D)structexamplev2={10};
答案:
D
评析:
在定义结构体变量时,不能只用结构体名example或关键字strum进行定义,必需要用结构体类型名structexample定义,在引用结构体成员变量时,需要用结构体变量名进行引用,所以选D。
(6)下列程序的执行结果是_________。
#include
unionun(更多考试资讯尽在
{ inti;
charc[21;
};
voidmain()
{unionunx;
x.c[0]=10:
x.c[1]=1:
printf("\n%d",x.i);
}
A)266
B)ll
C)265
D)138
答案:
A
评析:
由于本题定义的是共用体,所以成员表列中的整型变量x与字符数组c共占用同一个存储单元,且此存储单元为2个字节,通常c[O]位于低字节,c[1]位于高字节,所以x.i的值为266。
(7)已知形成链表的存储结构如下图所示,则下述类型描述中的空白处应填_______。
structlink
Datanext
{ chardata;
}node;
A)structlinknext
B)link*next
C)structnextlink
D)structlink*next
答案:
D
评析:
在单向链表中,由于每个结点需要存储下一个结点的地址,且下一个结点的数据类型与前一个结点的数据类型完全相同,故应为structlink*next。
(8)已知小写字母a的ASCII码为97,大写字母A的ASCII.码为65,以下程序的结果是__________。
main()
{ unsignedinta=32,b=66;
printf("%c\n",at
B);
}
A)66
B)98
C)b
D)B
答案:
C
评析:
位运算符"l"的作用是按位或,即两个二进制数的相应位中只要有一个为1,该位的结果值为l。
最后以字符型输出, 98对应的字符"b"。
(9)C语言库函数龟ets(str,n,fp)的功能是_________。
A)从fp指向的文件中读取长度n的字符串存入str指向的内存
B)从fp指向的文件中读取长度不超过n-l的字符串存入str指向的内存
C)从fp指向的文件中读取n个字符串存/Xstr指向的内存
D)从str读取至多n个字符到文件fp
答案:
B
评析:
fgets函数的作用是从指定的文件读入一个字符串。
fgets(str,n,fp);中的n为要求得到的字符的个数,但只从fb指向的文件输入n-1个字符,然后在最后加一个'\O'字符,因此得到的字符串共有n个字符。
(10)下述程序向文件输出的结果是__________。
#include
voidmain()
{ FILE*fp=fopen("TEST","wb");
fprintf(fp,"%d%5.0f%c%d",58,76273.0,'-',2278);
fclose(fp);
}
A)5876273-2278B)5876273。
.000000-2278
C)5876273-2278
D)因文件为二进制文件而不可读
答案:
C
评析:
fprintf函数工作时,多个数据间不会自动加分隔符,选项A错误;浮点数的输出格式是"%5.0f"表明其小数部分输出O位,即没有输出,所以选项B也是错误的。
(1)下列程序执行后输出的结果是___________。
intd=l:
fun(intp)
{ intd。
5;
d+=p++;
printf("%d,",d);
}
main()
{ inta=3;
fun(a);
d+=a++:
printf("%d\n",d);
}
A)8,12
B)9,13
C)8,4
D)9,5
答案:
C
评析:
本题执行过程如下:
首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行"d+=a++",此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
(2)已知下面的程序段,正确的判断是_________。
#defineA3
#defineB(A)((_A+1)'a)
inta=3:
……
X=3*(A+B(7