一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写    在答题卡相应位置上,答在试卷上不得分。
(1)算法一般都可以用________控制结构组合而成。
A)循环、分支、递归    B)顺序、循环、嵌套
C)循环、递归、选择    D)顺序、选择、循环
答案:D
评析:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
(2)数据的存储结构是指________。
A)数据所占的存储空间量
B)数据的逻辑结构在计算机中的表示
C)数据在计算机中的顺序存储方式
D)存储在外存中的数据
答案:B
评析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。
(3)设有下列二叉树:
对此二叉树中序遍历的结果为________。
A)ABCDEF    B)DBEAFC    C)ABDECF    D)DEBFCA
答案:B
评析:中序遍历是指首先遍历左子树,然后访问根结点,最后遍历右子树;并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树的一种二叉树遍历算法。
(4)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送________。
A)调用语句    B)命令    C)口令    D)消息
答案:D
评析:面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为消息。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。
(5)检查软件产品是否符合需求定义的过程称为________。
A)确认测试    B)集成测试    C)验证测试    D)验收测试
答案:A
评析:确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中的确定的各种需求,以及软件配置是否完全、正确。
(6)下列工具中为需求分析常用工具的是________。
A)PAD    B)PFD    C)N-S    D)DFD
答案:D
评析:常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析的常用工具有:数据流图(DFD)、数据字典(DD)、判定树和判定表等。
(7)下面不属于软件设计原则的是________。
A)抽象    B)模块化    C)自底向上    D)信息隐蔽
答案:C
评析:在软件设计过程中,必须遵循软件工程的基本原则:这些原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性
和可靠性。
(8)索引属于_________。
A)模式    B)内模式    C)外模式    D)概念模式
答案:B
评析:内模式(Internal Schema)又称物理模式(Physical Schema),它给出了数据库物理存储结构与物
理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径。
(9)在关系数据库中,用来表示实体之间联系的是_________。
A)树结构    B)网结构    C)线性表    D)二维表
答案:D
评析:在关系数据库中,用二维表来表示实体之间联系。
(10)将E-R图转换到关系模式时,实体与联系都可以表示成_________。
A)属性    B)关系    C)键    D)域
答案:B
评析:关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将E-R图转换到关系模式时,实体与联系都可以表示成关系。
(11)有如下程序
main()
{
char ch[2][5]={“6937″,”8254″},*p[2];
int I,j,s=0;
for(I=O;i<2;i++)p[i]=ch[I];
for(I=O;i<2;i++)
for(j=0;p[i][j]>’\0’;j+=2)
s=10*s+(p[i][j].’0’);
printf(”%d\n”,s);
}
该程序的输出结果是_________。
A)69825    B)63825    C)6385    D)693825
答案:C
评析:本题“ch[2][5]={“6937″,”8254″}”用于2行5列的二维数组初始化,ch[O][0]-ch[O][4]的值分别为:6,9,3,7,\0;ch[1][0]-ch[1][4]的值分别为:8,2,5,4,\0;第一个for循环用于将数组指针分别指向二给数组的第一行和第二行;第二个for嵌套循环用于取出p[O][0],p[O][2],p[1][0],p[1][2]四个存储单元的数组成一个四位数进行输出。
(12)以下叙述不正确的是_________。
A)分号是C语言的必要组成部分
B)C程序的注释可以写在句的后面
C)函数是C程序的基本单位
D)主函数的名字不一定用main表示
答案:D
评析:c语言的程序是由主函数main()开始运行,由主函数来调用其他函数,所以D是错误的。
(13)若变量已正确定义并赋值,下面符合c语言的表达式是_________。
A)a:_b+1    B)a=b=c+2    C)int 18.5%3    D)a=a+7=c+b
答案:B
评析:选项A和c一望而知其错:对于表达式a=a+7=c+b(答案D),是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左侧不能为常量或表达式。
(14)C语言运算对象必须是整型的运算符是_________。
A)%=    B)/    C)=    D)<:
答案:A
评析:在C语言中,模运算(即取余运算%)的运算对象必须是整型数据(常量、变量或表达式)。
(15)下面一组中都是C语言关键字的是_________。
A)double Int for        B)main while goto
C)volatile break static    D)malloc sizeof new
答案:C
评析:c语言中的关键字有32个关键
字(参见c语言教程),本题中只有C符合题意。
(16)若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是_________。
A)l    B)2    C)2.0    D)2.5
答案:C
评析:这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值l,在没有进行类型转换的t留下,3/2的值为1,所以x+3/2的值应为2.0。
(17)执行语句:for(、i=1;i++<4;);后变量i的值是_________。
A)3    B)4    C)5    D)不定
答案:C
评析:for语句的一般形式为:for(表达式1;表达式2;表达式3)语句,循环结束的条件是i++<4,所以当i++_4时,循环结束,此时变量i的值为5。
(18)若变量a、i已正确定义,且i已正确赋值,合法的语句是_________。
A)a==l    B)++i;    C)a=a++=5;    D)a=int(i);
答案:B
评析:选项D显然是错的,而选项A没有分号结束,不是c语句;a++=5违反了赋值表达式左侧必须为一个变量(不能是常量或表达式)的规定.
(19)有如下程序
main()
{  int  y=3,x=3,z=l;
printf(”%d %d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是________。
A)3  4    B)4 2    C)4  3    D)3  3
答案:D
评析:逗号表达式(++X,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。
(20)运行以下程序后,如果从键盘上输入65 14<;回车>,则输出结果为________。
main()
{
int m,n;
printf(”Enter m,n:”);
scanf(”%d%dt.,&m,&n);
while(mI-n)
{
while(m>n)re-=n,
while(n>m)n-=m;
}
printf(”m=%d\n”,m);
}
A)m=3    B)m=2    C)m=l    D)m=O
答案:C
评析:分析程序可知,该程序实现的功能是对数m,n求其最大公约数。在本题中m与n的值分别为65与14,其最大公约数为1,故其输出结果为m=l。
(21)能正确表示逻辑关系:””a≥10或a≤0””的C语言表达式是________。
A)a>=10 or a<=O    B)a>=0 I a<=10
C)a>=10&&a<=0      D)a>=10 ll a<=10
答案:D
评析:c语言中的“或”关系用“‖”表示,其它相关逻辑运算符“与”用“&&”表示;运算符“非”用“!”来表示。
(22)已经定义ch为字符型变量,以下赋值表达式中错误的是________。
A)ch=’\’  B)ch=62+3    C)ch=NULL    D)ch=’\xaa’
答案:A
评析:反斜杠字符“\”赋给字符,应该写成ch=‘\\’,所以A是错误的。
(23)有如下程序
main()
{  int  x=l,a=0,b=0;
switch(x){
case 0:b++:
case 1:a++:
case 2:a++;b++;
}
printf(”a=%d,b。%d\n”,a,b);
)
该程序的输出结果是__________。
A)a:2,b=1    B)a=l,b=1    C)a=l,b:O    D)a=2,b=2
答案:A
评析:在这个switch语句中,因为x的值为1,所以执
行case 1:后面的a++,这样a=1。但又由于其下没有break语句,所以其后面的语句“a++;b++”也将被执行,这样一来,a=2,b=1。
(24)有如下程序
main()
{  float x=2.0,y;
if(x<O.O)y=0.0;
else if(x<lO.O)y=1.O/x;
else y=1.O;
printf(%f\n”,y);
}
该程序输出结果是_________。
A)0.000000    B)0.250000    C)0.500000    D)1.000000
答案:C逗号表达式的运算顺序
评析:本题考查的是if..else语句的使用。x=2.0,符合第二个IF语句的条件x<lO.O,所以执行y=1.0/x语句,即y=1.0/2.0=0.500000。
(25)有以下函数定义:
void fun(int n,double x){……}
若以下选项中的变量都已正确定义并赋值,则对函数fun正确调用语句是_______。
A)fun(int y,double m);    B)k=fun(10,12.5);
C)fun(x,n);              D)void fun(n,x);
答案:C
评析:函数调用的一般形式为:函数名(实参表列);,实参与形参的个数应相等,类型应一致,在调用函数时,不要指定其返回类型,对于返回类型为void的函数,不能作为赋值表达式的组成部分,所以选C。
(26)有如下程序
main()
{  int i,sum;
for(i=l;i<=3;sum++)  sum+=i;
printf(”%d\n”,sum);
}
该程序的执行结果是_________。
A)6      B)3      C)死循环      D)O
答案:C
评析:在循环过程中,i的值一直没有被改变,所以这是一个死循环。
(27)下列函数定义中,会出现编译错误的是_________。
A)max(int x,int y,int*z)          B)int max(im x,y)
{  *z=x>y?x:y;}                  { int z;
z=x>y?x:y;
return z;}
C)max(intx,inty)                  D)intmax(intx,inty)
{int z;                            {return x>y?x:y;}
z=x>y?x:y;
return(z);}
答案:B
评析:在c语言中,不可以在函数的参数声明列表中用一个类型名指定多个参数。故选项B是错误的。
其正确的表示方式应为
int max(int x,int y){……}
int max(x,y)
int x,y;
{……}
(28)有如下程序
main()
{  int x=3;
do
{  printf(”%d”,x–);}
while(!x);
}
该程序的执行结果是________。
A)321    B)3    C)不输出任何内容    D)陷入死循环
答案:B
评析:本题x赋初值为3,当执行printf(“%d”,x–);时,由于X–的作用是先运算x,再将x的值减l,所以,printf输出的x值为3,等输出后,x的值减1变为2,继续执行,判断条件!x为假,循环只被执行一次。
(29)设有声明语句:char a=’\72′;则变量a__________
A)包含1个字符    B)包含2个字符
C)包含3个字符    D)声明不合法
答案:A
评析:转义字符常量‘\xx’可以把‘\’后面的数字转换为对应的ASCII字符。
(30)有以下程序段:
main()
{
int a=5,*b,**c
c==&b;b=&a;
}
程序在执行了c=&b;b=&a;语句后,表达式ttc的值是__________。
A)变量a的地址    B)变量b中的地址
C)变量a中的值    D)变量b的地址
答案:C
评析:指针变量是用来存放地址的。&:取地址运算符。+:指针运算符。**c为指针变量*c所指向的存储单元,*c为指针指针变量c所指向的存储单元,而c=&b表示c为变量b的地址,b=&a表示b为变量a的地址。表达式一c的值就是变量a中的值。
(31)有如下函数调用语句
func(recl,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是________。
A)3    B)4    C)5    D)有语法错误
答案:A
评析:(rec4,rec5)是逗号表达式,它的值是rec5的值。所以该函数调用语句含有的实参个数是3。
(32)有如下程序
main()
{
char s[115]={.tabc”,”de”,”fgh”};
printf(“%e”,s[2][6]);
}
其输出为__________。
A)不确定    B)编译错误    C)g      D)输出null字符
答案:A
评析:由于s[2116]表示字符串已超出了数组s的表示范围,在c中不会对数组越界进行检查,当数组越界时,会得到一个不确定的值。
(33)有如下程序
int rune(ira a,int b)
{  remm(a+b);}
main()
{  int x=2,y=5,z=8,r;
r=func(func(x,y),z);
primf(”%d\n”,r);
}
该程序的输出结果是________。
A)12    B)13    C)14      D)15
答案:D
评析:调用函数func(x,y),返回x+y,即7;再调用函数func(7,z),返回7+z,即15。
(34)有如下程序段
int  *p,a=10,b=l;
p=&a;  a=*p+b;
执行该程序段后,a的值为_________。
A)12    B)11    C)10    D)编译出错
答案:B
评析:执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为11。
(35)有以下程序:
int*f(int*x,int*y)
{  if(*x<*y)return x;
else returny;
}
main()
{
int a=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=f(p,q);
printf(”%d,%d,%d\n”,*p,*q,*r);
}
程序运行后输出结果是_________。
A)7,8,8    B)7,8,7    C)8,7,7    D)8,7,8
答案:B
评析:f函数的功能是返回地址为x,y的两个数中值较的数的地址,本题输出结果是7,8,7。
(36)有如下程序
long fib(im n)
{  if(n>2)  return(fib(n-1)+fib(n-2));
else return(2);
)
main()
{  printf(%ld\n”,fib(3));}
该程序的输出结果是_________。
A)2    B)4    C)6    D)8
答案:B
评析:函数舶内部有两个递归调用,当n=3时,fib(n-1)返回2,fib(n-2)也返回2,所以fib(n-I)+fib(n-21的值为4。
(37)下面程序的输出结果是_________。
main()
{
char str[10],c=’a’;
inti=0:
for(;i<5;i++)
str[I]=c++;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。