二级计算机VB笔试选择复习题.docx
《二级计算机VB笔试选择复习题.docx》由会员分享,可在线阅读,更多相关《二级计算机VB笔试选择复习题.docx(28页珍藏版)》请在冰豆网上搜索。
![二级计算机VB笔试选择复习题.docx](https://file1.bdocx.com/fileroot1/2023-7/23/d62ab717-4b09-4361-855b-23d524483d15/d62ab717-4b09-4361-855b-23d524483d151.gif)
二级计算机VB笔试选择复习题
二级计算机VB笔试选择复习题
1.程序流程图(PFD)中的箭头代表的是______。
A、数据流
B、控制流
C、调用关系
D、组成关系
程序流程图(PFD)是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,其箭头代表的是控制流。
本题答案为B。
2.下列叙述中正确的是______。
A、线性表是线性结构
B、栈与队列是非线性结构
C、线性链表是非线性结构
D、二叉树是线性结构
根据数据结构中各数据元素之间前后间关系的复杂程度,一般将数据结构分为两大类型:
线性结构与非线性结构。
如果一个非空的数据结构满足下列两个条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件,也最多有一个后件。
则称该数据结构为线性结构,又称线性表。
所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。
本题答案是A。
3.数据处理的最小单位是______。
A、数据
B、数据元素
C、数据项
D、数据结构
数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。
本题答案为C。
4.将E-R图转换到关系模式时,实体与联系都可以表示成______。
A、属性
B、关系
C、键
D、域
关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将E-R图转换到关系模式时,实体与联系都可以表示成关系。
本题答案为B。
5.在下列选项中,哪个不是一个算法一般应该具有的基本特征______。
A、确定性
B、可行性
C、无穷性
D、拥有足够的情报
作为一个算法,一般应具有以下几个基本特征。
1、可行性
2、确定性
3、有穷性
4、拥有足够的情报
本题答案为C。
6.软件调试的目的是______。
A、发现错误
B、改正错误
C、改善软件的性能
D、挖掘软件的潜能
由程序调试的概念可知:
程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性质、原因和位置。
其二,对程序进行修改,排除这个错误。
所以程序调试的目的就是诊断和改正程序中的错误。
本题答案为B。
7.在结构化方法中,软件功能分解属于下列软件开发中的______阶段。
A、详细设计
B、需求分析
C、总体设计
D、编程调试
总体设计过程通常由两个主要阶段组成:
系统设计,确定系统的具体实现方案;结构设计,确定软件结构。
为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。
本题答案为C。
8.下面概念中,不属于面向对象方法的是______。
A、对象
B、继承
C、类
D、过程调用
面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法从对象出发,发展出对象,类,消息,继承等概念。
本题答案为D。
9.在一棵二叉树上第5层的结点数最多是______。
A、8
B、16
C、32
D、15
根据二叉树的性质:
二叉树第i(i≥1)层上至多有2i-1个结点。
得到第5层的结点数最多是16。
本题答案为B。
10.在关系数据库中,用来表示实体之间联系的是______。
A、树结构
B、网结构
C、线性表
D、二维表
在关系数据库中,用二维表来表示实体之间联系。
本题答案为D。
11.以下程序段中与语句k=a>b?
(b>c?
1:
0):
0;功能等价的是______。
A、if((a>b)&&(b>c))k=1;
elsek=0;
B、if((a>b)||(b>c))k=1;
elsek=0;
C、if(a<=b)k=0;
elseif(b<=c)k=1;
D、if(a>b)k=1;
elseif(b>c)k=1;
elsek=0;
条件表达式的一般形式为:
表达式1?
表达式2:
表达式3
1、条件运算符的执行顺序为:
先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。
2、条件运算符优先于赋值运算符。
3、条件运算符的结合方向为“自右至左”。
综上所述,本题是先比较a,b,如果a>b成立则执行(b>c?
1:
0),如果b>c成立则结果为1,其它情况则为0。
也就是说只有a>b与b>c同时成立时k值才能为1。
故本题答案为A。
12.若程序中定义了以下函数,
doublemyadd(doublea,doubleb)
{return(a+b);}
并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。
A、doublemyadd(doublea,b);
B、doublemyadd(double,double);
C、doublemyadd(doubleb,doublea);
D、doublemyadd(doublex,doubley);
对函数的"定义"和"说明"不是一回事。
"定义"是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。
而"说明"则是对已定义的函数的返回值进行类型说明(或称"申明"),它只包括函数名、函数类型、以及一个空的括弧,不包括形参和函数体。
对被调函数进行说明的作用是告诉系统:
在本函数中将要用到的某函数是XX类型。
也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函数值作相应的处理。
本题选项A中,函数参数列表中,不可以用一类型声明多个变量,即变量b没有被声明,所以出错。
故本题答案为A。
13.下面程序的功能是输出以下形式的金字塔图案:
*
***
*****
*******
main()
{inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)printf("");
for(j=1;j<=______;j++)printf("*");
printf("\n");
}
}
在下划线处应填入的是______。
A、i
B、2*i-1
C、2*i+1
D、i+2
本题是找出打印*号的条件,从图中我们可以找到规律,第一行一个*,第二行3个,第三行5个……,也就是每行中*的个数恰好是行数的2倍减一个,由此不难得出,横线处应当填入2*i-1。
故本题答案为B。
14.有以下程序
main()
{chara[]="abcdefg",b[10]="abcdefg";
printf("%d%d\n",sizeof(a),sizeof(b));
}
执行后输出结果是______。
A、77
B、88
C、810
D、1010
C语言中可以用字符串常量来使字符数组初始化。
chara[]="abcdefg"中,不是用单个字符作为初值,而用一个字符串(注意字符串的两端是用双引号而不是单引号括起来的)作为初值。
数组a的长度是8,而不是7,因为字符串常量的最后由系统加上一个'\0'。
在对全部数组元素赋初值时,可以不指定数组长度,系统会据数组元素自动定义。
若被定义的数组长度与提供初值的个数不相同,则数组长度不能省略。
例如,想定义数组长度为10,就必须写成b[10]="abcdefg";只初始化前7个元素,后3个元素为0('\0')。
故本题答案为C。
15.一个算法应该具有"确定性"等5个特性,下面对另外4个特性的描述中错误的是______。
A、有零个或多个输入
B、有零个或多个输出
C、有穷性
D、可行性
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有下列五个重要特性:
(1)有穷性:
一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成;
(2)确定性:
算法中每一条指令必须有确切的含义,读者理解时不会产生二义性,并且,在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出;
(3)可行性:
一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的;
(4)输入:
一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合;
(5)输出:
一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。
故本题答案为B。
16.有以下程序:
main()
{inti,s=0;
for(i=1;i<10;i+=2)s+=i+1;
printf("%d\n",s);
}
程序执行后的输出结果是______。
A、自然数1~9的累加和
B、自然数1~10的累加和
C、自然数1~9中奇数之和
D、自然数1~10中偶数之和
通过for(i=1;i<10;i+=2)可知,i为从1开始的小于10的奇数,即1,3,5,7,9,i+1即为2,4,6,8,10。
也就是自然数1到10中的偶数,s+=i+1就是累加这几个偶数。
故本题答案为D。
17.有以下程序
#include
structNODE{
intnum;
structNODE*next;
};
main()
{structNODE*p,*q,*r;
intsum=0;
p=(structNODE*)malloc(sizeof(structNODE));
q=(structNODE*)malloc(sizeof(structNODE));
r=(structNODE*)malloc(sizeof(structNODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;sum+=p->num;
printf("%d\n",sum);
}
执行后输出结果是______。
A、3
B、4
C、5
D、6
题目中因为q->next=r,所以q->next->num即为r->num,为3,p->num=1,所以sum=3+1=4。
故本题答案为B。
18.设有定义:
intn=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是______。
A、p=1;
B、*q=2;
C、q=p;
D、*p=5;
指针变量中只能存放地址(指针),不要将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量。
有两个相关的运算符:
(1)&:
取地址运算符。
(2)*:
指针运算符(或称“间接访问”运算符)。
故本题答案为D。
19.有以下程序
main()
{chark;inti;
for(i=1;i<3;i++)
{scanf("%c",&k);
switch(k)
{case'0':
printf("another\n");
case'1':
printf("number\n");
}
}
}
程序运行时,从键盘输入:
01↙,程序执行后的输出结果是______。
A、another
number
B、another
number
another
C、another
number
number
D、number
number
switch语句的一般形式如下:
switch(表达式)
{case常量表达式1:
语句1;
case常量表达式2:
语句2;
.
.
.
case常量表达式n:
语句n;
default:
语句n+1;
}
switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
"case常量表达式"只是起语句标号作用,并不是在该处进行条件判断。
在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。
如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。
可以用一个break语句来达到此目的。
本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case'0'后将继续执行case'1'。
故本题答案为C。
20.有以下程序:
#include
main()
{FILE*fp;inti,k=0,n=0;
fp=fopen("d1.dat","w");
for(i=1;i<4;i++)fprintf(fp,"%d",i);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);
fclose(fp);
}
执行后输出结果是______。
A、12
B、1230
C、123
D、00
fprintf函数、fscanf函数与printf函数、scanf函数作用相仿,都是格式化读写函数。
只有一点不同:
fprintf和fcanf函数的读写对象不是终端而是磁盘文件。
一般调用方式为:
fprintf(文件指针,格式字符串,输出表列);
fscanf(文件指针,格式字符串,输入表列);
本题中需要注意的是,从磁盘文件上读入数据时,格式字符串为"%d%d",而输出到文件d1.dat上的是数据123,在读入数据时将123默认为一个数字,即k为123,n默认为0。
故本题答案为B。
21.有以下程序:
structSTU{
charname[10];
intnum;
};
voidf1(structSTUc)
{structSTUb={"LiSiGuo",2042};
c=b;
}
voidf2(structSTU*c)
{structSTUb={"SunDan",2044};
*c=b;
}
main()
{structSTUa={"YangSan",2041},b={"WangYin",2043};
f1(a);f2(&b);
printf("%d%d\n",a.num,b.num);
}
执行后输出结果是______。
A、20412044
B、20412043
C、20422044
D、20422043
f2函数传递的是变量的地址,可以实现数据的交换,而f1函数中是传递的值,执行完f1后,c的值是变了,但main函数中的a的值并未变化。
也就是说由于“单向传送”的“值传递”方式,形参值的改变无法传给实参。
故本题答案为A。
22.有以下程序
structSTU
{charname[10];
intnum;
intScore;
};
main()
{structSTUs[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},
{"WangYin",20043,680},{"SunDan",20044,550},
{"Penghua",20045,537}},*p[5],*t;
inti,j;
for(i=0;i<5;i++)p[i]=&s[i];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(p[i]->Score>p[j]->Score)
{t=p[i];p[i]=p[j];p[j]=t;}
printf("%d%d\n",s[1].Score,p[1]->Score);
}
执行后输出结果是______。
A、550550
B、680680
C、580550
D、580680
本题实际上是按成员变量Score的值进行由小到大的排序,程序执行后p[5]中各元素分别为:
{{"Penghua",20045,537},{"SunDan",20044,550},{"LiSiGuo",20042,580},{"WangYin",20043,680},{"YangSan",20041,703}}。
所以p[1]->Score=550,s[1].Score=580。
故本题答案为C。
23.有以下程序:
voidsum(int*a)
{a[0]=a[1];}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
}
执行后的输出结果是______。
A、4
B、3
C、2
D、1
当i=2时,将实参aa[2]的地址传递给形参,此时a[0]=a[1]=aa[3]=4,即aa[2]=4;
当i=1时,将实参aa[1]的地址传递给形参,此时a[0]=a[1]=aa[2]=4,即aa[1]=4;
当i=0时,将实参aa[0]的地址传递给形参,此时a[0]=a[1]=aa[1]=4,即aa[0]=4;
当i=-1时,不满足条件i>=0,跳出循环,程序执行后数组aa中的值为4,4,4,4,5,6,7,8,9,所以aa[0]=4。
故本题答案为A。
24.有以下程序
main()
{intx=102,y=012;
printf("%2d,%2d\n",x,y);
}
执行后输出结果是______。
A、10,01
B、02,12
C、102,10
D、02,10
y=012表示将八进制数12赋给变量y。
d格式符,用来输出十进制整数。
%md,m为指定的输出字段的宽度。
如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
本题是将八进制数12也输出为十进制数,八进制数12转换为十进制数为10,所以输出结果为102,10。
故本题答案为C。
25.以下4个选项,不能看作一条语句的是______。
A、{;}
B、a=0,b=0,c=0;
C、if(a>0);
D、if(b==0)m=1;n=2;
if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。
选项D中没有将两个操作语句括起来,不能看作一条语句。
故本题答案为D。
26.有以下程序:
voidsort(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+2;jif(a[i]}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa,10);
for(i=0;i<10;i++)printf("%d,",aa[i]);
printf("\n");
}
其输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,
B、10,9,8,7,6,5,4,3,2,1,
C、9,2,7,4,5,6,3,8,1,10,
D、1,10,3,8,5,6,7,4,9,2,
sort函数的功能实际上是对数组中奇数位置上的数进行从大到小排序。
排序后的结果应该为9,2,7,4,5,6,3,8,1,10。
故本题答案为C。
27.有以下程序
inta=2;
intf(int*a)
{return(*a)++;}
main()
{ints=0;
{inta=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行后输出结果是______。
A、10
B、9
C、7
D、8
在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。
本题中的inta=5;只在{inta=5;s+=f(&a);}内有效。
在函数之外定义的变量称为外部变量,外部变量是全局变量。
全局变量可以为本文件中其它函数所共用。
它的有效范围为:
从定义变量的位置开始到本源文件结束。
本题的开头inta=2;即为全局变量,实际上起作用的也就是这个。
故本题答案为C。
28.有以下程序
voidf(intv,intw)
{intt;
t=v;v=w;w=t;
}
main()
{intx=1,y=3,z=2;
if(x>y)f(x,y);
elseif(y>z)f(y,z);
elsef(x,z);
printf("%d,%d,%d\n",x,y,z);
}
执行后输出结果______。
A、1,2,3
B、3,1,2
C、1,3,2
D、2,3,1
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
本题中条件y>z为真,所以执行f(y,z)。
在函数调用开始时,y的值传送给v,z的值传送给w,执行完f函数后,v和w的值是互换了,但main函数中的y和z并未互换。
也就是说由于“单向传送”的“值传递”方式,形参值的改变无法传给实参。
故本题答案为C。
29.有以下程序
main()
{inti,n=0;
for(i=2;i<5;i++)
{do
{if(i%3)continue;
n++;
}while(!
i);
n++;
}
printf("n=%d\n",n);
}
程序执行后输出结果是______。
A、n=5
B、n=2
C、n=3
D、n=4
当i=2时,i%3为真,继续执行n++;此时n=1,!
i为假,结束while循环,执行n++,此时n为2。
当i=3时,i%3=0,跳出循环。
当i=4时,i%3=1为真,继续执行n++,此时n为3,!
i为假,结束while循环,继续往下执行n++,此时n为4。
故本题答案为D。
30.设有定义:
floata=2,b=4,h=3;,以下C语言表达式中与代数式1/2(a+b)h计算结果不相符的是______。
A、(a+b)*h/2
B、(1/2)*(a+b)*h
C、(a+b)*h*1/2
D、h/2*(a+b)
两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。
如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算。
根据运算符优先级,先计算括号内的,故选项B中(1/2)=0,整个表达式的值为0。
故本题答案为B。
31.设有定义:
inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是______。
A、scanf("%d",pa);
B、scanf("%d",a