资源描述
2007年春江苏省二级VC++考试试题与答案
绝密★启用前
2007年春
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试
二级试卷
试卷语种: Visual C++
说 明:
1.本试卷包括计算机基础知识部分和程序设计部分,考试时间共120分钟
2.本试卷满分为60分,分选择题和填空题,试卷不分A、B类型;
3.计算机基础知识部分全部是选择题(20分),程序设计部分分为选择题(10分)和填空题(30分)两种;
4.选择题用答题卡答题。每一项有A、B、C、D四个可供选择的答案,请选择其中一个你认为正确的答案,用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.主板上芯片组的作用是提供存储器控制功能,I/O控制与芯片组无关
D.主板上CMOS芯片用于存储CMOS设置程序和一些软硬件设置信息
7.下列有关目前Pc机辅助存储器的叙述中,错误的是 ( 7 )
A.硬盘的容量越来越大,这是因为硬盘中磁盘碟片的数目越来越多
B.硬盘的内部传输速率一般小于外部传输速率
c.优盘采用Flash存储器技术,属于半导体存储器
D.目前常见COMBO光驱是一种将CD-RW和DVD-ROM组合在一起的光驱
8.下面有关Windows操作系统,(95以后版本)的叙述中,错误的是 ( 8 ) 。
A.Windows操作系统支持系统中多个任务的并发执行
B.利用Whldows附件“系统工具”中的“系统信息”可以查看内存的工作情况
C.系统规定文件名最多由128个字符组成
D.Vista是Microsoft公司推出的Windows XP操作系统的后继版本
9.算法设计是编写程序的基础。下列关于算法的叙述中,正确的是 ( 9 ) 。
A. 算法必须产生正确的结果 C. 算法可以没有输出
B. 算法必须具有确定性 D.算法的表示必须使计算机能理解
10.因特网使用TCP/IP协议实现全球范围的计算机网络互连,连接在因特网上的每一台主机
都有一个IP地址。下面不能作为IP地址的是( 10 )
A. 120.34.0.18 C. 21.18.33.48
B. 201.256.39.68 D. 37.250.68.0
11.常用局域网有以太网、FDDI网等,下面的叙述中错误的是 ( 11 )
A• 总线式以太网采用带冲突检测载波侦听多路访问(CSMA/CD)方法进行通信
B. FDDI网和以太网可以直接进行互连
C• 交换式集线器比总线式集线器具有更高的性能,它能提高整个网络的带宽.
D• FDDI网采用光纤双环结构,具有高可靠性和数据传输的保密性
12.某用户在WWW浏览器地址栏内键入一个URL“
的“/ndex.htm”代表( 12 )
A.协议类型 C.路径及文件名
B.主机域名 D.用户名
13.交换式以太网与总线式以太网在技术上有许多相同之处,下面叙述中错误的是( 13 )
A.使用的传输介质相同 C.传输的信息帧格式相同
B.网络拓扑结构相同 D.使用的网卡相同
14.下面是关于我国汉字编码标准的叙述,其中正确的是 ( 14 )
A.Unicode是我国最新发布的也是收字最多的汉字编码国家标准
B.不同字型(如宋体、楷体等)的同一个汉字在计算机中的内码不同
C.在GBl8030汉字编码标准中,共有2万多个汉字
D.GBl8030与GB2312、GBK汉字编码标准不能兼容
15.数字图像的文件格式有多种,下列哪一种图像文件能够在网页上发布且可具有动画效
果( 15 )
A.BMP B.GIF C.JPEG D.TIF
16.声卡是获取数字声音的重要设备,.在下列有关声卡的叙述中,错误的是
A.声卡既负责声音的数字化(输入),也负责声音的重建(输出)
B.声卡既处理波形声音,也负责MIDI音乐的合成 。
C.声卡中的数字信号处理器(DSP)在完成数字声音编码、解码及编辑操作中起着重
要的作用
D.因为声卡非常复杂,所以它们都被做成独立的PCI插卡形式
17.彩色图像所使用的颜色描述方法称为颜色模型。显示器使用的颜色模型为RGB三基色模
型,PAL制式的电视系统在传输图像时所使用的颜色模型为
A.YUV B.HSB C.CMYK
18.在信息系统的结构化生命周期开发方法中,绘制E-R图属于( 18 )阶段的工作
A.系统规划 B. 系统分析
C.系统设计 D. 系统实施
19.在下列有关Microsoft Word 2000/2003(中文版)功能的叙述中,( 19 )
A.起始页的页码可以不为1
B.利用菜单命令,可更改所选英文文本的大小写
C.利用菜单命令“字数统计”,可以统计出当前文档的行数和段落数
D.表格中的数据不可排序,也不能利用公式进行统计计算
20.在下列有关Microsoft PowerPoint 200012003(中文版)功能的叙述中,错误的是( )
A.可通过“另存为”操作,将每张幻灯片保存为一个图片文件
B.幻灯片的大小是固定的,用户不可以对其进行设置
C.在排练计时的基础上,可以将幻灯片设置为循环放映
D.可以对字体进行替换,例如将幻灯片中的“宋体”替换为“楷体”
第二部分Visual C++语言程序设计
一、选择题(用答题卡答题,答案依次填在21~30答题号内)
21.设有说明语句:int d,e;
以下选项中,存在语法错误的是21 。
A.d=9+e==d+2; B.d=e+=2; C.f=g+f=j*k++; D.(++d)++;
22.设有函数调用语句:fun((x1,x2),x3,(x4,x5,x6));
该函数调用中实参的个数是22
A.2 B.3 C. 5 D.6
23.以下对二维数组的说明中,存在语法错误的是23
A.int a[][3]={3,2,1,1,2,3}; B.int a[][3]={{3,2,1},{1,2,3}};
C.im a[2][3]={1} D.int a[2][]={{3,2,l},{1,2,3}};
24.以下选项中,存在语法错误的是24。
A.float x,&j=x; B.int c,&d=c,&e=d;
C.char b, &k=b; D.int f,&g;g=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.缺省构造函数 B.operator=()函数
c.拷贝构造函数 D.对象之间的赋值
29.已知在函数set中,语句this一>ff=5;与语句ff=5;的效果完全相同。根据这一结
论,以下叙述中不正确的是29。
A.ff是某个类的数据成员,Set是该类的友元函数
B.ff是某个类的数据成员,Set是该类的成员函数
C.Set不是该类的静态成员函数
D.ff不是该类的常成员数据
30.以下对派生类的描述中,不正确的是30 。
A.一个派生类可以作为另一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员以外,还包含它的基类的成员
D.派生类中,从基类继承来的成员的访问权限在派生类中保持不变
二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)
●基本概念题(共5分)
1.重载函数必须有不同的参数个数或(1 ) 。
2.在派生类中如果没有重载基类中的纯虚函数,则该派生类是(2 ) 类
3.设有以下程序: 、
#include <iostream.h>
#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<iostream.h>
void main(void)
{
static int a[7]={1},i,j;
for(i=1;i<=6;i++)
for(j=i;j>0;j--)
a[j]+=a[j-1];
for(j=0;j<7;j++)。
cout<<a[j]<<endl;
}
程序输出第三行是__6_____,第四行是_____7_______
6.[程序](3分)
#include<iostream.h>
void main(void)
{
char s[]="I am a student.You 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=0;i<26;i++)
if(a[i]!=0) cout<<(char)(i+'a')<<":"<<a[i]<<endl;
} 、
程序的第一行输出为 ( 8 ) ,第三行输出为 ( 9 )
7.[程序](2分)
#include<iostream.h>
int f(int n)
{
int s=1;
if(n==1)
s=1;
else{
if(n==3) cout<<s<<'\n';
s=n*f(n-1);
}
return s;
}
void main(void)
{
int s;
s=f(5);
cout<<"s="<<s<<endl;
}
程序的第一行输出为( 10 ),第二行输出为( 11 )
8.[程序](2分)
#include <iostream.h>
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<<f(s1)<<endl;
cout<<f(s2)<<endl;
}
程序输出的第一行是( 12 ),第二行是( 13 )
9.[程序](3分)
#include <iostream.h>
void main(void)
{
int a[10]={73,86,89,28,87,69,88,84,64,90};
int b[4]={60,70,90,101};
int c[4]={0};
for(int i=0;i<10;i++){
int j=0;
while(a[i]>=b[j])
j++;
c[j]++;
}
for(i=0;i<4;i++)
cout<<c[i]<<"\n";
cout<<endl:
}
程序输出的第一行是__________,第三行是_____________,最后一行是_________
10.[程序](2分)
#include<iostream.h>
class A{
int a; .
public:
void seta(int aa){a=aa;}
virtual void print() //第六行
{cout<<a<<'\t';}
};
class B:public A{
int b;
public:
void setb(int bb){b=bb;}
void print()
{cout<<b<<'\t';}
};
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 <iostream.h>
#include <string.h>
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=”<<n<<”\t二进制形式为:”<<s<<endl;
count++;}
}
cout<<”对称数的个数为:”<<count<<’\n’;
}
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 <iostream.h>
#define N 9
void fun(int *a, int n)
{
int max, min, px, pn, t;
for( int i=0; i<n-1; ___23______){
max=min=a[i];
px=pn=i;
for(int j=i+1; j<n; j++){
if(max<a[j]){
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<<”数组中的数据依次为:”<<endl;
for(int i=0; i<N; i++)
cout<<b[i]<<’\t’;
cout<<endl;
fun(b,N);
cout<<”处理后数组中的数据依次为:”<<endl;
for(i=0; i<N; i++)
cout<<b[i]<<’\t’;
cout<<endl;
}
13.下列程序中的函数change(node *pa,int x)的功能是:调整pa指向的链表中结点的
位置。根据参数X的值,使链表中各结点数据域小于X的结点放在链表的前半部,大于等于x
的结点放在链表的后半部,并将X插人这两部分结点之间。
例如,原链表上各结点的数据依次为:3,4,2,1,9,6,5,0,10,6
输入:X=7
经插入新结点后,新链表的各结点数据依次为:3,4,2,1,6,5,0,6,7,9,10
[程序](4分)
#include <iostream.h>
struct node{
int data;
node *next;
};
node *change(node *pa,int x)
{
node *pl,*p2,*P,*q;
pl=p2=pa;
p=new node; //生成新结点
p->data=x:
while(p2一>data<x && p2一>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的结点插入以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=0;i<9;i++)
a[i].next=&a[i+1];
a[9].next=NULL;
cout<<"输入x的值:";
cin>>x;
head=change(head,x);
p=head; .
while(p){
cout<<p一>data<<'\t';
p=p一>next;
}
cout<<endl;
}
参考答案
一、选择题
21.C
22.B
23.D
24.D
25.C
26.B
27.A
28.C
29.A
30.D
二、填空题
(1)不同的参数类型或者参数类型
(2)抽象
(3)15,3
(4)3
(5)虚基类
(6)15
(7)20
(8)a:4
(9)e:3
(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';或n%2+48
(21)strcmp(sl,q)==0或者!strcmp(sl,q)
(22)func(n,s)
(23)i+=2或i=i+2
(24)a[pn]=t
(25)px!=i+1或者px—i一1
(26)a[px]=t
(27)p2=p2一>next或p2=pl一>next
(28)p2或p2!=0
(29)p2一>next
(30)p一>next=NULL或P一>next=0或P一>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<<s; C. cin>>a; D. cout<<a;
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<<x<<endl;}
void G(double x){cout<<x<<endl;}
}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是表达式,其类型可以是:float,double,int,char、enum。C++中规定,在开关语句中switch(e)中,e的值类型不能是 (5) 。
●阅读程序题
5.[程序]
#include <iostream.h>
int fun(int);
void main(void)
{
int a=2;
for(int i=0;i<3;i++) cout<<fun(a++)<<endl;
}
int fun(int a)
{
int b=0;
static int c=3;
return (b++,c++,a+b+c);
}
程序输出的第二行是__(6)____,第三行是__(7)___。
6. [程序] (2 分)
#include<iostream.h>
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<<a<<’\t’<<b<<endl;
}
}
程序输出的第二行是__(8)___,第四行是 __(9)______。
7. [程序] (2 分)
#include<iostream.h>
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=”<<s<<endl;
static char s1[20];
f2(1357,0,s1);
cout<<”s1=”<<s1<<endl;
}
程序输出的第一行是__(10)____,第二行是___(11)____。
8. [程序] (2 分)
#include<iostream.h>
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<<buf<<endl;
p--;p1=buf;
while(*p++=*p1++);
delete[]=buf;
return s1;
}
void main(void)
{
char s1[30]=”about”,s2[]=”time”;
cout<<f(s1,s2)<<endl;
}
程序输出的第一行是___(12)__,第二行是 __(13)______。
9. [程序](3 分)
#include<iostream.h>
int fun(int x,int y)
{
cout<<x<<’\t’<<y<<endl;
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=”<<m<<endl;
}
程序输出的第一行是___(14)_____,第三行是 _(15)_______,第四行是___(16)___。
10. [程序] (2 分)
#include<iostream.h>
class Base
{
public:
void virtual f() {cout<<”Base::f()”<<endl;}
void virtual g() {cout<<”Base::g()”<<endl;}
};
class A:public Base
{
public:
void f(int a=0) {cout<<”A::f()”<<endl;}
};
class B:public A
{
void f(){cout<<”B::f()”<<endl;}
void g(){cout<<”B::g()”<<endl;}
};
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<iostream.h>
char *nextWord(char **pp)
{
static char word[81];
while(**pp==’ ’) __(19)______;
char *pw=word;
while(**pp&&**pp!=’ ’)
*pw++=*(*pp)++;
____(20)____;
return ___(21)___;
}
v
展开阅读全文