2009年秋江苏省计算机二级考试Visual C++
(总分84, 做题时间90分钟)
第一部分 计算机基础知识
1. 
下列关于个人移动通信的叙述中,错误的是____
A 第1代个人移动通信(简称1G)采用的通信技术是数字通信技术
B 目前广泛使用的GSM手机采用的通信技术属于第2代移动通信技术(简称2G)
C 第3代移动通信技术(简称3G)将无线通信与互联网、多媒体通信相结合
D 3G有多个国际技术标准,其中也有我国自主制定的3G技术标准。
2. 
在下列有关集成电路的叙述中,正确的是________。
A 现代集成电路所使用的半导体材料都是硅
B 所有的集成电路都是数字集成电路
C Moore定律认为单块集成电路的集成度平均每年翻一番
D Intel公司微处理器产品Core 2 Duo,其集成度已高达数千万个电子元件
3. 
与十六进制数AB等值的八进制数是________。
A 253
B 254
C 171
D 172
4. 
在下列有关PC机CPU的叙述中,错误的是________。
A CPU中包含几十个甚至上百个寄存器,用来临时存放数据、指令和控制信息
B 所有PC机的CPU都具有相同的指令系统,因而PC机可使用相同的软件
C 一台计算机至少包含1个CPU,也可以包含2个、4个、8个甚至更多个CPU
D Intel公司是国际上研制和生产CPU的主要公司,我国也能生产CPU
5. 
在下列有关PC机主板上部件的叙述中,错误的是________。
A BIOS保存在主板上的一个闪存中,其内容在关机后通常不会改变
B CMOS中保存有用户设置的开机口令,关机后主板上的电池继续给CMOS供电
C 启动CMOS设置程序可以重新设置CMOS中的数据,该程序是BIOS的组成部分
D 网卡通常集成在主板上,由主板上独立的IC实现其功能,与芯片组无关
6. 
从PC机存储器的层次结构来看,下列存储器中存取速度最快的是________。
A Cache存储器
B RAM和ROM
C 寄存器
D 硬盘和优盘
7. 
在下列4种PC机常用I/O接口中,数据传输速率最高的是________。
A PS/2
B SATA 
C IEEE-1394b
D USB 2.0
8. 
在下列有关I/O操作、I/O总线和I/O接口的叙述中,错误的是________。
A I/O操作的任务是在I/O设备与内存的指定区域之间传送信息
B I/O总线传送的只能是数据信号,它不能传送控制信号和地址信号
C 不同类型的I/O接口,其插头/插座以及相应的通信规程和电气特性通常各不相同
D 并行总线的数据传输速率不一定比串行总线高
9. 
在下列有关PC机I/0设备的叙述中,错误的是________。
A 数码相机的成像芯片可以为CCD器件或CMOS芯片,目前大多数用CCD器件
B 平板式扫描仪的分辨率通常远远高于胶片扫描仪和滚筒式扫描仪
C 常见的宽屏液晶显示器的宽度与高度之比为16:9(或16:10)
D 目前在银行、超市等商业部门一般采用针式打印机来打印存折和票据
10. 
在下列有关计算机软件的叙述中,错误的是________。
A 程序设计语言处理系统和数据库管理系统被归类为系统软件
B 共享软件是一种具有版权的软件,它允许用户买前免费试用
C 机器语言和汇编语言与特定的计算机类型有关,取决于CPU
D 目前PC机只能使用Windows系列操作系统,均不能使用UNIX和Linux操作系统
11. 
在下列常用的PC机软件中,编辑的文档(内容)能直接保存为图片类型(例如JPEG文件类型)的是________。
A Microsoft Word
B Microsoft Excel
C Microsoft PowerPoint
D Microsoft FrontPage
12. 
在下列关于以太网(局域网)的叙述中,错误的是________。
A 在共享式以太网中,任何时间只允许一对计算机进行通信
B 在交换式以太网中,每台计算机均独享相同的带宽,其带宽仅由交换机决定
C 无论是共享式以太网还是交换式以太网,网络中的所有计算机都要安装以太网网卡
D 无论是共享式以太网还是交换式以太网,它们的数据帧和MAC地址格式均相同
13. 
连接在因特网上的每一台主机都有一个IP地址。下面不能作为IP地址的是________。
A 211.256.49.68
B 21.18.33.48
C 120.34.0.18
D 37.251.68.0
14. 
为了将异构的计算机网络互相连接起来,必须使用的网络设备是________。
A 调制解调器
B 以太网集线器
C 以太网交换机
D 路由器
15. 
下列网络协议中,与发送电子邮件有关的是_________。
A Http
B FTP
C SMTP
D TELNET
16. 
在下列有关字符集及其编码的叙述中,错误的是________。
A 基本的ASCII字符集共有128个字符,每个字符使用7个二进位进行编码
B GB2312字符集中收录了6千多个汉字,每个字符在机内通常使用双字节编码
C GBK字符集中的字符也采用双字节编码,且该字符集收录了部分繁体汉字
D GB18030字符集中所有的字符均采用4字节编码,因此该字符集的代码空间很大
17. 
目前数码相机拍摄的照片在保存时通常采用的文件类型是________。
A BMP
B GIF
C JPEG
D TIF
18. 
MP3是数字波形声音的一种压缩编码文件格式,它采用的压缩编码标准属于________。
A MPEG-1
B MPEG-2
C MPEG-4
D Dolbv AC-3
19. 
使用Macromedia公司的Flash软件制作的动画是一种矢量图形,在保存为动画文件时其文件扩展名通常为________。
A GIF
B SWF
C AVI 
D MPG 
20. 
在计算机应用中,CAD和CAM是典型的信息系统。它们属于________。
A 管理业务系统
B 辅助技术系统
C 信息检索系统
D 信息分析系统
第二部分Visual C++程序设计
一、选择题(用答题卡答题,答案依次填在21——30答题号内)
21. 
以下关于C++函数的描述中,正确的是________。
A 内联函数就是定义在另一个函数体内部的函数
B 函数体的最后一条语句必须是return语句
C c++要求在调用一个函数之前,该函数已定义或已有该函数的原型说明
D 编译器会根据函数的返回值类型区分函数的不同重载形式
22. 
以下关于c++运算符重载的描述中,正确的是________。
A 任何运算符均可重载
B 运算符重载可以改变运算符的优先级
C 运算符重载可创造新的运算符
D 运算符重载可以改变运算符的功能
23. 
以下说明语句中,不存在语法错误的是________。
A int  10long;
B int _2int;
C float X3-Dmax;
D char X.txt[20];
24. 
以下关于C++函数重载的描述中,正确的是________。
A 重载函数必须具有不同类型的返回值
B 重载函数的形参个数必须不同
C 重载函数的形参个数不同或形参类型不同
D 重载函数名可以不同
25. 
以下if语句的表达不正确的是________。
A if(a<b) a=0,else b=0;
B if(a==b) a=0,b++;
C if(a<b);
D if(a!=b) a=b;
26. 
以下关于指针变量的叙述中,不正确的是________。
A 指针变量可赋值为0
B 指针变量中存放的是地址值
C 指针可以进行加、减等算术运算
D 指针变量不占用存储空间
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. 
以下关于类的友元函数的描述中,不正确的是________。
A 一个类的友元函数要用"friend"说明
B 友元函数在类体中说明时,不受类中访问权限的限制
C 友元函数的作用域与类中成员函数的作用域相同
D 友元函数体的定义通常放在类定义之外
29. 
以下关于派生类的叙述中,不正确的是________。
A 公有派生时基类中的public成员在派生类中仍是public成员
B 私有派生时基类中的protected成员在派生类中仍是protected成员
C 私有派生时基类中的public成员在派生类中改变成private成员
D 保护派生时基类中的public成员在派生类中改变成protected成员
30. 
以下关于纯虚函数的叙述中,不正确的是________。
A 纯虚函数定义时要定义函数体
B 纯虚函数的说明以"=0;"结束
C 派生类中最终要定义纯虚函数的函数体
D 含纯虚函数的类不能定义其对象
二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)
1. 
在定义一个类时,如果仅定义了数据成员,而没有定义成员函数,则由系统自动生成的 缺省成员函数包括:(1) 、 (2) 、重载赋值运算符和拷贝构造函数。
2. 
如果使用数组名作为函数的实参,则形参与实参结合时,传递的是( 3 ) 。
3. 
C++中,编译时的多态性是通过程序设计中使用 ( 4 ) 来实现的。
4. 
程序中使用new运算符动态分配的内存空间,必须用 (5) 来释放。
5. 
[程序] (3分) #include <iostream.h> int x,y; int f2(int a,int b) { x=a+b;y=a-b; cout<<"x="<<x<<"\t"<<"y="<<y<<endl; 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="<<m<<"\t"<<"n="<<n<<endl; } void main(void) {int a=3,b=5; f1(a,b); cout<<"a="<<a<<"\t"<<"b="<<b<<endl; cout<<"x="<<x<<"\t"<<"y="<<y<<endl; } 运行程序后输出的第二行是( 6 ) ,第三行是( 7 ) ,第四行是( 8 ) 。
6. 
[程序](3分) #include <iostream.h> int f(int &n,int &m) { static int k=10; n+=m; k+=n; m+=k; cout<<"k="<<k<<endl: return(n+m); } void main(void) {int a=3,b=4,k; k=f(a,b)+f(a,b); cout<<"k="<<k<<'\t’<<"a="<<a<<'\t'<<"b="<<b<<endl: } ’ 运行程序后输出的第一行是( 9 ) ,第二行是( 10 ) ,第三行是( 11 )
7. 
[程序] (2分) #include<iostream.h> void f(int x) { int t; if(x<0){cout<<"-";x=-x;} t=x%10;X=x/lO; if(x!=0)f(x); cout<<t; } void main(void) { f(-234); cout<<'\n'; f(123); cout<<'\n'; } 运行程序后输出的第一行是( 12 ) ,第二行是( 13) 。
8. 
[程序] (3分) #include <iostream.h> void fun(int x[],int n) { int i,max,min,k,p,t; for(k=p=0,max=min=x[0],i=1;i<n;i++){ if(max<x[i]) max=x[i],k=i; 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<n;k++) cout<<x[k]<<endl;} void main(void) {int a[5]={12,16,19,15,11}; fun(a,5); print(a,5); } 运行程序后输出的第一行是(14) ,第三行是(15),第五行是(16)。
9. 
[程序](2分) #include <iostream.h> 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)。
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 <iostream.h> #define N 20 //只要检查数列的前20项,其后各项值均大于720 int sum(im num[],int &n,int &m) { int s,i,idx,flag=0; for(i=0;i<N;i++){ s=0; n=i; idx=i; while(s<720 && idx<N) (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<<"第"<<n<<"项--第"<<m<<"项的和是720:"<<endl; for(;n<=m;n++)cout<<nun[n]<<'\t'; cout<<"\n"; else cout<<"没有满足条件的项!\n"; }
11. 
以下程序的功能是:按每一个学生的成绩总分(数学、物理和英语成绩之和)进行排序(降序排序),若总分相同时,再按数学成绩进行降序排序;若总分和数学成绩相同,再按英语成绩进行降序排序。程序中先输入学生的人数,再依次输入每一个学生的成绩,然后按降序排列后输出结果。试完善程序。 [程序](4分) #include <iostream.h> #include <string.h> #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<n;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<n-1;i++){ //降序排序 k=i; for(j=i+1;j<n;j++) if(s[k].sum<s[j].sum) k=j; 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<n;i++) cout<<s[i].name<<<'\t'<<s[i].sum<<'\t'<<s[i].math<<'\t' <<s[i].phy<<'\t'<<s[i].eng<<'\n'; }
12. 
下面程序的功能是:首先,成员函数build()建立一条无序链表,由成员函数Print()输出无序链表中各结点的值;再由成员函数sort()对已建的链表根据链表结点值的大小按升序进行排序,由成员函数print()输出有序链表中各结点的值。试完善程序。 [程序](4分) #include <iostream.h> 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<<p->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->num<p->num){ p1=p2;p2=p2->next; } if(p2->num<p->num){ (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(); }
答题卡