第 1 页:选择题 |
第 3 页:程序改错题 |
第 4 页:简单应用题 |
第 5 页:综合应用题 |
21在软件开发中,需求分析阶段产生的主要文档是( )。
A.可行性分析报告
B.软件需求规格说明书
C.概要设计说明书
D.集成设计计划
参考答案:B
参考解析:需求分析是对获取的需求进行分析和综合最终给出系统的解决方案和目标系统的逻辑模型。需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标确认,又可以作为控制软件开发进程的依据。
22在软件开发中,需求分析阶段产生的主要文档是( )。
A.软件集成测试计划
B.软件详细设计说明书
C.用户手册
D.软件需求规格说明书
参考答案:D
参考解析:
需求分析阶段只能产生需求分析规格说明书。A测试说明书是软件测试阶段生成的;B软件详细设计说明书是设计阶段生成;C用户手册是软件发布时随软件一同交付给用户的。
23生成派生类对象时,派生类构造函数调用基类构造函数的条件是( )。
A.无需任何条件
B.基类中显式定义了构造函数
C.派生类中显式定义了构造函数
D.派生类构造函数明确调用了基类构造函数
参考答案:D
参考解析:派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以在定义派生类的构造函数时,除了对自己的类据成员进行初始化外,还必须负责调用基类构造函数,使基类的数据成员得以初始化。
24下列选项中不属于字符常量的是( )。
A.'C'B."C"C.'\xCC'D.'\072'
参考答案:B
参考解析:字符常量是用一对单引号括起来的,而字符串常量是用双引号括起来的字符序列,所以选项B不正确;选项C中'\xCC'是十六进制表示的转义字符;选项D中'\O72'是八进制表示的转义字符。
25有下列程序:
#include
voidmain( )
{char*s={"ABC");
do
{printf("%d",*s%10);s++;
}while(*s);
}
注意:字母A的ASCIl码值为65。程序运行后的输出结果是( )。
A.5670B.656667C.567D.ABC
参考答案:C
参考解析:本题考查d0…while语句,至少执行一次循环体,依次输出ABC,这三个字母的ASCIl值对10求模的余数,字母A的ASCIl值对10求模的余数为5,字母B的ASCIl值对10求模的余数为6,字母c的ASCIl值对10求模的余数为7。所以正确答案为选项C。
26数据库管理系统中负责数据模式定义的语有是( )。
A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言
参考答案:A
参考解析:数据模式是由数据定义语言(DataDefini-tionLanguage,DDL)来描述、定义的,体现、反映了数据库系统的整体观。
27有如下程序:
#include
usingnamespacestd;
classAA{
public;
AA( ){cOUt<<'1';)
};
classBB:publicAA{
intk;
public:
BB( ):k(0){tout<<'12';}
BB(intn):k(n)(cout<<'3';)
};
intmain( ){
BBb(4),c;
return0;
}
运行时的输出结果是( ).
A.1312B.132C.32D.1412
参考答案:A
参考解析:当基类的构造函数默认或无参时,派生类可省对基类构造函数的显示调用,但系统会自动调用该类的缺省构造函数,且先调用基类的构造函数后调用派生类的构造函数。
28下列关于宏的叙述中正确的是( )。
A.宏名必须用大写字母表示
B.宏定义必须位于源程序中所有语句之前
C.宏替换没有数据类型限制
D.宏调用比函数调用耗费时间
参考答案:C
参考解析:本题考查宏的相关知识点。宏名没有大小写限制;宏定义可以放在程序中的任何位置,其有效范围是从定义开始到文件结束;宏替换可以代替任何数据类型,不受数据类型的限制;函数影响运行时间,宏调用影响编译时间。
29下列叙述中正确的是( )。
A.算法就是程序
B.设计算法时只需要考虑数据结构的设计
C.设计算法时只需要考虑结果的可靠性
D.以上三种说法都不对
参考答案:D
参考解析:程序可以实现算法,所以A错。设计算法除了考虑数据结构外,还需考虑结果的可靠性,以及算法效率,等等。
30若已定义
inta[]={1,2,3,4,5,6,7,8,9,10},p=a,i=5;
则对数组元素不正确的引用是( )。
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
参考答案:D
参考解析:数组和指针的关系非常密切,因为数组名称单独使用是表示数组的首地址。故可用的表示可能是a[i],p[i],*(P{i),同样&(a[i])表示地址,因此*(&a[i])等同于a[i]。本题答案为D。
31控制格式输入/输出的操作中,设置域宽的函数是( )。
A.WSB.octC.setfill(int)D.setw(int)
参考答案:D
参考解析:本题需要考生记忆一些输入/输出控制操作字,oct为八进制,setfill为设置填充符,setw为设置域宽。
32有下列二叉树,对此二叉树前序遍历的结果是( )。
A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXYZD.ABDYECFXZ
参考答案:D
参考解析:对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其虚、右子树。记住三种遍历的顺序:①前序,访问根→按前序遍历左子树→按前序遍历右子树;②中序,按中序遍历左子树→访问根→按中序遍历右子树;③后序,按后序遍历左子树→按后序遍历右子树→访问根。
33设有宏定义“#definelsDIV(k,n)((k%n==1?1:0)”且变量m已正确定义并赋值,则宏调用“lsDIV(m,5)&&IsDIV(m,7)”为真时所要表达的是( )。
A.判断m是否能被5或者7整除
B.判断m是甭能被5和7整除
C.判断m被5或者7整除是否余1
D.判断m被5和7整除是否都余l
参考答案:D
参考解析:本题考查宏定义,宏定义IsDIV(k,n)的意思是如果k对n.求模的余数为1,其值等于1,否则其值等于0。本题中宏调用表达式是两个宏调用之间的逻辑与运算,所以选项D正确。
34以下程序的输出结果是( )。
#include
longfun(intn)
{longS;
if(n==1‖n==2)s=2;
elses=n-fun(n-1):
returnS;
}
voidmain(){cout<
A.1B.2C.3D.4
参考答案:A
参考解析:题中fun函数进行了递归调用,第1次调用对:fun(3)n=3,S=3-fun(2),第二次调用时:fun(2)n=2,s=2,返回第一次调用后,s=3-2=1。
35下列程序的执行结果是( )。
#include
#include
classTestClass
{
public:
intX,y;
TestClass(){x=y=0;}
TestClass(inta,intb)(x=a;y=b;}voiddisp()
{
cout<<"x="<
}
};
voidmain()
{
TestClasss1(2,3);
s1.disp();
}
A.x=2,y=2B.x=2,y=3C.x=3,y=2D.x=3,y=3
参考答案:B
参考解析:由主函数入手,定义了类TestClass的对象s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(inta,intb){x=a;y=b;}”,然后调用成员函数disp(),则输出为“cout<<"x="<
36有下列程序:
#include
intfun(int(*s)[4],intn,intk)
{intm,i;
m=s[O][k];
for(i=1;im)m=s[i]
[k];
returnm;
}
voidmain( )
{inta[4][4]=({1,2,3,4),{11,12,13,14},{21,
22,23,24},{31,32,33,34)};
printf(”%d\n”,fun(a,4,O));
}
程序的运行结果是( )。
A.4B.34C.31D.32
参考答案:C
参考解析:在程序中fun函数的功能在于求取三维数组S中1至n行中每行第k个元素中的最大者。注意:i=0时为第一行,故fun(a,4,O)在于求取11、21、31中的最大值,显然为31。
37有如下程序:
#include
voidmain()
{charch[2][5]={"6937","8254"),*p[2];
inti,j,s=0;
for(i=0;i(2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
cout<
该程序的输出结果是( )。
A.69825B.63825C.6385D.693825
参考答案:C
参考解析:该题需要搞清楚以下几点:④定义了一个指针数组char*p[2]后,程序中第一个循环“for(i=0;i(2;i++)p[i]=ch[i]”的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组P和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的内容为字符串“8254”。③程序中第二个循环中的循环体“s=s*10+p[i][j]-'0'”的功能是这样的,每执行一次,将s中的值乘以10(即将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][i]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i][j]>'\0'是指p[i][j]中的字符只要不是字符串结束标志'\0'就继续循环,语句j+=2;是使下标j每次增加2,即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和“3”,然后从p[1]所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。
38为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。
A.内联函数B.重载函数C.递归函数D.函数模板
参考答案:A
参考解析:内联函数一般是程序代码少于10行的函数,在编译过程中,直接在调用点处被展开,不会因函数调用带来巨大的系统开销,因此能提高实际运行速度。
39下列选项中属于面向对象设计方法主要特征的是( )。
A.继承B.自顶向下C.模块化D.逐步求精
参考答案:A
40下列程序输出的结果是( )。
#include
funl(chara,charb){charC;c=a;a=b;b=C;)
fun2(char*a,charb){charC;c=*a;*a=b;b=c;)
fun3(char*a,char*b){charC;C=*a;*a=*b;*b=C;)
voidmain( )
{
chara,b;
a='A';b='B';fun1(a,b);putchar(a);putchar(b);
a='A';b='B';fun2(&a,b);putchar(a);putchar(b);
a='A';b='B';fun3(&a,&b);putchar(a);putchar(b);
putchar('\n');
}
A.BABBABB.ABBBBAC.ABBABAD.ABABBA
参考答案:B
参考解析:由程序中的主函数main入手,分别调用fun1,fun2,fun3函数,得出输出结果。其中,3个函数都是实现的两个形参的交换功能,只是值传递的方式不同,有的是引用,有的是传值。第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。所以d调用funl后,实参a和b并没有交换,仍然是AB。第二个调用中,实参a采用的是地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。同理,调用fun3后为BA。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |