2007春-2010年-江苏省计算机二级C++ - 历年真题及答案(笔试)

发布时间:2019-03-28 12:09:10   来源:文档文库   
字号:

2007年春

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试

二级试卷

试卷语种: Visual C++

明:

1.本试卷包括计算机基础知识部分和程序设计部分,考试时间共120分钟

2.本试卷满分为60分,分选择题和填空题,试卷不分AB类型;

3.计算机基础知识部分全部是选择题(20),程序设计部分分为选择题(10)和填空题(30)两种;

4.选择题用答题卡答题。每一项有ABCD四个可供选择的答案,请选择其中一个你认为正确的答案,用HB铅笔涂写在答题卡的相应答题号内。每选对一项得1分,不选或选错不得分;

5.填空题用答题纸答题。请将答案用蓝、黑色钢笔或圆珠笔填写在答题纸的相应答题号内,每个答案只占一行,不得换行。每填对一个答案得1分,不填或填错不得分;

6.请认真填写并仔细核对答题卡和答题纸上的学校名称、准考证号和姓名是否填写正确。

7.考试结束时将试卷、答题卡和答题纸放在桌上,不得带走。待监考人员收点

第一部分计算机基础知识

1 下面关于比特的叙述中,错误的是( 1 )

A.比特是组成数字信息的最小单位

B.比特只有“O”和“1”两个符号

C.比特既可以表示数值和文字,也可以表示图像和声音

D. 比特”1”总是大于比特“0

2 在下列有关集成电路的叙述中,错误的是 ( 2 )

A.现代集成电路使用的半导体材料主要是硅

B.大觑模集成电路一般以功能部件、子系统为集成对象

C.我国第2代居民身份证中包含有IC芯片

D• 目前超大规模集成电路中晶体管的基本线条已小到l纳米左右

3 在下列有关通信技术的叙述中,错误的是 ( 3 )

A.通信的基本任务是传递信息,因而至少需由信源、信宿和信道组成

B.通信可分为模拟通信和数字通信,计算机网络属于模拟通信

c.在通信系统中,采用多路复用技术的目的主要是提高传输线路龟利用率

D•学校的计算机机房一般采甩5类无屏蔽双绞线作为局域网的传输介质

4.下面是关于PC机主存储器的一些叙述,其中正确的是( 4 )

A.主存储器是一种动态随机存取存储器(RAM)

B.主存储器的基本编址单位是字(32个二进位)

C.目前市场上销售的PC机,其内存容量可达数十GB

D.所有PC机的内存条都是通用的:可以互换

5 现行PC机中,IDE(SATA)接口标准主要用于( 5 )

A.打印机与主机的连接 c.声卡与主机的连接

B.显示器与主机的连接 D.硬盘与主机的连接

6. 下列有关PC机的CPU、内存和主板的叙述中,正确的是( 6 )

A.大多数Pc机只存一块CPu芯片,即使是“双核”CPU也是一块芯片

B.所有Pentium系列微机的内存条相同,仅有速度和容量大小之分

C.主板上芯片组的作用是提供存储器控制功能,IO控制与芯片组无关

D.主板上CMOS芯片用于存储CMOS设置程序和一些软硬件设置信息

7.下列有关目前Pc机辅助存储器的叙述中,错误的是 ( 7 )

A.硬盘的容量越来越大,这是因为硬盘中磁盘碟片的数目越来越多

B.硬盘的内部传输速率一般小于外部传输速率

c.优盘采用Flash存储器技术,属于半导体存储器

D.目前常见COMBO光驱是一种将CD-RWDVD-ROM组合在一起的光驱

8.下面有关Windows操作系统,(95以后版本)的叙述中,错误的是 ( 8 )

AWindows操作系统支持系统中多个任务的并发执行

B.利用Whldows附件“系统工具”中的“系统信息”可以查看内存的工作情况

C.系统规定文件名最多由128个字符组成

DVistaMicrosoft公司推出的Windows XP操作系统的后继版本

9.算法设计是编写程序的基础。下列关于算法的叙述中,正确的是 ( 9 )

A 算法必须产生正确的结果 C 算法可以没有输出

B 算法必须具有确定性 D.算法的表示必须使计算机能理解

10.因特网使用TCPIP协议实现全球范围的计算机网络互连,连接在因特网上的每一台主机

都有一个IP地址。下面不能作为IP地址的是( 10 )

A 12034018 C 21183348

B. 201.256.39.68 D 37250680

11.常用局域网有以太网、FDDI网等,下面的叙述中错误的是 ( 11 )

A• 总线式以太网采用带冲突检测载波侦听多路访问(CSMA/CD)方法进行通信

B FDDI网和以太网可以直接进行互连

C• 交换式集线器比总线式集线器具有更高的性能,它能提高整个网络的带宽.

D• FDDI网采用光纤双环结构,具有高可靠性和数据传输的保密性

12.某用户在WWW浏览器地址栏内键入一个URLhttp://www.zdxy.cn/index.htm”,其中

的“/ndex.htm”代表( 12 )

A.协议类型 C.路径及文件名

B.主机域名 D.用户名

13.交换式以太网与总线式以太网在技术上有许多相同之处,下面叙述中错误的是( 13 )

A.使用的传输介质相同 C.传输的信息帧格式相同

B.网络拓扑结构相同 D.使用的网卡相同

14.下面是关于我国汉字编码标准的叙述,其中正确的是 ( 14 )

AUnicode是我国最新发布的也是收字最多的汉字编码国家标准

B.不同字型(如宋体、楷体等)的同一个汉字在计算机中的内码不同

C.在GBl8030汉字编码标准中,共有2万多个汉字

DGBl8030GB2312GBK汉字编码标准不能兼容

15.数字图像的文件格式有多种,下列哪一种图像文件能够在网页上发布且可具有动画效

( 15 )

ABMP BGIF CJPEG DTIF

16.声卡是获取数字声音的重要设备,.在下列有关声卡的叙述中,错误的是

A.声卡既负责声音的数字化(输入),也负责声音的重建(输出)

B.声卡既处理波形声音,也负责MIDI音乐的合成

C.声卡中的数字信号处理器(DSP)在完成数字声音编码、解码及编辑操作中起着重

要的作用

D.因为声卡非常复杂,所以它们都被做成独立的PCI插卡形式

17.彩色图像所使用的颜色描述方法称为颜色模型。显示器使用的颜色模型为RGB三基色模

型,PAL制式的电视系统在传输图像时所使用的颜色模型为

AYUV BHSB CCMYK

18.在信息系统的结构化生命周期开发方法中,绘制E-R图属于( 18 )阶段的工作

A.系统规划 B 系统分析

C.系统设计 D 系统实施

19.在下列有关Microsoft Word 20002003(中文版)功能的叙述中,( 19 )

A.起始页的页码可以不为1

B.利用菜单命令,可更改所选英文文本的大小写

C.利用菜单命令“字数统计”,可以统计出当前文档的行数和段落数

D.表格中的数据不可排序,也不能利用公式进行统计计算

20.在下列有关Microsoft PowerPoint (中文版)功能的叙述中,错误的是( )

A.可通过“另存为”操作,将每张幻灯片保存为一个图片文件

B.幻灯片的大小是固定的,用户不可以对其进行设置

C.在排练计时的基础上,可以将幻灯片设置为循环放映

D.可以对字体进行替换,例如将幻灯片中的“宋体”替换为“楷体”

第二部分Visual C++语言程序设计

一、选择题(用答题卡答题,答案依次填在2130答题号内)

21.设有说明语句:int de

以下选项中,存在语法错误的是21

Ad=9+e==d+2 Bd=e+=2 Cf=g+f=j*k++ D.(++d)++;

22.设有函数调用语句:fun((x1x2)x3(x4x5x6));

该函数调用中实参的个数是22

A2 B3 C. 5 D.6

23.以下对二维数组的说明中,存在语法错误的是23

Aint a[][3]={321123} Bint a[][3]={{3,2,1},{1,2,3}}

Cim a[2][3]={1} Dint a[2][]={{32l}{123}};

24.以下选项中,存在语法错误的是24

Afloat x&j=x Bint c&d=c&e=d

Cchar b, &k=b Dint f&gg=f

25.下述关于抽象类的描述中,错误的是25

A.可以通过在类中定义纯虚函数的方式定义抽象类

B 不可以创建抽象类的对象

C 不可以创建抽象类的引用

D.可以创建抽象类的指针

26.下列有关函数缺省参数的描述中,正确的是26

A:设置了缺省值的参数左边不允许出现没有指定缺省值的参数

B.同一个函数在同一个文件中可以提供不同缺省参数值

C.参数缺省值要设置在函数定义语句中,不能设置在函数说明语句中

D. 一个函数具有缺省值的参数只能有一个 |

27.在以下选项中,C++语言不能重载的运算符是27

A? B+ C[] D.<=

28.假设a是类E的对象,执行语句:

E b=a

则要调用类E中的28

A.缺省构造函数 Boperator=()函数

c.拷贝构造函数 D.对象之间的赋值

29.已知在函数set中,语句this>ff=5;与语句ff=5;的效果完全相同。根据这一结

论,以下叙述中不正确的是29

Aff是某个类的数据成员,Set是该类的友元函数

Bff是某个类的数据成员,Set是该类的成员函数

CSet不是该类的静态成员函数

Dff不是该类的常成员数据

30.以下对派生类的描述中,不正确的是30

A.一个派生类可以作为另一个派生类的基类

B.派生类至少有一个基类

C.派生类的成员除了它自己的成员以外,还包含它的基类的成员

D.派生类中,从基类继承来的成员的访问权限在派生类中保持不变

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题(5)

1.重载函数必须有不同的参数个数或(1 )

2.在派生类中如果没有重载基类中的纯虚函数,则该派生类是(2 )

3.设有以下程序:

#include

#define S(X) X*X

void main(void)

{

int k=2

cout<<++S(k+k)<<'\n'

}

执行该程序后,输出的结果为( 3n ) k的值为( 4 )

4.在多重派生中,若要使公共基类在派生类中只有一个拷贝,则必须将该基类说明

( 5 )

●阅读程序题(13)

5[程序](2)

#include

void main(void)

{

static int a[7]={1}ij

for(i=1i<=6i++)

for(j=ij>0j--)

a[j]+=a[j-1]

for(j=0j<7j++)

cout<

}

程序输出第三行是__6_____,第四行是_____7_______

6[程序](3)

#includeh>

void main(void)

{

char s[]="I am a studentYou are a student too."

int a[26]={0}

char *P=s

while(*P++!='A' && *P<='Z') a[*p-'A']++

else if(*P>='a' && *P<='z') a[*p-'a']++;

}

for(int i=0i<26i++)

if(a[i]!=0) cout<<(char)(i+'a')<<""<

}

程序的第一行输出为 ( 8 ) ,第三行输出为 ( 9 )

7[程序](2)

#includeh>

int f(int n)

{

int s=1

if(n==1)

s=1

else{

if(n==3) cout<

s=n*f(n-1)

}

return s

}

void main(void)

{

int s

s=f(5)

cout<<"s="<

}

程序的第一行输出为( 10 ),第二行输出为( 11 )

8.[程序](2)

#include

char *f( char *s)

{

for(char *p=s, *q=s; *q=*p;p++)

if(*q>='0' && *q<='9') q++;

return s;

}

void main(void)

{

char s1[]="It's 4 p.m.", s2[]="3=3000毫米";

cout<

cout<

}

程序输出的第一行是( 12 ),第二行是( 13 )

9[程序]3)

#include

void main(void)

{

int a[10]={73868928876988846490}

int b[4]={607090101}

int c[4]={0}

for(int i=0i<10i++){

int j=0

while(a[i]>=b[j])

j++

c[j]++

}

for(i=0i<4i++)

cout<

cout<

}

程序输出的第一行是__________,第三行是_____________,最后一行是_________

10[程序](2)

#include

class A{

int a

public

void seta(int aa){a=aa}

virtual void print() //第六行

{cout<}

}

class Bpublic A{

int b

public

void setb(int bb){b=bb;}

void print()

{cout<}

}

void main(void)

{

A a*P

B b

a.seta(5)

b.seta(10)

b.setb(20)

P=&a

P->print()

P=&b

P->print()

}

程序输出的是( 17 )。如果在第六行中去掉Virtual,则程序输出的是( 18 )

11. 一个数的各位数字倒过来所得到的新数叫原数的反序数.如果一个数等于它的反序数,则称它为对称数或回文数。求10000—11000之间的二进制对称数

算法说明:先将正整数n的二进制字符形式放在字符数组s2中,二进制字符形式的反序放在字符数组s1中,然后,比较这两个字符串,若相等,则是二进制对称数

#include

#include

int func(int n, char *s1)

{

char ch, s2[33], *p,*q;

p=s1; q=s2+32;

*q- -=( 19 )

while(n){

ch=( 20 ) //n的最低二进制位的字符表示形式

n/=2;

*p++=ch;

*q- -=ch;

}

*p=0;

q++;

if( 21 ) return true;

else return false;

}

void main(void)

{

char s[33]={0};

int count=0;

cout<<”二进制对称数如下:\n”;

for(int n=10000; n<11000; n++)

{

if( 22 ){

cout<<”n=”<二进制形式为:”<

count++;}

}

cout<<”对称数的个数为:”<

}

12.以下程序中的函数fun(int *a, int n)的功能是:把形参a所指向的数组中的最小值放在a[0]中,接着把形参a所指数组中的最大值放在a[1]中;把a所指数组中的次小值放在a[2]中,把a所指数组中的次大值放在a[3]中,其余依次类推,直至将数组中数据依次处理完为止

例如:把a所指向数组中的数据最初排列为:5,1,3,2,9,7,6,8,4.按以上规则移动数组中的数据后,数据的排列为:1,9,2,8,3,7,4,6,5

#include

#define N 9

void fun(int *a, int n)

{

int max, min, px, pn, t;

for( int i=0; i

max=min=a[i];

px=pn=i;

for(int j=i+1; j

if(max

max=a[j];

px=j;

}

if(min>a[j]){

min=a[j];

pn=j;

}

}

if(pn!=i){

t=a[i];

a[i]=min;

____24_____

if(px==i) px=pn;

}

if( 25 ){

t=a[i+1];

a[i+1]=max;

( 26 )

}

}

}

void main(void)

{

int b[N]={5,1,3,2,9,7,6,8,4};

cout<<”数组中的数据依次为:”<

for(int i=0; i

cout<

cout<

fun(b,N);

cout<<”处理后数组中的数据依次为:”<

for(i=0; i

cout<

cout<

}

13.下列程序中的函数change(node *paint x)的功能是:调整pa指向的链表中结点的

位置。根据参数X的值,使链表中各结点数据域小于X的结点放在链表的前半部,大于等于x

的结点放在链表的后半部,并将X插人这两部分结点之间。

例如,原链表上各结点的数据依次为:34219650106

输入:X=7

经插入新结点后,新链表的各结点数据依次为:342165067910

[程序](4)

#include h>

struct node{

int data

node *next;

}

node *change(node *paint x)

{

node *pl*p2*P*q;

pl=p2=pa

p=new node //生成新结点

p->data=x

while(p2>data>next!=0){ //找到x应插入的位置

pl=p2

( 27 )

}

if(p2>next!=0)

p>next=p2 //插入以X为数据域的结点

pl>next=p

q=pl

while( 28 ){ //通过循环,将插入结点之后所有数据域小于x的结点前移

if(p2>data//数据域小于x的结点插入以x为数据域的新结点之前

pl>next=( 29 )

p2>next=p;

q>next=p2;

q=p2

p2=pl>next;

}

else

{

pl= p2

p2=p2>next

}

}

}

else{ //如果链表中所有结点数据域均小于x,则在链尾插入以x为数据域的新结点

p2>next=p

( 30 )

}

return pa

}

void main(void)

{

node a[10]={{3},{4},{2},{1},{9},{6},{5},{0},{10},{6}},*head=a, *p;

int i,x;

for(i=0i<9i++)

a[i]next=&a[i+1]

a[9].next=NULL

cout<<"输入x的值:"

cin>>x;

head=change(headx)

p=head

while(p){

cout<>data<<'\t'

p=p>next;

}

cout<


}

一、选择题

21.C

22.B

23.D

24.D

25.C

26.B

27.A

28.C

29.A

30.D

二、填空题

(1)不同的参数类型或者参数类型

(2)抽象

(3)153

(4)3

(5)虚基类

(6)15

(7)20

(8)a4

(9)e3

(10)1

(11)s=120

(12)4

(13)33000

(14)1

(15)6

(16)1

(17)5 20

(18)5 10

(19)'\0'0

(20)n%2+'0';或n2+48

(21)strcmp(slq)==0或者!strcmp(slq)

(22)func(ns)

(23)i+=2i=i+2

(24)a[pn]=t

(25)px!=i+1或者px—i1

(26)a[px]=t

(27)p2=p2>nextp2=pl>next

(28)p2p2!=0

(29)p2>next


(30)p>next=NULLP>next=0P>next='\0

2007年秋

第一部分计算机基础知识

1 下面关于比特的叙述中,错误的是( 1 )

A.比特是组成数字信息的最小单位

B.比特只有“O”和“1”两个符号

C.比特既可以表示数值和文字,也可以表示图像和声音

D. 比特”1”总是大于比特“0

2 在下列有关集成电路的叙述中,错误的是 ( 2 )

A.现代集成电路使用的半导体材料主要是硅

B.大觑模集成电路一般以功能部件、子系统为集成对象

C.我国第2代居民身份证中包含有IC芯片

D• 目前超大规模集成电路中晶体管的基本线条已小到l纳米左右

3 在下列有关通信技术的叙述中,错误的是 ( 3 )

A.通信的基本任务是传递信息,因而至少需由信源、信宿和信道组成

B.通信可分为模拟通信和数字通信,计算机网络属于模拟通信

c.在通信系统中,采用多路复用技术的目的主要是提高传输线路龟利用率

D•学校的计算机机房一般采甩5类无屏蔽双绞线作为局域网的传输介质

4.下面是关于PC机主存储器的一些叙述,其中正确的是( 4 )

A.主存储器是一种动态随机存取存储器(RAM)

B.主存储器的基本编址单位是字(32个二进位)

C.目前市场上销售的PC机,其内存容量可达数十GB

D.所有PC机的内存条都是通用的:可以互换

5 现行PC机中,IDE(SATA)接口标准主要用于( 5 )

A.打印机与主机的连接 c.声卡与主机的连接

B.显示器与主机的连接 D.硬盘与主机的连接

6. 下列有关PC机的CPU、内存和主板的叙述中,正确的是( 6 )

A.大多数Pc机只存一块CPu芯片,即使是“双核”CPU也是一块芯片

B.所有Pentium系列微机的内存条相同,仅有速度和容量大小之分

C.主板上芯片组的作用是提供存储器控制功能,IO控制与芯片组无关

D.主板上CMOS芯片用于存储CMOS设置程序和一些软硬件设置信息

7.下列有关目前Pc机辅助存储器的叙述中,错误的是 ( 7 )

A.硬盘的容量越来越大,这是因为硬盘中磁盘碟片的数目越来越多

B.硬盘的内部传输速率一般小于外部传输速率

c.优盘采用Flash存储器技术,属于半导体存储器

D.目前常见COMBO光驱是一种将CD-RWDVD-ROM组合在一起的光驱

8.下面有关Windows操作系统,(95以后版本)的叙述中,错误的是 ( 8 )

AWindows操作系统支持系统中多个任务的并发执行

B.利用Whldows附件“系统工具”中的“系统信息”可以查看内存的工作情况

C.系统规定文件名最多由128个字符组成

DVistaMicrosoft公司推出的Windows XP操作系统的后继版本

9.算法设计是编写程序的基础。下列关于算法的叙述中,正确的是 ( 9 )

A 算法必须产生正确的结果 C 算法可以没有输出

B 算法必须具有确定性 D.算法的表示必须使计算机能理解

10.因特网使用TCPIP协议实现全球范围的计算机网络互连,连接在因特网上的每一台主机

都有一个IP地址。下面不能作为IP地址的是( 10 )

A 12034018 C 21183348

B. 201.256.39.68 D 37250680

11.常用局域网有以太网、FDDI网等,下面的叙述中错误的是 ( 11 )

A• 总线式以太网采用带冲突检测载波侦听多路访问(CSMA/CD)方法进行通信

B FDDI网和以太网可以直接进行互连

C• 交换式集线器比总线式集线器具有更高的性能,它能提高整个网络的带宽.

D• FDDI网采用光纤双环结构,具有高可靠性和数据传输的保密性

12.某用户在WWW浏览器地址栏内键入一个URLhttp://www.zdxy.cn/index.htm”,其中

的“/ndex.htm”代表( 12 )

A.协议类型 C.路径及文件名

B.主机域名 D.用户名

13.交换式以太网与总线式以太网在技术上有许多相同之处,下面叙述中错误的是( 13 )

A.使用的传输介质相同 C.传输的信息帧格式相同

B.网络拓扑结构相同 D.使用的网卡相同

14.下面是关于我国汉字编码标准的叙述,其中正确的是 ( 14 )

AUnicode是我国最新发布的也是收字最多的汉字编码国家标准

B.不同字型(如宋体、楷体等)的同一个汉字在计算机中的内码不同

C.在GBl8030汉字编码标准中,共有2万多个汉字

DGBl8030GB2312GBK汉字编码标准不能兼容

15.数字图像的文件格式有多种,下列哪一种图像文件能够在网页上发布且可具有动画效

( 15 )

ABMP BGIF CJPEG DTIF

16.声卡是获取数字声音的重要设备,.在下列有关声卡的叙述中,错误的是

A.声卡既负责声音的数字化(输入),也负责声音的重建(输出)

B.声卡既处理波形声音,也负责MIDI音乐的合成

C.声卡中的数字信号处理器(DSP)在完成数字声音编码、解码及编辑操作中起着重

要的作用

D.因为声卡非常复杂,所以它们都被做成独立的PCI插卡形式

17.彩色图像所使用的颜色描述方法称为颜色模型。显示器使用的颜色模型为RGB三基色模

型,PAL制式的电视系统在传输图像时所使用的颜色模型为

AYUV BHSB CCMYK

18.在信息系统的结构化生命周期开发方法中,绘制E-R图属于( 18 )阶段的工作

A.系统规划 B 系统分析

C.系统设计 D 系统实施

19.在下列有关Microsoft Word 20002003(中文版)功能的叙述中,( 19 )

A.起始页的页码可以不为1

B.利用菜单命令,可更改所选英文文本的大小写

C.利用菜单命令“字数统计”,可以统计出当前文档的行数和段落数

D.表格中的数据不可排序,也不能利用公式进行统计计算

20.在下列有关Microsoft PowerPoint (中文版)功能的叙述中,错误的是( )

A.可通过“另存为”操作,将每张幻灯片保存为一个图片文件

B.幻灯片的大小是固定的,用户不可以对其进行设置

C.在排练计时的基础上,可以将幻灯片设置为循环放映

D.可以对字体进行替换,例如将幻灯片中的“宋体”替换为“楷体”

Visual C-I-+笔试试卷

第二部分Visual C++语言程序设{

一、选择题(用答题卡答题,答案依次填在2130答题号内)

21.设有说明语句:int de

以下选项中,存在语法错误的是21

Ad=9+e==d+2 Bd=e+=2 Cf=g+f=j*k++ D.(++d)++;

22.设有函数调用语句:fun((x1x2)x3(x4x5x6));

该函数调用中实参的个数是22

A2 B3 C. 5 D.6

23.以下对二维数组的说明中,存在语法错误的是23

Aint a[][3]={321123} Bint a[][3]={{3,2,1},{1,2,3}}

Cim a[2][3]={1} Dint a[2][]={{32l}{123}};

24.以下选项中,存在语法错误的是24

Afloat x&j=x Bint c&d=c&e=d

Cchar b, &k=b Dint f&gg=f

25.下述关于抽象类的描述中,错误的是25

A.可以通过在类中定义纯虚函数的方式定义抽象类

B 不可以创建抽象类的对象

C 不可以创建抽象类的引用

D.可以创建抽象类的指针

26.下列有关函数缺省参数的描述中,正确的是26

A:设置了缺省值的参数左边不允许出现没有指定缺省值的参数

B.同一个函数在同一个文件中可以提供不同缺省参数值

C.参数缺省值要设置在函数定义语句中,不能设置在函数说明语句中

D. 一个函数具有缺省值的参数只能有一个 |

27.在以下选项中,C++语言不能重载的运算符是27

A? B+ C[] D.<=

28.假设a是类E的对象,执行语句:

E b=a

则要调用类E中的28

A.缺省构造函数 Boperator=()函数

c.拷贝构造函数 D.对象之间的赋值

29.已知在函数set中,语句this>ff=5;与语句ff=5;的效果完全相同。根据这一结

论,以下叙述中不正确的是29

Aff是某个类的数据成员,Set是该类的友元函数

Bff是某个类的数据成员,Set是该类的成员函数

CSet不是该类的静态成员函数

Dff不是该类的常成员数据

30.以下对派生类的描述中,不正确的是30

A.一个派生类可以作为另一个派生类的基类

B.派生类至少有一个基类

C.派生类的成员除了它自己的成员以外,还包含它的基类的成员

D.派生类中,从基类继承来的成员的访问权限在派生类中保持不变

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题(5)

1.重载函数必须有不同的参数个数或(1 )

2.在派生类中如果没有重载基类中的纯虚函数,则该派生类是(2 )

3.设有以下程序:

#include

#define S(X) X*X

void main(void)

{

int k=2

cout<<++S(k+k)<<'\n'

}

执行该程序后,输出的结果为( 3n ) k的值为( 4 )

4.在多重派生中,若要使公共基类在派生类中只有一个拷贝,则必须将该基类说明

( 5 )

●阅读程序题(13)

5[程序](2)

#include

void main(void)

{

static int a[7]={1}ij

for(i=1i<=6i++)

for(j=ij>0j--)

a[j]+=a[j-1]

for(j=0j<7j++)

cout<

}

程序输出第三行是__6_____,第四行是_____7_______

6[程序](3)

#includeh>

void main(void)

{

char s[]="I am a studentYou are a student too."

int a[26]={0}

char *P=s

while(*P++!='A' && *P<='Z') a[*p-'A']++

else if(*P>='a' && *P<='z') a[*p-'a']++;

}

for(int i=0i<26i++)

if(a[i]!=0) cout<<(char)(i+'a')<<""<

}

程序的第一行输出为 ( 8 ) ,第三行输出为 ( 9 )

7[程序](2)

#includeh>

int f(int n)

{

int s=1

if(n==1)

s=1

else{

if(n==3) cout<

s=n*f(n-1)

}

return s

}

void main(void)

{

int s

s=f(5)

cout<<"s="<

}

程序的第一行输出为( 10 ),第二行输出为( 11 )

8.[程序](2)

#include

char *f( char *s)

{

for(char *p=s, *q=s; *q=*p;p++)

if(*q>='0' && *q<='9') q++;

return s;

}

void main(void)

{

char s1[]="It's 4 p.m.", s2[]="3=3000毫米";

cout<

cout<

}

程序输出的第一行是( 12 ),第二行是( 13 )

9[程序]3)

#include

void main(void)

{

int a[10]={73868928876988846490}

int b[4]={607090101}

int c[4]={0}

for(int i=0i<10i++){

int j=0

while(a[i]>=b[j])

j++

c[j]++

}

for(i=0i<4i++)

cout<

cout<

}

程序输出的第一行是__________,第三行是_____________,最后一行是_________

10[程序](2)

#include

class A{

int a

public

void seta(int aa){a=aa}

virtual void print() //第六行

{cout<}

}

class Bpublic A{

int b

public

void setb(int bb){b=bb;}

void print()

{cout<}

}

void main(void)

{

A a*P

B b

a.seta(5)

b.seta(10)

b.setb(20)

P=&a

P->print()

P=&b

P->print()

}

程序输出的是( 17 )。如果在第六行中去掉Virtual,则程序输出的是( 18 )

11. 一个数的各位数字倒过来所得到的新数叫原数的反序数.如果一个数等于它的反序数,则称它为对称数或回文数。求10000—11000之间的二进制对称数

算法说明:先将正整数n的二进制字符形式放在字符数组s2中,二进制字符形式的反序放在字符数组s1中,然后,比较这两个字符串,若相等,则是二进制对称数

#include

#include

int func(int n, char *s1)

{

char ch, s2[33], *p,*q;

p=s1; q=s2+32;

*q- -=( 19 )

while(n){

ch=( 20 ) //n的最低二进制位的字符表示形式

n/=2;

*p++=ch;

*q- -=ch;

}

*p=0;

q++;

if( 21 ) return true;

else return false;

}

void main(void)

{

char s[33]={0};

int count=0;

cout<<”二进制对称数如下:\n”;

for(int n=10000; n<11000; n++)

{

if( 22 ){

cout<<”n=”<二进制形式为:”<

count++;}

}

cout<<”对称数的个数为:”<

}

12.以下程序中的函数fun(int *a, int n)的功能是:把形参a所指向的数组中的最小值放在a[0]中,接着把形参a所指数组中的最大值放在a[1]中;把a所指数组中的次小值放在a[2]中,把a所指数组中的次大值放在a[3]中,其余依次类推,直至将数组中数据依次处理完为止

例如:把a所指向数组中的数据最初排列为:5,1,3,2,9,7,6,8,4.按以上规则移动数组中的数据后,数据的排列为:1,9,2,8,3,7,4,6,5

#include

#define N 9

void fun(int *a, int n)

{

int max, min, px, pn, t;

for( int i=0; i

max=min=a[i];

px=pn=i;

for(int j=i+1; j

if(max

max=a[j];

px=j;

}

if(min>a[j]){

min=a[j];

pn=j;

}

}

if(pn!=i){

t=a[i];

a[i]=min;

____24_____

if(px==i) px=pn;

}

if( 25 ){

t=a[i+1];

a[i+1]=max;

( 26 )

}

}

}

void main(void)

{

int b[N]={5,1,3,2,9,7,6,8,4};

cout<<”数组中的数据依次为:”<

for(int i=0; i

cout<

cout<

fun(b,N);

cout<<”处理后数组中的数据依次为:”<

for(i=0; i

cout<

cout<

}

13.下列程序中的函数change(node *paint x)的功能是:调整pa指向的链表中结点的

位置。根据参数X的值,使链表中各结点数据域小于X的结点放在链表的前半部,大于等于x

的结点放在链表的后半部,并将X插人这两部分结点之间。

例如,原链表上各结点的数据依次为:34219650106

输入:X=7

经插入新结点后,新链表的各结点数据依次为:342165067910

[程序](4)

#include h>

struct node{

int data

node *next;

}

node *change(node *paint x)

{

node *pl*p2*P*q;

pl=p2=pa

p=new node //生成新结点

p->data=x

while(p2>data>next!=0){ //找到x应插入的位置

pl=p2

( 27 )

}

if(p2>next!=0)

p>next=p2 //插入以X为数据域的结点

pl>next=p

q=pl

while( 28 ){ //通过循环,将插入结点之后所有数据域小于x的结点前移

if(p2>data//数据域小于x的结点插入以x为数据域的新结点之前

pl>next=( 29 )

p2>next=p;

q>next=p2;

q=p2

p2=pl>next;

}

else

{

pl= p2

p2=p2>next

}

}

}

else{ //如果链表中所有结点数据域均小于x,则在链尾插入以x为数据域的新结点

p2>next=p

( 30 )

}

return pa

}

void main(void)

{

node a[10]={{3},{4},{2},{1},{9},{6},{5},{0},{10},{6}},*head=a, *p;

int i,x;

for(i=0i<9i++)

a[i]next=&a[i+1]

a[9].next=NULL

cout<<"输入x的值:"

cin>>x;

head=change(headx)

p=head

while(p){

cout<>data<<'\t'

p=p>next;

}

cout<

}

参考答案

、选择题

21.C

22.B

23.D

24.D

25.C

26.B

27.A

28.C

29.A

30.D

二、填空题

(1)不同的参数类型或者参数类型

(2)抽象

(3)153

(4)3

(5)虚基类

(6)15

(7)20

(8)a4

(9)e3

(10)1

(11)s=120

(12)4

(13)33000

(14)1

(15)6

(16)1

(17)5 20

(18)5 10

(19)'\0'0

(20)n%2+'0';或n2+48

(21)strcmp(slq)==0或者!strcmp(slq)

(22)func(ns)

(23)i+=2i=i+2

(24)a[pn]=t

(25)px!=i+1或者px—i1

(26)a[px]=t

(27)p2=p2>nextp2=pl>next

(28)p2p2!=0

(29)p2>next

(30)p>next=NULLP>next=0P>next='\0'


2008

、选择题(用答题卡答题,答案依次填在21~30答题号内)

21. 下述关于switch语句的描述中,正确的是________

A. switch语句中的default子句可以没有,也可以有多个

B. switch 语句中的每个子句中必须有break语句

C. switch语句中的default子句只能放在最后

D. switch语句中的子句后面的表达式只能是整型表达式

22. 下列函数原型说明中,错误的是________

A. int &f1( ) B.int f2(double=5);

C. void f3(void (*p)( )) D.int f4(int a=0,int b)

23.设有说明语句: float y=5.16347 ;int x; 则以下表达式中,可以实现将中的数值保留小数点后2位,第三位四舍五入的表达式是________

A. y=(y*100+0.5)/100.0 B.x=y*100+0.5,y=x/100.0

C.y=y*100+0.5/100.0 D.y=(y/100+0.5)*100.0

24.设有说明语句: char s[80]=”Hello” ; int a[20]={1,2} 下列选项中,存在语法错误的是________

A. cin>>s; B.cout< C. cin>>a; D. cout<

25. 下列关于运算符的叙述中,不正确的是________

A. 使用运算符new创建对象时必须定义初始值

B. 使用运算符new创建对象时会调用类的构造函数

C. 运算符new可以用来动态创建对象和对象数组

D. 使用new运算符创建的对象可以使用运算符delete撤销

26.若有说明语句: int s[4][6], t[6][4], (*p)[6]; 则以下选项中,正确的是________

A. p=t B. p=s C. p=s[0] D. p=t[0]

27.以下叙述中不正确的是_________

A. 在函数内的复合语句中定义的变量在本函数范围内有效

B.形式参数是局部变量

C在函数内定义的变量只在本函数范围内有效

D.在不同函数中可以使用相同名字的变量

28.以下有关抽象类的叙述中,不正确的是______

A.抽象类至少含有一个纯虚函数

B.抽象类至少含有一个没有函数体的虚函数

C.在抽象类的派生中可以提供纯虚函数的实现代码

D.可以说明抽象类的对象

29.下列关于构造函数的描述中,不正确的是______

A.构造函数可以设置缺省函数

B.构造函数在定义类的对象是自动执行,但不能显式调用

C.构造函数可以对静态成员进行初始化

D.构造函数可以重载

30.设有类定义

class B{

public:

void G(float x=0){cout<

void G(double x){cout<

}r;

则在以下选项中,存在语法错误的是_________

A .r.G(); B.r.G(10) C.r.G(3.14) D.r.G(-1.0f);

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

基本概念题(5)

1.在构造函数和析构函数中,可以定义为虚函数的是 (1)

2.若有语句说明:float a[]={1,2,3,4,5,};int b=&a[3]-&a[0];则执行以上语句后,b的值为 (2)

3.C++中,重载运算符“=”只能用在 (3) 函数中实现,而重载插入运算符和提取运算符只能用在 (4) 函数中实现。

4.e是表达式,其类型可以是:floatdoubleintcharenumC++中规定,在开关语句中switch(e)中,e的值类型不能是 (5)

阅读程序题

5[程序]

#include

int fun(int);

void main(void)

{

int a=2;

for(int i=0;i<3;i++) cout<

}

int fun(int a)

{

int b=0;

static int c=3;

return (b++,c++,a+b+c);

}

程序输出的第二行是__(6)____,第三行是__(7)___

6. [程序] 2 分)

#include

void ff(int &m,int &n)

{

int t=m+n;

m=n; n=t;

}

void main(void)

{

int a,b,i;

for(a=b=i=1;i<=5;i++){

ff(a,b);

cout<

}

}

程序输出的第二行是__(8)___,第四行是 __(9)______

7. [程序] 2 分)

#include

void f1(int n,int &i,chars[])

{

S[i]=’0’+n%10;

n=n/10; i++;

if(n==0) s[i]=0; else f1(n,i,s);

}

void f2(int n,int i,char s[])

{

if(n) {

int k;

k=n%10;

f2(n/10,i+1,s);

s[i]=’0’+k;

}

}

void main(void)

{

char s[20];

int i=0;

f1(24675,i,s);

s[i]=0;

cout<<”s=”<

static char s1[20];

f2(1357,0,s1);

cout<<”s1=”<

}

程序输出的第一行是__(10)____,第二行是___(11)____

8. [程序] 2 分)

#include

char *f(char *s1,char *s2)

{

char *p,*p1;

int n=0;

while(*(s1+n)) n++;

char *buf=new char[n+1];

p=buf; p1=s1;

while(*p++=*p1++);

p=s1; p1=s2;

while(*p++=*p1++);

cout<

p--;p1=buf;

while(*p++=*p1++);

delete[]=buf;

return s1;

}

void main(void)

{

char s1[30]=”about”,s2[]=”time”;

cout<

}

程序输出的第一行是___(12)__,第二行是 __(13)______

9. [程序]3 分)

#include

int fun(int x,int y)

{

cout<

return (x>y?x:y);

}

void main(void)

{

int a=3,b=6,k=4,m;

m=fun(fun(a,b),fun(b,k));

cout<<”m=”<

}

程序输出的第一行是___(14)_____,第三行是 _(15)_______,第四行是___(16)___

10. [程序] 2 分)

#include

class Base

{

public:

void virtual f() {cout<<”Base::f()”<

void virtual g() {cout<<”Base::g()”<

};

class A:public Base

{

public:

void f(int a=0) {cout<<”A::f()”<

};

class B:public A

{

void f(){cout<<”B::f()”<

void g(){cout<<”B::g()”<

};

void main(void)

{

B b;

Base *p=&b;

A *q=&b;

p->f(); p->g();

q->f(); q->g();

}

程序输出的第一行是___(17)___,第三行是__(18)______

完善程序题,共12

11. 下面的程序功能是:将一个字符串中的单词分行输出。例如,对字符串;”What is your name?”执行程序后,输出结果为:

What

is

your

name?

[程序] 4 分)

#include

char *nextWord(char **pp)

{

static char word[81];

while(**pp==’ ’) __(19)______;

char *pw=word;

while(**pp&&**pp!=’ ’)

*pw++=*(*pp)++;

____(20)____;

return ___(21)___;

}

void main(void)

{

char s[]=”What is your name?”,*ps=s;

do{

cout<

}while(*ps);

}

12、以下程序的功能是:二维数组a 中每列元素都是从小到大有序排列的,将一维数组b 中的元素依次插入到数组a 的每列中,并保持a 中每列数据的有序性。最后将执行插入操作后的数组a 以矩阵形式输出。例如,

原数组a 为: 1 3 2 数组b 为:2 7 1 操作后的数组a 为:1 3 1

4 6 8 2 6 2

8 9 10 4 7 8

[程序] 4 分) 8 9 10

#include

#include

#define ROW 4

#define COL 3

void f(int a[][COL],int b[])

{

int i,j;

for(__(23)___){

for(j=ROW-1;j>0;j--)

if(a[j-1][i]>b[i])

____(24)____;

else break;

__(25)_____;

}

}

void main(void)

{

int a[ROW][COL]={1,3,2,4,6,8,8,9,10};

int b[COL]={2,7,1};

cout<<”插入前数组中的数据依次为:”<<’\n’;

for(int i=0;i

for(int j=0;j

cout<

}

cout<

___(26) _;

cout<<”插入后数组中的数据依次为:”<<’\n’;

for(i=0;i

for(int j=0;j

cout<

}

}

13. 在以下程序中,函数CreateLink()根据键盘输入的整数建立一条单向无序链表,链表上的每一个结点包含一个整数;函数SortLink()通过改变结点在链表中的位置将链表调整为一条有序链表,函数PrintLink()将链表上的整数依次输出;函数DeleteLink()将链表删除。

[程序] 4 分)

#include

struct .node{

int data;

node *next;

};

node *CreateLink(void) //创建无序链表

{

node *p1,*p2,*head=0;

int a;

cout<<”产生一条无序链,请输入数据,以-1结束:”;

cin>>a;

while(a!=-1){

p1=new node; p1->data=a;

if(head==0) {

head=p1; p2=p1;

}

else {

___(27)___;

p2=p1;

}

cout<<”请输入数据,以-1结束:”;

cin>>a;

}

p2->next=0;

return (head);

}

void SorLink(node *&head) //通过移动每个节点的指针来完成链表排序

{

node *q,*tq,*p,*tp;

int flag=0;

if (!head) return;

for(q=head,tq=0;q;q=q->next){

for(tp=q,p=q->next;p;tp=p,p=p->next)

if (q->data>=p->data) {

//pq指向的两个节点所处位置互换

__(28)____

p->next=q;

q=p; p=tp;

}

if(!tq) head=q; else tq->next=q;

tq=q;

}

}

void PrintLink(node *head) //打印链表

{

node *p=head;

cout<<”链上各结点的数据为:\n” ;

while(p!=NULL) {

cout<data<<’\t’;

__(29)___;

}

cout<<”\n”;

}

void DeleteLind(node *head) //删除链表

{

node *p1;

while(head){

p1=head;

head=head->next;

___(30)___;

}

}

void main(void)

{ node *head=0;

head=CreateLink(); PrintLink(head);

SortLink(head); PrintLink(head);

DeleteLink(head); }

2008春参考答案

一、选择题

二、填空题


2008

、选择题(用答题卡答题,答案依次填在21~30答题号内

21. 以下关于逻辑运算的描述中,正确的是________

A. 所有的逻辑运算都是双目运算,其优先级相同

B. 逻辑运算中存在双目运算和单目运算,其优先级相同

C. 所有的逻辑运算都是双目运算,其优先级各不相同

D. 逻辑运算中存在双目运算和单目运算,其优先级各不相同

22. 对于whiledo…while循环语句,以下描述正确的是________

A. do…while语句中的循环体至少执行一次 B. 两个语句中循环体可能都不执行

C. while语句中的循环体至少执行一次 D. 两个语句中的循环体至少执行一次

23. 以下说明语句中,不存在语法错误的是 ________

A. char s1[4]={“a”,”b”,”c”}; B. char s2[4]={‘a’,’b’};

C. char s3[]={‘I am a student’}; D. char s4[14]={“I am a student”};

24. 设变量a,b,c为整型变量,以下选项中存在语法错误的是________

A. c=a+++b; B. c=a+b++; C. c=b++=c++; D. c=++a=b++;

25. 设有程序段:

x=-1;

if(a!=0) {if(a>0) x=1;} else x=0;

该程序段表示的数学函数关系是________

-1 (a<0) 1 (a<0)

A. x= 0 (a=0) B x= -1 ( a=0)

1 (a>0) 0 (a>0)

0 (a<0) -1 (a<0)

C. x= -1 (a=0) D x= 1 ( a=0)

1 (a>0) 0 (a>0)

26. 以下关于两个同类型指针变量的叙述中,在一定条件下,运算结果没有实际意义的是________

A. 两个指针变量可以互相赋值 B. 两个指针变量进行比较运算

C. 两个指针变量进行减法运算 D. 两个指针变量进行加法运算

27. 下列有关构造函数的叙述中,正确的是________

A. 类的构造函数不能重载 B. 任何一个类必定有构造函数

C. 可以定义没有构造函数的类 D. 任何一个类必定有一个缺省的构造函数

28. C++中运算符重载可以改变________

A. 运算符的优先级 B. 运算符的结合性

C. 运算符实现的功能 D. 运算符的操作数的个数

29. 以下关于基类指针和派生类指针的叙述中,不正确的是________

A. 基类指针可以指向它的公有派生类的对象

B. 基类指针可以指向它的多次派生后的派生类的对象

C. 派生类的指针不能指向基类的对象

D 若基类指针指向派生类的对象,通过该基类指针可以访问派生类对象的所有成员

30. 以下关于友元函数的叙述中,正确的是________

A. 友元函数不能访问类的私有成员

B. 友元函数破坏了类的封装性和隐藏性

C. 友元函数的使用与类的成员函数相同

D. 友元函数的实现必须在类的说明中定义

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

基本概念题,共5

1. 设有语句:int a=5,b=6,c;c=!a&&b++;执行以上语句后,变量b的值为_ (1 )

2. 在定义派生类时,如果没有指定基类的派生(继承)方式,则缺省(默认)的继承方式是_ _(2)

3. C++中编译预处理包括:文件包含、宏和_ _(3)

4. 要将一个函数定义为内联函数时,通常在定义函数时使用关键字_ _(4)

5. C++中表达式:”I am a student”的值为该字符串的_ _(5)

阅读程序题,共13

6. [程序] 2 分)

#include

void f(int a[])

{

int t=a[0];

a[0]=a[1]; a[1]=t;

cout<

}

void main(void)

{

int b[2]={300,500};

f(b);

cout<

}

程序输出的第一行为 _(6) ,第三行为 _(7)

7. [程序] 2分)

#include

int fa(int a)

{

static int m=1;

m=a*m;

return m;

}

void main(void)

{

for(int i=2;i<=4;i++)

cout<

}

程序输出的第一行为 _(8) ,第三行为 _(9)

8. [程序] 2 分)

#include

int f1(int a[3][3])

{

int sum=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++) {

if(a[i][j]>0) continue;

sum+=a[i][j];

}

return sum;

}

int f2(int a[3][3])

{

int sum=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++) {

if(a[i][j]<0) break;

sum+=a[i][j];

}

return sum;

}

void main(void)

{

int b[3][3]={{1,2,3},{7,-12,-13},{-20,9,-5}};

int s1,s2;

s1=f1(b); s2= f2(b);

cout<

cout<

}

程序输出的第一行为 _(10) ,第二行为 _(11) _

9. [程序] 3 分)

#include

int f(int x[],int n)

{

if(n==1) x[n]=3;

else x[n]=n+f(x,n-1);

cout<

return x[n];

}

void main(void)

{

int b[5]={3,4,5,6,0};

f(b,3);

for(int i=0;i<5;i++)

cout<

cout<

}

程序输出的第一行是 _(12) ,第二行是 _(13) ,第三行是 _(14)

10. [程序]2 分)

#include

class A{

int x;

public:

A(int a) { x=++a;}

A(){cout<

int get( ){return x;}

};

class B:public A{

int y;

public:

B(int b):A(b ){y=get( )+b;}

B( ):A(5){ y=6; }

B(){cout<

};

void main(void)

{

B b( 5 );

}

程序输出的第一行是 (15) ,输出的第二行是 (16)

11. [程序] 2 分)

#include

class A{

int x;

public:

A(int x=0)

{ this->x=x;}

virtual void f(){cout<

};

class B:public A{

int y;

public:

B(int x,int y=1):A(x)

{

this->y=y;

}

void f(int a) {cout<

};

void main(void)

{

A a1(10),*pa;

B b1(20,30);

a1.f();

pa=&a1;

pa->f();

pa=&b1;

pa->f();

}

程序输出的第二行是 (17) ,输出的第三行是 (18)

完善程序题,共12

12. 以下程序的功能是:将两个字符串分别输入到s1 s2 中,并使s2中的字符按升序排列(用函数sort()实现排序)。然后,依次从s1中取一个字符插入到s2中,并使s2中的字符保持升序。函数insert(char *p,char c)的功能是将字符c插入到p所指向的字符串中,使p所指向的字符串保持升序。函数merge(char *p1,char *p2)依次从p2所指向的字符串中取出一个字符,并插入到p1所指向的字符串中。

[程序] 4分)

#include

#include

char *sort(char s[])

{

int len=strlen(s);

for(int i=0;i

for(int j=i+1;j

if( (19) ) {

char c=s[i];

s[i]=s[j];

s[j]=c;

}

return s;

}

void insert(char *p,char c)

{

char *p1=p;

int len=strlen(p);

while(*p1

char *p2=p+len;

while(p2>=p1) {

(20) ;

p2--;

}

(21) ;

}

char *merge(char *p1,char *p2)

{

while(*p2) {

(22) ;

p2++;

}

return p1;

}

void main(void)

{

char s1[100],s2[200],c;

cout<<”输入第一行字符串:”;

cin.getline(s1,100);

cout<<”输入第二行字符串:”;

cin.getline(s2,100);

cout<

sort(s2);

merge(s2,s1);

cout<

}

13. 以下程序中的功能是:通过重载运算符+、何=,分别实现一维数组(向量)的加法(对应元素相加)、减法(对应元素相减)和向量对象之间的赋值。例如,设a,b,c是类Arr的对象,a的成员x[]={1,1,1,1,1,1},b的成员x[]={2,2,2,2,2,2},执行:c=a+b后,c的成员x[]={3,3,3,3,3,3}.

[程序] 4分)

#include

class Arr{

float x[20];

int size;

public:

Arr(float a[],int n)

{

for(int i=0;i

size=n;

}

Arr()

{

for(int i=0;i<20;i++) x[i]=0;

size=0;

}

Arr operator+(Arr);

Arr operator-(Arr);

Arr &operator=(Arr&);

int GetArr(float y[])

{

for(int i=0;i

return size;

}

void print()

{

for(int i=0;i

cout<<’\n’<<”size=”<

}

};

Arr Arr::operator +(Arr a)

{

Arr tem;

for(int i=0;i

(23) ;

tem.size=size;

return tem;

}

Arr Arr::operator –(Arr a)

{

Arr tem;

for(int i=0;i

(24) ;

tem.size=size;

return tem;

}

Arr &Arr::operator=( (25) )

{

for(int i=0;i

x[i]=a.x[i];

size=a,size;

return (26) ;

}

void main(void)

{

float b1[6]={10,20,30,40,50,60};

float b2[6]={100,200,300,400,500,600},b3[6],b4[6];

Arr a1(b1,6),a2(b2,6),a3,a4;

a3=a1+a2; a4=a2-a1;

a3.print(); a4.print();

int n=a1.GetArr(b3);

for(int i=0;i

cout<<’\n’<

}

14、下面程序的功能是:首先建立一条链表,顺序从链表中找到data为最大值的结点,从链表中删除该结点,并将其值返回,最终删除整个链表,同时得到按降序排序的数组x。其中,函数Insert(int a,node *head)的功能是:用参数a产生一个新结点,将其插入链首,并返回链首指针。DeleteMax(node*&head)的功能是:从head所指向的链表中找到data值为最大的结点,从链表中删除该结点并将其结点值返回。

算法提示:当链表为空时,返回-1。在查找的过程中,始终让pmax指向当前data值为最大的结点,并让pmax1指向pmax的前一个结点。找到data值为最大的结点后,将其从链表中删除,并返回其data值。

[程序] 4 分)

#include

struct node{

int data;

node *next;

};

node *Insert(int x,node *head)

{

node *p=new node;

p->data=x;

(27)

Head=p;

return head;

}

int DeleteMax(node *&head)

{

node *p1,*p2,*pmax,*pmax1;

int max;

p1=p2=head;

if(!head) return -1;

max=p1->data;

pmax=p1;

while(p1) {

if(maxdata) {

max=p1->data;

pmax=p1; pmax1=p2;

}

p2=p1;

(28)

}

if(pmax==head) head=head->next;

else (29) ;

delete pmax;

return max;

}

void main(void)

{

int a;

int x[200],count=0;

node *head=0;

cin>>a;

while(a!=-1){

head=Insert(a,head);

cin>>a; }

while(head){

x[count]= (30) _;

count++;

}

for(int i=0;i

cout<

cout<

}

2008秋参考答案

一、选择题

二、填空题


2009年春试

卷语种: Visual C++

第一部分计算机基础知识

1. 在下列有关现代信息技术的一些叙述中,正确的是 1

A.集成电路是20世纪90年代初出现的,它的出现直接导致了微型计算机的诞生

B.集成电路的集成度越来越高,目前集成度最高的已包含几百个电子元件

C.目前所有数字通信均不再需要使用调制解调技术和载波技术

D.光纤主要用于数字通信,它采用波分多路复用技术以增大信道容量‘ .

2. 最大的10位无符号二进制整数转换成八进制数是 2 .

A.1023 B.1777

C.1000 D.1024

3. 在下列有关目前PCCPU的叙述中,错误的是 3

A.CPU芯片主要是由Intel公司和AMD公司提供的

B."双核"是指PC机主板上含有两个独立的CPU芯片

C.Pentium 4微处理器的指令系统由数百条指令组成

D.Pentium 4微处理器中包含一定容量的Cache存储器

4. 在下列有关当前PC机主板和内存的叙述中,正确的是 4

A.主板上的BIOS芯片是一种只读存储器,其内容不可在线改写

B.绝大多数主板上仅有一个内存插座,因此PC机只能安装一根内存条

C.内存条上的存储器芯片属于SRAM(静态随机存取存储器)

D.目前内存的存取时间大多在几个到十几个ns(纳秒)之间

5. 在下列有关PC机辅助存储器的叙述中,正确的是 5

A.硬盘的内部传输速率远远大于外部传输速率

B.对于光盘刻录机来说,其刻录信息的速度一般小于读取信息的速度

C.使用USB 2.0接口的移动硬盘,其数据传输速率大约为每秒数百兆字节

D.CD-ROM的数据传输速率一般比USB 2.0还快

6. 在下列PCI/O接口中,数据传输速率最快的是 6

A.USB 2.0 B.IEEE-1394

C.IrDA (红外) D.SATA

7. 计算机软件可以分为商品软件、共享软件和自由软件等类型。在下列相关叙述中,错误的是 7

A.通常用户需要付费才能得到商品软件的使用权,但这类软件的升级总是免费的

B.共享软件通常是一种"买前免费试用"的具有版权的软件

C.自由软件的原则是用户可共享,并允许拷贝和自由传播

D.软件许可证是一种法律合同,它确定了用户对软件的使用权限

8. 人们通常将计算机软件划分为系统软件和应用软件。下列软件中,不属于应用软件类型的是 8

A.AutoCAD B.MSN C.Oracle D.Windows Media Player

9. 在下列有关Windows 98/2000/XP操作系统的叙述中,错误的是 9

A.系统采用并发多任务方式支持多个任务在计算机中同时执行

B.系统总是将一定的硬盘空间作为虚拟内存来使用

C.文件()名的长度可达200多个字符

D.硬盘、光盘、优盘等均使用FAT文件系统

10. 在下列有关算法和数据结构的叙述中,错误的是 10

A.算法通常是用于解决某一个特定问题,且算法必须有输入和输出

B.算法的表示可以有多种形式,流程图和伪代码都是常用的算法表示方法

C.常用的数据结构有集合结构、线性结构、树形结构和网状结构等

D.数组的存储结构是一种顺序结构

11•因特网的IP地址由三个部分构成,从左到右分别代表 11

A.网络号、主机号和类型号

B.类型号、网络号和主机号

C.网络号、类型号和主机号

D.主机号、网络号和类型号

12•在下列有关ADSL技术及利用该技术接入因特网的叙述中,错误的是 12

A.从理论上看,其上传速度与下载速度相同

B.一条电话线上可同时接听/拨打电话和进行数据传输

C.利用ADSL技术进行数据传输时,有效传输距离可达几公里

D.目前利用ADSL技术上网的计算机一般需要使用以太网网卡

13.人们往往会用"我用的是10M宽带上网"来说明白己计算机连网的性能,这里的"10M"

指的是数据通信中的 13 指标。

A.最高数据传输速率

B.平均数据传输速率

C.每分钟数据流量

D.每分钟IP数据包的数目

14•计算机局域网按拓扑结构进行分类,可分为环型、星型和 14 型等。

A.电路交换

B.以太

C.总线

D.对等

15.网络信息安全主要涉及数据的完整性、可用性、机密性等问题。保证数据的完整性就是

A.保证传送的数据信息不被第三方监视和窃取

B.保证发送方的真实身份

C.保证传送的数据信息不被篡改

D.保证发送方不能抵赖曾经发送过某数据信息

16.某计算机系统中,西文使用标准ASCII码、汉字采用GB2312编码。设有一段纯文本,其机内码为CB F5 DO B4 50 43 CA C7 D6 B8,则在这段文本中含有: 16

A.2个汉字和1个西文字符

B.4个汉字和2个西文字符

C.8个汉字和2个西文字符

D.4个汉字和1个西文字符

17.以下关于汉字编码标准的叙述中,错误的是 17

A.GB 2312标准中所有汉字的机内码均用双字节表示

B.我国台湾地区使用的汉字编码标准BIG 5收录的是繁体汉字

C.GB 18030汉字编码标准收录的汉字在GB 2312标准中一定能找到

D.GB 18030汉字编码标准既能与UCS(Unicode)接轨,又能保护已有中文信息资源

18.若波形声音未进行压缩时的码率为64kb/s,已知取样频率为8kHz,量化位数为8,那么它的声道数是 18

A.1 B.2 C.4 D.8

19.从信息处理的深度来区分信息系统,可分为业务处理系统、信息检索系统和信息分析系统等。在下列几种信息系统中,不属于业务处理系统的是 19

A.DSS B.CAI C.CAM D.OA

20.在下列有关信息系统开发、管理及其数据库设计的叙述中,错误的是 20

A.常用的信息系统开发方法可分为结构化生命周期方法、原型法、面向对象方法和CASE方法等

B.在系统分析中常常使用结构化分析方法,并用数据流程图和数据字典来表达数据和处理过程的关系

C.系统设计分为概念结构设计、逻辑结构设计和物理结构设计,通常用E-R模型作为描述逻辑结构的工具

D.从信息系统开发过程来看,程序

第二部分Visual C++语言程序设计

21.下列关于"for(e1;e2;e3) s1;"的描述中不正确的是______

A.存在"for(;;) s1;"的情况 B.表达式e1e3可为空,e2不能为空

C.表达式e2的值可增可减 D.循环体s1可以为空,但分号(;)必须有

22.下列函数定义中存在语法错误的是______

Avoid f5();f6(){f5;cout<<200;} void f5(){cout<<100;}

Bvoid f3(){cout<<100;} void f4(){tout<<200;}

Cvoid f7(int a){if(a)f7(--a);cout<””;}

Dvoid f1(){cout<<100;void f2(){tout<<200;}}

23.设有说明语句;

int a=7,b=12,e;

以下表达式选项中,e值为2的是_______

Ae=b%=(a-a%5) Be=b%=(a%=5)

Ce=b%=b+1-a%5 De=(b%=a)-(a%=5)

24.以下叙述中不正确的是_____

A.一个函数中可以有多个return语句 B.一个函数中可以没有return语句

C.一个return语句可返回多个值 D.一个return语句可不返回值

25.以下双目运算符中要求两个操作数均为整型的运算符是______

A|| B&& C/ D %

26.以下对break语句的描述中,不正确的是______

Abreak语句可用在循环语句中,其作用是结束本层循环的执行

Bbreak语句可用在switch语句中,其作用是结束该switch语句的执行

Cbreak语句可用在if语句中,其作用是结束该if语句的执行

Dbreak语句在同一循环体中可以多处使用

27.以下对类的析构函数的叙述中,正确的是______

A.析构函数完成类的初始化

B.析构函数完成对象的初始化

C.析构函数完成撤销对象的相关处理

D.析构函数和成员函数一样可以显式地调用

28.以下有关多态性的叙述中不正确的是________

AC++语言的多态性分为编译时的多态性和运行时的多态性

B.编译时的多态性通过重载函数来实现

C.运行时的多态性通过虚函数来实现

D.函数重载和虚函数均可实现编译时的多态性和运行时的多态性

29.设已定义了一个类名为MyClass的类:

MyClass sl*s2**s3*s4 E2];

当该语句执行后,调用该类的构造函数的次数是 _______

A1 B2 C3 D.5

30.在公有派生的情况下,派生类中定义的成员函数能访问其基类的_________

A.公有成员和保护成员 B.公有成员和私有成员

C.保护成员和私有成员 D.公有成员、保护成员和私有成员

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题(5)

1.以下循环语句的循环体的执行次数为 ( )

for(int s=0,j=1;j<=10;s+=j);j++;

2void类型的指针是其指向变量的数据类型是不固定的,对该类型指针进行操作时,通常应进行________

3.C++变量的存储类型有自动类型、静态类型、 _________________

4.c++函数的参数传递方式有三种: (_________) 、指针传递和引用传递。

●阅读程序题(13)

5.[程序](2)

#include

void fa(int&a,int&b)

{int t=a;a=b;b=t;}

void fb(int a,int b)

{ int t=a;a=b;b=t;}

void main(void)

{int c[2]={100,200},d[2]={300,400};

fa(c[0],c[1]); cout<

fb(d[0],d[1]); cout<<

}

程序输出的第一行是( ) ,第二行是( )

6.[程序](2)

#include

void main(void)

{ int n=0,m=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

if(j>=i)n++;m++;

cout<

}.

程序输出的第一行是( ) ,第二行是( )

7.[程序](2)

#include

int a=10;

void main(void)

{ int a=20,b=30;

{ int a=0,b=0;

for(int i=1;i<4;i++){

a=a+b;b=::a+b;

}

cout<程序输出的第一行是 ( ) ,第二行是( )

8.[程序](3)

#include

void f2(int x[],int n);

void fl(int x[],int n)

{ cout<

x[n]++;

if(n<3){n=n+2;f2(x,n);}

}

void f2(int x[],int n)

{cout<

x[n]++;

if(n<3){n=n+3;fl(x,n); }

}

void main(void)

{int y[7]={3,4,5,6,7,8,9};

f1(y,0);

for(int i=0;i<5;i++)cout<

cout<

}

程序输出的第一行是( ) ,第二行是( ) ,第三行是( )

9[程序](2)

#include

class A{

int n;

public:

static int s;

A(int a){n=a;}

void add(){s+=n;}

void print(){cout<

int get(){return n;}

};

int A::s=0;

class B:public A{

int y;

public:

B(int b,int c):A(c){y=b;}

void p(){cout<

};

void main(void)

{ A a1(10),a2(20);

B b1(5,15),b2(10,15);

a1.add();a2.add();b1.add();b2.add();

a1.print();a2.print();

b1.p();b2.p();

}

程序输出的第一行是( ) ,第三行是( )

10[程序](2)

#include

class A{

int x;

public:

A(int a){x=a;}

virtual void print(){cout<<"x="<

void fun(){print();}

};

class B:public A{

int y:

public:

B(int a,int b):A(a){y=b;}

void print(){cout<<"y="<

void fun(){print();}

};

class C:public B{

int z;

public:

C(int a,int b,int C):B(a,b){z=c;}

void print(){cout<<"z="<

void fun(){print();}

};

void main(void)

{ A a1(5),*p1;

B bl(10,15);

C c1(20,30,40);

a1.fun();b1.fun();c1.fun();

pl=&b1; pl->fun();p1=&c1;pl->fun();

}

程序输出的第四行是() ,第五行是( )

●完善程序题(12)

11.以下程序的功能是:采用插入排序的方法将数组s1中的元素升序排序,并删除重复的元

(值相同的元素只保存一个)。函数insert(int p[],int c,int x)将整数x插入到已排序

的数组P(并仍保持升序),参数c为数组P的元素个数。函数sort(int s[],int n)将数

s中的数据按升序排序。先将s[0]放到临时数组tern[0],然后,依次从s中取一个

元素,若该元素不在数组tem,则调用函数insert()将该元素插入到数组tern中。最后

将数组tem拷贝到数组s中。

[程序](4)

#include

void insert(int p[],int c,int x)

{ for(int i=0;i

if(p[i]>x)break;

if(i==c)_____________;

else{for(int J=c;j>i;j--)p[j]=P[j-1];________;}

}

int sort(int s[],int n)

{int tem[200];

int len,j,k;

tem[O]=s[O];

len=1 //len记录数组tern中的元素个数

for(j=1;j

for(k=0;k

if(s[j]==tem[k])_____________;

}

if(k>=len){

insert(_________);len=len+1;

}

}

for(j=0;j

retum len; //返回数组的大小

} ’

void main(void)

{int s1[200]={34,22,11,55,66,30,22,100,66};

int n;n=sort(s1,9);

for(int i=0;i

cout<<'\n';

}

12.以下程序通过重载运算符+*实现集合(用数组表示)的并(u),(n)运算。集

的元素不能相同。两个集合的并包含了两个集合的所有元素。两个集合的交仅包含

集合中共同存在的元素。设sl={1,2,3,4,5,6},s2={3,5,7,9,11}s1 u s2={1,

4,5,6,7,9,11},s1 n s2={3,5}

[程序](4)

#include

class Set{

float x[20];

int size;

public:

int In(float e,int n) //元素e已在集合x,则返回1,否则返回0

{ int flag=0;

for(int i=o;i

return flag;

}

Set(float a[],int n) ‘

{ x[0]=a[0];size=1;

for(int i=1;i

if(In(a[i],size)==0){

(________) ;

size++;

}

}

Set(){size=0;}

Set operator +(Set);

Set operator *(Set);

Set &operator =(Set&);

int GetSet(float y[])

{ for(int i=0;i

return size;

}

void print()

{ for(int i=0;i<

cout<<'\n'<<"size=”<

};

}

Set Set::operator +(Set a)

{ Set tem;

for(int i=0;i

tem.size=size;

for(i=0;i

if(tem.In(a.x[i]i,tern.size)==0)tem.x[tem.size++]=a.x[i];

return tem;

}

Set Set::operator *(Set a)

{ Set tem;

tem.size=0;

for(int i=0;i

if(a.In(x[i],a.size)==1)

tem.x[tem.size++]=x[i];

retum tem;

} Set &Set::operator =(Set &a)

{for(int i=0;i

(__________) ;

return *this;

}

void main(void)

{float b1[6]={1,2,3,4,5,6};

float b2[6]={3,5,7,9,11},b3[6];

Set a1(b1,6),a2(b2,5),a3,a4,a5;

a3=a1+a2;a3.print();

a5=a1*a2;a5.print();

int n=a1.GetSet(b3);

for(int i=0;i

cout<<'\n'<

}

13,以下程序的功能是:先产生一条带头结点(链表的第一个结点不存储数据,而是存储链表的

表长,即结点个数)的无序链表,每一个结点包含一个整数。然后将该链表分成两条带头结

点的链表:_条链表上的数据均为偶数,另一条链表上的数据均为奇数。函数Cleate()创建

了一条带有头结点的单链表。函数Print()输出链表上各结点的值。函数Split()把链表

分割成两条链表,值为奇数的结点保留在原链表上,值为偶数的结点移到另一个链表中,

并将指向偶数链表的头指针返回。

[程序](4)

#include

struct Node{

int data;

struct Node *next;

};

Node *Create(void) //创建一条带有头结点的单向链表

{ Node *p1,*head;

int a; //创建头结点,头结点的数据域储存链表的结点个数

head=new Node;

head->data=0;head->next=0

cout<<"创建一条无序链表,请输人数据,-l结束,\n";

cin>>a;

while(a!=-1){

p1=new Node;

pl->data=a;pl->next=head->next;

_________;

head->data++;

cin>>a

}

(___________) ;

}

void Print(Node *h)

{ h=h->next;

while(h){eoutnext;}

cout<

}

Node *Split(Node *&link) //link-个带头结点的单链表

{Node *pl=link*p2=link->next*head;

head=new Node;

head->data=0;head->next=0;

while(p2){

if(p2->data%2==O){

p1->next=p2->next;link->data--;

p2->next=head->next;

__________ ;

head->data++; p2=p1->next;

}

else{pl=p2; ___________;}

}

return(head);

}

void main(void)

{ Node *h1,*h2;

hl=Create(); cout<<"输入的链表为:"<

Print(h1);

h2=Split(h1); cout<<"分割后的奇数链表为:"<

Print(h1); cout<<"分割后的偶数链表为:"<

Print(h2);

}

一、选择题

21.B 22.D 23.A 24.C 25.D 26.C 27.C 28.D 29.A 30A

(1)无数次 (2)强制类型转换 (3)外部类型

(4)寄存器类型 (5)值传递 (6)200 100

(7)300 400 (8)6 (9)1

(10)30 30 (11)20 30 (12)3

(13)5 (14)8 (15)10 60

(16)15 60 5 (17)15 (18)40

(19)p[c]=xp[i]=x (20)p[j]=xp[i]=x (21)break

(22) tem,len,s[j] (23)x[i]==e (24)x[size]=a[i]

(25)tem.x[i]=x[i] (26) size=a.size (27) head->next=p1

(28)retum head (29)head->next=p2 (30)p2=p2->next


2009年秋

江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试
二级 Visual C++

(基础知识分为 I II 两类,考生选做其中的一类,且不需要在答题卡上标注类别)

第一部分  计算机基础知识

1.下列关于个人移动通信的叙述中,错误的是____

A.1代个人移动通信(简称1G)采用的通信技术是数字通信技术

B.目前广泛使用的GSM手机采用的通信技术属于第2代移动通信技术(简称2G)

C.3代移动通信技术(简称3G)将无线通信与互联网、多媒体通信相结合

D.3G有多个国际技术标准,其中也有我国自主制定的3G技术标准。

2.在下列有关集成电路的叙述中,正确的是2

A.现代集成电路所使用的半导体材料都是硅

B.所有的集成电路都是数字集成电路

C.Moore定律认为单块集成电路的集成度平均每年翻一番

D.Intel公司微处理器产品Core 2 Duo,其集成度已高达数千万个电子元件

3.与十六进制数AB等值的八进制数是3

A. 253 B.254 C.171 D.172

4.在下列有关PCCPU的叙述中,错误的是4

A.CPU中包含几十个甚至上百个寄存器,用来临时存放数据、指令和控制信息

B.所有PC机的CPU都具有相同的指令系统,因而PC机可使用相同的软件

C.一台计算机至少包含1CPU,也可以包含2个、4个、8个甚至更多个CPU

D.Intel公司是国际上研制和生产CPU的主要公司,我国也能生产CPU

5.在下列有关PC机主板上部件的叙述中,错误的是5

A.BIOS保存在主板上的一个闪存中,其内容在关机后通常不会改变

B.CMOS中保存有用户设置的开机口令,关机后主板上的电池继续给CMOS供电

C.启动CMOS设置程序可以重新设置CMOS中的数据,该程序是BIOS的组成部分

D.网卡通常集成在主板上,由主板上独立的IC实现其功能,与芯片组无关

6.PC机存储器的层次结构来看,下列存储器中存取速度最快的是6

A.Cache存储器 B.RAMROM C.寄存器 D.硬盘和优盘

7.在下列4PC机常用I/O接口中,数据传输速率最高的是7

A.PS/2 B.SATA C.IEEE-1394b D.USB 2.0

8.在下列有关I/O操作、I/O总线和I/O接口的叙述中,错误的是8

A.I/O操作的任务是在I/O设备与内存的指定区域之间传送信息

B.I/O总线传送的只能是数据信号,它不能传送控制信号和地址信号

C.不同类型的I/O接口,其插头/插座以及相应的通信规程和电气特性通常各不相同

D.并行总线的数据传输速率不一定比串行总线高

9.在下列有关PCI/0设备的叙述中,错误的是9

A.数码相机的成像芯片可以为CCD器件或CMOS芯片,目前大多数用CCD器件

B.平板式扫描仪的分辨率通常远远高于胶片扫描仪和滚筒式扫描仪

C.常见的宽屏液晶显示器的宽度与高度之比为16:9(16:10)

D.目前在银行、超市等商业部门一般采用针式打印机来打印存折和票据

10.在下列有关计算机软件的叙述中,错误的是10

A.程序设计语言处理系统和数据库管理系统被归类为系统软件

B.共享软件是一种具有版权的软件,它允许用户买前免费试用

C.机器语言和汇编语言与特定的计算机类型有关,取决于CPU

D.目前PC机只能使用Windows系列操作系统,均不能使用UNIXLinux操作系统

11.在下列常用的PC机软件中,编辑的文档(内容)能直接保存为图片类型(例如JPEG

文件类型)的是11

A.Microsoft Word B.Microsoft Excel

C.Microsoft PowerPoint D.Microsoft FrontPage

12.在下列关于以太网(局域网)的叙述中,错误的是12

A.在共享式以太网中,任何时间只允许一对计算机进行通信

B.在交换式以太网中,每台计算机均独享相同的带宽,其带宽仅由交换机决定

c.无论是共享式以太网还是交换式以太网,网络中的所有计算机都要安装以太网网卡

D.无论是共享式以太网还是交换式以太网,它们的数据帧和MAC地址格式均相同

13.连接在因特网上的每一台主机都有一个IP地址。下面不能作为IP地址的是13

A.211.256.49.68 B.21.18.33.48 C.120.34.0.18 D.37.251.68.0

14.为了将异构的计算机网络互相连接起来,必须使用的网络设备是14

A.调制解调器 B.以太网集线器 c.以太网交换机 D.路由器

15.下列网络协议中,与发送电子邮件有关的是15

A.Http B.FTP C.SMTP D.TELNET

16.在下列有关字符集及其编码的叙述中,错误的是16

A.基本的ASCII字符集共有128个字符,每个字符使用7个二进位进行编码

B.GB2312字符集中收录了6千多个汉字,每个字符在机内通常使用双字节编码

C.GBK字符集中的字符也采用双字节编码,且该字符集收录了部分繁体汉字

D.GB18030字符集中所有的字符均采用4字节编码,因此该字符集的代码空间很大

17.目前数码相机拍摄的照片在保存时通常采用的文件类型是17

A.BMP B.GIF C.JPEG D.TIF

18.MP3是数字波形声音的一种压缩编码文件格式,它采用的压缩编码标准属于18

A.MPEG-1 B.MPEG-2 C.MPEG-4 D.Dolbv AC-3

19.使用Macromedia公司的Flash软件制作的动画是一种矢量图形,在保存为动画文件

时其文件扩展名通常为19

A.GIF B.SWF C.AVI D.MPG

20.在计算机应用中,CADCAM是典型的信息系统。它们属于20

A.管理业务系统 B.辅助技术系统

c.信息检索系统 D.信息分析系统

第二部分Visual C++程序设计

一、选择题(用答题卡答题,答案依次填在21--30答题号内)

21.以下关于C++函数的描述中,正确的是21

A.内联函数就是定义在另一个函数体内部的函数

B.函数体的最后一条语句必须是return语句

C.c++要求在调用一个函数之前,该函数已定义或已有该函数的原型说明

D.编译器会根据函数的返回值类型区分函数的不同重载形式

22.以下关于c++运算符重载的描述中,正确的是22

A.任何运算符均可重载 B.运算符重载可以改变运算符的优先级

C.运算符重载可创造新的运算符 D.运算符重载可以改变运算符的功能

23.以下说明语句中,不存在语法错误的是 23

A.int 10long; B.int _2int;

C.float X3-Dmax; D.char X.txt[20];

24.以下关于C++函数重载的描述中,正确的是

A.重载函数必须具有不同类型的返回值

B.重载函数的形参个数必须不同

C.重载函数的形参个数不同或形参类型不同

D.重载函数名可以不同

25.以下if语句的表达不正确的是25

A.if(a

C.if(a

26.以下关于指针变量的叙述中,不正确的是 26

A.指针变量可赋值为0 B.指针变量中存放的是地址值

C.指针可以进行加、减等算术运算 D.指针变量不占用存储空间

27.以下说明语句中,没有语法错误的是 27

A.int a,*pa=&a,*pb=*pa; B.int aa,&b=aa,*pc=&b;

C.int c[10],&pc=c; D.int dd,&u=&dd,*v=u;

28.以下关于类的友元函数的描述中,不正确的是 28

A.一个类的友元函数要用"friend"说明

B.友元函数在类体中说明时,不受类中访问权限的限制

C.友元函数的作用域与类中成员函数的作用域相同

D.友元函数体的定义通常放在类定义之外

29.以下关于派生类的叙述中,不正确的是29

A.公有派生时基类中的public成员在派生类中仍是public成员

B.私有派生时基类中的protected成员在派生类中仍是protected成员

C.私有派生时基类中的public成员在派生类中改变成private成员

D.保护派生时基类中的public成员在派生类中改变成protected成员

30.以下关于纯虚函数的叙述中,不正确的是 30

A.纯虚函数定义时要定义函数体

B.纯虚函数的说明以"=0;"结束

C.派生类中最终要定义纯虚函数的函数体

D.含纯虚函数的类不能定义其对象

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题,5

1.在定义一个类时,如果仅定义了数据成员,而没有定义成员函数,则由系统自动生成的

缺省成员函数包括:(1) (2) 、重载赋值运算符和拷贝构造函数。

2.如果使用数组名作为函数的实参,则形参与实参结合时,传递的是( 3 )

3.C++,编译时的多态性是通过程序设计中使用 ( 4 ) 来实现的。

4.程序中使用new运算符动态分配的内存空间,必须用 (5) 来释放。

●阅读程序题,13

5.[程序] (3)

#include

int x,y;

int f2(int a,int b)

{ x=a+b;y=a-b;

cout<<"x="<

return x+y;

}

void f1(int m,int n)

{ int x,y;

x=m+n;y=m-n;

m=f2(x,y);

n=n+m

cout<<"m="<

}

void main(void)

{int a=3,b=5;

f1(a,b);

cout<<"a="<

cout<<"x="<

}

运行程序后输出的第二行是( 6 ) ,第三行是( 7 ) ,第四行是( 8 )

6.[程序](3)

#include

int f(int &n,int &m)

{ static int k=10;

n+=m; k+=n; m+=k;

cout<<"k="<

return(n+m);

}

void main(void)

{int a=3,b=4,k;

k=f(a,b)+f(a,b);

cout<<"k="<<<"a="<

}

运行程序后输出的第一行是( 9 ) ,第二行是( 10 ) ,第三行是( 11 )

7.[程序] (2)

#include

void f(int x)

{ int t;

if(x<0){cout<<"-";x=-x;}

t=x%10;X=x/lO;

if(x!=0)f(x);

cout<

}

void main(void)

{ f(-234);

cout<<'\n';

f(123);

cout<<'\n';

}

运行程序后输出的第一行是( 12 ) ,第二行是( 13)

8.[程序] (3)

#include

void fun(int x[],int n)

{ int i,max,min,k,p,t;

for(k=p=0,max=min=x[0],i=1;i

if(max

if(min>x[i]) min=x[i],p=i;

}

t=x[0];x[0]=x[p];x[p]=t;

if(k==0) k=p;

t=x[n-1];x[n-1]=x[k];x[k]=t;

}

void print(int *x,int n)

{for(int k=0;k

void main(void)

{int a[5]={12,16,19,15,11};

fun(a,5);

print(a,5);

}

运行程序后输出的第一行是(14) ,第三行是(15),第五行是(16)

9.[程序](2)

#include

class B{

public:

void f1(){cout<<"B类中的函数f1\n";}

virtual void f2(){cout<<"B类中的函数f2\n";}

};

class D: public B{

void f1(){cout<<"D类中的函数f1\n";}

void f2(){cout<<"D类中的函数f2\n";}

};

void main(void)

{B a,*p;

D b1;

p=&a; p->f2();

p=&b1;

p->f1(); p->f2();

}

运行程序后输出的第二行是 (17) ,第三行是 (18)

完善程序题,12

10以下程序的功能是:首先初始化一个等比数列,改数列的首项为3,公比为2,直到某

以下程序的功能是:首先初始化一个等比数列,该数列的再坝力j,公比刀z,且到禾

一项的数值大于720为止;然后基于此等比数列计算满足条件的n值和m,使得从第n

到第m项的和为720(和值包含第n项及第m)。试完善程序

等比数列的定义:数列的第0项为一个初值,从数列的第1项起,每一项与它的前一项的

比等于一个常数,这种数列称为等比数列。该常数称为等比数列的公比。等比数列表

示为:

A0=a,A1=A0*q,......,An=An-1-1*q;其中a,q均为常数,q!=0

[程序](4)

#include

#define N 20 //只要检查数列的前20,其后各项值均大于720

int sum(im num[],int &n,int &m)

{ int s,i,idx,flag=0;

for(i=0;i

s=0; n=i;

idx=i;

while(s<720 && idx

(19) ;

if(s==720){ //找到符合条件的项,记录位置

(20) ;

flag=1;

break;

}

}

return flag;

}

void main(void)

{ int num[N],q,a;

int i,m,n;

a=3; q=2;

num[0]=a;

for(i=0;num[i]<720;i++){ //初始化等比数列

(21) ;

num[i+1]=a;

}

if((22)){

cout<<""<--"<项的和是720:"<

for(;n<=m;n++)cout<

cout<<"\n";

else cout<<"没有满足条件的项!\n";

}

11.以下程序的功能是:按每一个学生的成绩总分(数学、物理和英语成绩之和)进行排序

(降序排序),若总分相同时,再按数学成绩进行降序排序;若总分和数学成绩相同,再按英语

成绩进行降序排序。程序中先输入学生的人数,再依次输入每一个学生的成绩,然后按降序排

列后输出结果。试完善程序。

[程序](4)

#include

#include

#define N 50

struct stu{

char name[10]; //学生姓名

int math; //存放数学成绩

int phy,eng; //物理和英语成绩

int sum;

};

void input(stu s[],int n)

{

for(int i=O;i

cout<<"依次输入姓名,数学,物理和英语成绩:";

cin>>s[i].name>>s[i].math>>s[i].phy>>s[i].eng;

s[i].sum=s[i].math+s[i].phy+s[i].eng;

}

}

void sort(stu s[],int n)

{

int i,j,k;

stu t;

for(i=0;i降序排序

k=i;

for(j=i+1;j

if(s[k].sum

else if(( 23 )) k=j;

else if(( 24 )) k=j;

if(( 25 )){

t=s[i];

s[i]=s[k];

s[k]=t;

}

}

}

void main(void)

{ int n;

stu s[N];

cout<<"输入学生的人数:";

cin>>n;

input(s,n);

( 26 ) ;

for(int i=0;i

cout<

<

}

12.下面程序的功能是:首先,成员函数build()建立一条无序链表,由成员函数Print()

出无序链表中各结点的值;再由成员函数sort()对已建的链表根据链表结点值的大小按升序

进行排序,由成员函数print()输出有序链表中各结点的值。试完善程序。

[程序](4)

#include

struct Node{

double num;

Node *next;

};

class Chain{

private:

Node *h;

public:

void sort(void);

Chain(){h=0;}

~Chain()

{

Node *p;

while(h){

p=h;

h=h->next;

delete p;

}

}

void build(void);

void print(void)

{

Node *p=h;

while(p){

cout<nun<<'\t';

p=p->next;

}

cout<<'\n'

}

};

void Chain::build(void)

{

Node *p,*p1;

double x;

cout<<"输入一个实数,0结束:";

cin>>x;

while(x!=0){

p=new Node;

P->num=x;

if(h==0) h=p1=p;

else{

p1->next=p;

p1=p;

}

cout<<"输入一个实数,O结束:";

cin>>x;

}

p->next=0

}

void Chain::sort(void)

{

if(h==0)return;

Node *h1,*p;

h1=0;

while(h){

p=h;

( 27 ) ;

Node *p1,*p2;

if(h1==0){

h1=p;

( 28 ) ;

}

else if(h1->num>=p->num){

( 29 ) ;

h1=p;

}

else{

p2=p1=h1;

while(p2->next && p2->numnum){

p1=p2;p2=p2->next;

}

if(p2->numnum){

(30) ;

p->next=0;

}

else{

p->next=p2;p1->next=p;

}

}

}

h=hl;

}

void main(void)

{ Chain x;

x.build();

cout<<"排序前的链表为:";

x.print();

x.sort();

cout<<"\n排序后的链表为:";

x.print();

}

参考答案

一、选择题

1.A 2.D 3.A 4.B 5.D 6.C 7.B 8.B 9.B 10.D 11.C 12.B 13.A 14.D

15.C 16.D 17.C 18.A 19.B 20.B

21.C 22.D 23.B 24.C 25.A 26.D 27.B 28.C 29.B 30.A

二、填空题

(1)构造函数(或析构函数) (2)析构函数(或构造函数)

(3)数组所代表的地址或地址或数组名

(4)函数重载或运算符重载 (5)deletedelete运算符 (6)m=16 n=21

(7)a=3 b=5 (8)x=6 y=10 (9)k=17

(10)k=45 (11)k=122 a=28 b=66 (12)-234

(13)123 (14)11 (15)12

(16)19 (17)B类中的函数f1 (18)D类中的函数f2

(19)s+=num[idx++] (20)m=idx-1m=--idx (21)a=a*qa=a*2

(22)sum(num,n,m)sum(num,n,m)==1

(23)s[k].sum==s[j].sum && s[k].math

(24)s[k].sum==s[j].sum && s[k].eng

(25)i!=k

(26)sort(s,n)

(27)h=h->nexth=p->next

(28)p->next=0h1->next=Op->next=NULLhl->next=NULL

(29)p->next=h1

(30)p2->next=p


2010年春

二级试卷

试卷语种:C++语言

第一部分计算机基础知识

1.下面关于通信技术的叙述中,错误的是 ___1___

A.任何一个通信系统都有信源、信道和信宿这三个基本组成部分

B.为了实现远距离传输信息,在模拟通信和数字通信中均采用载波技术

C.为了降低传输信息的成本,在通信中广泛采用多路复用技术

D.数字通信系统的一个主要性能参数是信道带宽,它指实际进行数据传输时单位时间内传输的二进位数目

2.在下列有关集成电路及其应用的叙述中,错误的是 ___2___

A.集成电路的制造工序繁多,工艺复杂且技术难度高

B.经过抛光后的硅片称为晶圆,每个晶圆最多可以制成一个合格的集成电路芯片

C.IC卡分为接触式IC卡和非接触式IC,后者通常又称为射频卡或感应卡

D.集成电路应用十分广泛,目前我国第2代居民身份证中就有集成电路芯片

3.在下列有关数字技术的一些叙述中,错误的是 _____3_____

A.数字技术是采用有限个状态(例如"0""1")来表示、处理、存储和传输信息的

B.在逻辑代数中,11进行逻辑加(V)和逻辑乘(^)的结果相同

C.任何一个十进制数,均可以精确地转换成等值的二进制数

D.PC机中,通常用原码表示正整数、用补码表示负整数

4. 在下列有关PC机主机的叙述中,错误的是___4___

A.BIOSCMOS存储器安装在主板上,普通用户一般不能自己更换

B.由于PC机主板的物理尺寸等没有标准化,所以不同PC机的主板均不能互换

C.芯片组是PC机各组成部分相互连接和通信的枢纽,一般由2VLSI芯片组成

D.芯片组决定了主板上所能安装的内存最大容量、速度及可使用的内存条类型

5. 在下列4Intel微处理器产品中,采用双核结构的是 _____5_____

A. Core 2 Duo

B.Pentium PRO

C.Pentium III

D.Pentium 4

6. 在下列四种PC机主存储器类型中,目前常用的是 _____6_____

A.EDODRAM

B.SDRAM

C.RDRAM

D.DDR SDRAM

7. 在下列有关PC机常用I/O接口的叙述中,错误的是 _____7_____

A. 目前显卡与显示器的接口大多采用VGA接口

B. 可用于连接鼠标器的USB接口和PS/2接口的数据传输方式均是串行传输方式

C. USB接口连接器有4个引脚,其中1个引脚可获得由主机提供的+1.5V电源

D. IEEE-1394b接口也是PC机常用的一种高速接口

8. 在下列有关PC机外存储器的叙述中,错误的是 8

A. 由于数据存取速度慢、容量小等原因,软盘存储器已逐渐被淘汰

B. 所有的硬盘都是由2个或2个以上盘片组成的,硬盘中的盘面数为盘片数的2

C. 目前有些优盘产品可以模拟软盘和硬盘启动操作系统

D. 目前常见的组合光驱(“康宝”)既有DVD只读光驱功能,又有CD光盘刻录机功能

9. 在下列有关光盘存储容量的叙述中,错误的是 9

A.80ram CD存储容量大约为200多兆字节

B.120mm CD存储容量大约为600多兆字节

C.单面单层的120mm DVD存储容量大约为4.7GB

D.单面单层的120mm蓝光光盘存储容量大约为17GB

10.在下列有关Windows系列操作系统及其功能的叙述中,错误的是 10

A.Windows操作系统采用并发多任务方式支持系统中多个任务的执行

B.Windows XP分为多个版本,它们可用于不同计算机和不同的应用

C.Windows XP相比,Windows Vista做了许多改进,但其硬件运行环境要求较高

D.无论是硬盘还是光盘,它们均采用相同的文件系统,FAT文件系统

11.在下列常用应用软件中,不能对编辑的文档设置密码的是 11

A.Microsoft Word

B.Microsoft Excel

C.Microsoft PowerPoint

D.Microsoft FrontPage

12.在下列关于无线局域网的叙述中,错误的是 12

A.在无线局域网中,无线接入点实际上是一种无线交换机,在室内覆盖距离可达几十米

B.目前无线局域网可采用的协议有Wi-Fi和蓝牙等,后者的数据传输速率比前者更高

C.若某电脑贴有Intel公司的"Centrino"(迅驰)标记,则该电脑应有集成的无线网卡

D.无线网卡有多种类型,例如PCI无线网卡、USB无线网卡等

13.IP地址分为ABCDE五类。下列4IP地址中,属于C类地址的是 13

A. 1.110.24.2

B. 202.119.23.12

C. 130.24.35.68

D. 26.10.35.4R

14.因特网上有许多不同结构的局域网和广域网互相连接在一起,它们能相互通信并协调工作

的基础是因为都采用了 ______14______

A.ATM协议

B.TCP/lP协议

C.X.25协议

D.NetBIOS协议

15.下列有关因特网接入的叙述中,错误的是______15______

A.采用电话拨号接入时,数据传输速率只能达几十kbps

B.采用ADSL接入时,网络的下行数据传输速率通常高于上行数据传输速率 .

C.采用ADSL接入时,只需要ADSL调制解调器,不需要使用网卡

D.采用有线电视接入时,多个终端用户将共享连接段线路的带宽

16.在下列有关字符集及其编码的叙述中,错误的是 ______16______

A.在我国台湾地区使用的汉字编码标准主要是GBK,该标准中收录了大量的繁体汉字

B.GBl8030标准中收录的汉字数目超过2,Windows XP操作系统支持该标准

C.Unicode字符集中既收录了大量简体汉字,也收录了大量繁体汉字

D.GB2312是我国颁布的第一个汉字编码标准,该字符集还收录了俄文、希腊字母等

17.若一幅图像的大小为1024×768,颜色深度为16,则该图像在不进行数据压缩时,其数据量大约为____17___

A.768KB

B.1.5MB

C.3MB

D.12.3MB

18.在下列4种类型的数字化声音文件中,不可能包含人的说话声音的是 18

A. WAV

B.MP3

C.MID

D.WMA

19.在下列有关数字视频的叙述中,错误的是 19

A.PC机所使用的视频卡能将输入的模拟视频信号进行数字化

B.目前使用摄像头获取视频信息时,不需要使用专门的视频卡

C.数字视频在数据压缩时只能使用MPEG标准,DVD就是采用MPEG4标准压缩的

D.计算机动画是一种合成视频,这种技术是发展动漫产业的基础

20.下列是几种常见的电子商务的分类方法。若将电子商务分为B-CB-B等类型,则该分类

______20______

A.按交易的双方进行分类

B.按使用的网络类型分类

C.按交易商品性质分类

D.按交易商品规模分类

第二部分 C++语言程序设计 .

一、选择题(用答题卡答题,答案依次填在21-30答题号内)

21.若有;int x=6;则执行语句:x+=x-=x*x;,x的值是 (21)

A.36 B.-60 C.60 D.-24

22.以下语句中,存在编译错误的是 (22)

A.char a[7],*p; p=a="China"; B.char a[7],*p=a; p="China";

C.char *a; a="China"; D.char a[7]={"China"};

23.以下有关函数的叙述中,正确的是 (23)

A.函数必须返回一个值 B.函数体中必须有return语句

C.函数可以多次重载 D.函数可以嵌套定义

24.执行以下语句序列int j=0;while(j<25) j+=3; cout<

输出的结果是 (24)

A.24 B.25 C.27 D.28

25.实现运行时的多态性需要使用 (25)

A.重载函数 B.析构函数 C.构造函数 D.虚函数

26.以下有关类成员的描述中,正确的是 (26)

A.友元函数是类的成员函数 B.类成员缺省的访问权限是私有的

C.类成员函数必须说明为公有的 D.派生类成员函数能访问其基类的所有成员

27.对于任意一个类,其析构函数 (27)

A.是唯一的 B.可有多个 C.只能是缺省的 D.允许重载

28.类的成员函数中,没有this指针的是 (28)

A.构造函数 B.析构函数 C.虚函数 D.静态成员函数

29.以下有关继承的叙述中,不正确的是 (29)

A.继承可以实现软件复用 B.虚基类可解决多继承产生的二义性问题

C.派生类不继承基类的私有成员 D.派生类的构造函数要调用基类的构造函数

30.静态数据成员是 ( 30 ) 的数据。

A.私有 B.公有 C.保护 D.所有对象共享

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题,5

1.C++,将多态性分为静态多态性和动态多态性两种。函数重载属于 (1) 多态性,运算

符重载属于 (2) 多态性。

2.C++的文件流中,打开文件的方法有二种,一种是使用成员函数open()打开文件,另一种是

使用.(3) 打开文件。

3.要使一个指针变量不指向任一变量时,应将该指针变量的值赋为 (4)

4.当用类的成员函数重载一个双目运算符时,该成员函数的形参个数是 (5) 个。

●阅读程序题,13

5.[程序] (2)

#include

int f2(int *a,int b)

{

*a=*a+b; b=*a+b;

cout<<"*a="<<*a<<"\t"<<"b="<

return *a+b;

}

void f1(int a,int &b)

{

a=a+b;b=a+b;

b=f2(&a,b);

cout<<"a="<

}

void main(void)

{

int x=4,y=5;

f1(x,y);

cout<

}

执行以上程序后输出的第一行是___(6)___,第二行是___(7)___,第三行是___(8)___

6.[程序] (3)

#include

void fun(int *s,int *y)

{

static int t=3;

*y+=s[t];

t--;

}

void main(void)

{

int a[]={10,20,30,40},i,x=0;

for(i=0;i<4;i++){

fun(a,&x);

cout<

}

}

执行以上程序后输出的第一行是___(9)___,第三行是 ___(10)___,第四行是 ___(11)___

7.[程序](3)

#include

void f(int x,int y)

{

int mid;

if(x

mid=(x+y)/2;

cout<

f(x,mid);

}

}

void main(void)

{

f(1,10);

}

执行以上程序后输出的第一行是 ___(12)___ ,第二行是___(13)___ ,第三行是 ___(14)___

8.[程序] (2)

#include

int fun(char *s)

{

char *p=s;

while(*p) p++;

return(p-s);

}

void main(void)

{

char s1[]={"China"},s2[]={"Apple\nPear\tCat\0Bye"};

cout<

cout<

}

执行以上程序后输出的第一行是 ___(15)___ ,第二行是 ___(16)___

9.[程序] (2)

#include

#include

class B{

public:

B(char *s){name=new char[strlen(s)+1];strcpy(name,s);}

virtual void print(){cout<<"姓名;"<

protected:

char *name;

};

class P1:public B{

public:

P1(char *s,float g):B(s){x=g;}

void print(int i)

{ cout<<"姓名:"<年薪:"<万元。 \n";}

private:

float x;

};

class P2:public B{

public:

P2(char *s,int n):B(s){ num=n;}

void print(){cout<<"姓名;"<月工资:"<元。\n";}

private:

int num;

};

void main(void)

{

B *p;

B x("张明");

P1 y("王虎",4.2);

P2 z("李建国",5000);

p=&x;p->print();

p=&y;p->print();

y.print(1);

p=&z;p->print();

}

执行以上程序后输出的第二行是(17) ,第四行是(18)

●完善程序题,12

10.以下程序的功能是;从键盘接收一行字符串,首先按照字符的ASCII码值从小到大对输入的字李

串进行排序,然后从排序后的字符串中删除重复的字符并输出删除操作后的字符串。

[程序] (4)

#include

#include

char *fun(char *s)

{

char *p,*q,*r,c;

for(p=s; ___(19)___;p++){ //升序排序

for(q=r=p;*q;q++)

if(*r>*q)

___(20)___;

if(r!=p){

c=*r;

*r=*p;

*p=c;

}

}

for(p=s;*p;p++){ //从字符串中删除重复的字符

for(q=p;*p==*q;q++);

r=p+1;

while(*q) ___(21)___ ; //非重复字符向前移

*r=0;

}

return s;

}

void main(void)

{

char str[200],s[200];

cout<<"输入一行字符串:";

cin.getline(str,200)

strcpy(s,str);

___(22)___ ;

cout<<"输入字符串为:"<

cout<<"结果字符串为:"<

}

12.以下程序的功能是;从键盘输入一行字符串,将输入字符串中连续的数字作为一个整数,整数前

"+""_"分别表示正整数和负整数。依次取出相关的连续数字字符,并转换为整数后存放到整

型数组中。函数change_int()实现从字符串中依次取出整数并放入数组中

例如;输入字符串:"sf-123 abc+456 df7890j",则输出-123 456 7890

[程序](4)

#include

void change_int( (23) )

{

int flag;

count=0;

while(*p){

flag=1; //flag=1为正整数,flag=-1为负整数

while((*p<'0'||*p>'9')&& ___(24)___)p++;

if(*p=='-'){ ‘

flag=-1;

p++;

}

else if(*p=='+') p++;

if(*p>='0' && *p<='9'){

int num=0;

while( (25) ){

num=num*10+*p-'0';

p++;

}

num= ___(26)___ ;

b[count]=num;

count++;

}

}

}

void main(void)

{

char str[400];

int a[20],n;

cout<<"请输入一个含有数字的字符串;\n";

cin.getline(str,400);

change_int(str,a,n); ,

cout<<"输入字符串中共有"<个整数,它们分别是;\n";

for(int i=0;i

cout<

if((i+1)%4==0) cout<<'\n';

}

cout<

}

13.以下程序的功能是;实现一个队列的简单管理,每一个队列结点包括一个学生的基本信息(姓名,数学、物理和英语成绩)。成员函数add()建立一个新结点,并将该结点加入队尾。成员函数remove()从队首取下一个结点,并通过参数将所取结点中的数据返回。成员函数Print()输出队列中各个结点的值。当队列非空时,析构函数~Queue()依次删除队列上的各个结点。

[程序] (4)

#include

#include

class Node{

public:

Node(char nam[],int m,int p,int e)

{strcpy(name,nam);math=m;phy=p;eng=e;}

Node(){}

private:

char name[10]; //姓名

int math,phy,eng; //数学,物理,英语成绩

Node *nextItem;

friend class Queue;

};

class Queue{

public:

Queue(){front=NULL;back=NULL;}

~Queue();

void remove(char *,int &,int &,int &);

void add(char [],int,int,int);

int is_empty(){return back==NULL;}

//输出队列中各个结点的值

void Print()

{

Node *p=front;

while(p){

cout<name<<'\t'<math<<'\t'<phy<<'\t'<eng<<'\n';

p=p->nextItem;

}

}

private:

Node *front;

Node *back;

};

//Queue的成员remove()实现从队列头取下一个结点,并返回该结点的值

void Queue::remove(char n[],int &m,int &p,int &e)

{

Node *pFront; //指向头结点的临时指针

pFront=front;

strcpy(n,front->name);

m=front->math;p=front->phy;e=front->eng;

____(27)___ ;

delete pFront;

}

//Queue的函数成员add()实现在队列中增加一个项,即增加一个结点

void Queue::add(char n[],int m,int P,int e)

{

Node *pNew=new Node;

strcpy(pNew->name,n);

pNew->math=m;pNew->phy=p;pNew->eng=e;

pNew->nextItem=NULL;

if(front==NULL) ___(28)___;

else{

____(29)___ ;

back=pNew;

}

}

Queue::~Queue()

{

Node *p=front,*q;

while(p!=NULL){

___(30)___;

delete P;

p=q;

} .

}

//主函数完成对各成员函数的简单测试

void main(void)

{

Queue q1;

int m,p,e;

char str[10];

cout<<"输入队列中学生的姓名、数学、物理,英语成绩(0结束);";

cin>>str>>m>>p>>e;

while(strcmp(str,"O")!=0){

q1.add(str,m,P,e);

cout<<"输入队列中一个项的值(0结束);";

cin>>str>>m>>p>>e;

}

cout<<"队列中各项为;\n";

q1.Print ();

q1.remove(str,m,p,e);

cout<<"队列中移下项的值为;"<

cout<<"队列中各项为;\n";

q1.Print();

}

本文来源:https://www.2haoxitong.net/k/doc/4553899454270722192e453610661ed9ad515588.html

《2007春-2010年-江苏省计算机二级C++ - 历年真题及答案(笔试).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式