江苏计算机等级vc++2008春试题 |
第二部分Visual C++程序设计 ’ 一、选择题(用答题卡答题,答案依次填在答题号内) 21•下列关于switch语句的描述中正确的是(21) 。 A•switch语句中的default子句可以没有,也可以有多个 B•switch语句中的每个子句中必须有break语句 c•switch语句中的default子句只能放在最后 D.switch语句中的case子句后面的表达式只能是整型表达式 22•下列函数原型说明中,错误的是 (22) 。 A•int &fl(); B.int f2(double =5); C•void f3(void (*p)()); D.int f4(int a=O,int b); 23.设有说明语句; float y=5.16347;int x; 则以下表达式中,可以实现将y中的数值保留小数点后两位,第三位四舍五入的表达式是 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}; 下列选项中,存在语法错误的是 (24) 。 A.cin>>s; B.cout<<s; C.cin>>a; D.cout<<a; 25•下列关于new运算符的叙述中不正确的是(25) 。 A•使用运算符new创建对象时必须定义初始值 B•使用运算符new创建对象时会调用类的构造函数 C•运算符new可以用来动态创建对象和对象数组 2•使用new运算符创建的对象可以使用运算符delete撤销 26•若有说明语句; int s[4][6],t[6][4],(*p)[6]; 则以下选项中正确的是 ( 26 ) 。 A.p=t B.p=s c.p=s[0]; D.p=t[0]; 27.以下叙述中不正确的是 (27) A•在函数内的复合语句中定义的变量在本函数范围内有效 B•形式参数是局部变量 C•在函数内定义的变量只在本函数范围内有效 O•在不同函数中可以使用相同名字的变量 28•以下有关抽象类的叙述中不正确的是 (28) . A.抽象类至少含有一个纯虚函数 B.抽象类至少含有一个没有函数体的虚函数 c.在抽象类的派生类中可以据供纯虚函数的实现代码 D.可以说明抽象类的对象 29.下列关于构造函数的描述中不正确的是 A.构造函数可以设置缺省参数 B.构造函数在定义类的对象时自动执行,但不用显示调用 C.构造函数可以对静态数据成员进行初始化 D.构造函数可以重载 30.设有类定义: class B{ public: void G(float x=O){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( 二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行) •基本概念题(共5分) 1.在构造函数和析构函数中,可以定义为虚函数的是________。 2• 若有说明语句: float a[]={1,2,3,4,5}; int b=&a[3]-&a[0]; 则执行以上语句后,b的值为_______ 3.在C++中,重载赋值运算符"="只能用______函数实现,而重载插入运算符"<<"和提取 运算符">>"只能用_______函数实现 4.设e是表达式,其类型可以是:float、double、int、char、enum,C++中规定,在开关语句 switch(e)中,e的值类型不能是________ ●阅读程序题(共13分) 5.[程序](2分) #include <iostream.h> int fun(int); void main(void) { int a=2; for(int i=O;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.[程序](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; } } 程序输出的第二行是( ) ,第四行是( ) 7.[程序](2分) #include <iostream.h> void f1(int n,int &i,char s[]) {s[i]='0'+n%10; n=n/lO; 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/lO,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<<end1; static char s1[20]; f2(1357,0,s1); cout<<"s1="<<s1<<end1; } ' 程序输出的第一行是( ) ,第二行是( )。 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; whi1e(*p++=*p1++); de1ete []buf; return s1; } void main(void) {char s1[30]="about ",s2[]="time "; cout<<f(s1,s2)<<endl; } 程序输出的第一行是______ ,第二行是_______。 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; } 程序输出的第一行是_____,第三行是______,第四行是________ 。 lO.[程序](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=O){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(); } 程序输出的第一行是( ) ,第三行是( ) 。 完善程序题(共12分) 11.下面的程序功能是:将一个字符串中的单词分行输出。例如,对字符串:"What is your name?",执行程序后,输出结果为 What is your name? [程序](4分) #include <iostream.h> char *nextWord(char **pp) {static char word[81]; while(**pp=='') _______; char *pw=word; while(**pp&&**pp!=' ') *pw++=*(*pp)++; _______ ; return ______ ; } void main(void) {char s[]="What is your name?",*ps=s; do{cout<<nextWord(_________)<<endl; } 12.以下程序的功能是:二维数组a中每列元素都是从小到大有序排列的,将一维数组b中的 元素依次插入到数组a的每列中,并保持a中每列数据的有效性,最后将执行插入操作 后的数组a以矩阵形式输出。例如: 原数组 1 3 2 1 3 1 4 6 8 2 6 2 8 9 10 数组b为{2 7 1}操作后的数组a为:4 7 8 8 9 10 [程序](4分) #include <iostream.h> #include <iomanip.h> #define ROW 4 #define COL 3 void f(int a[][COL],int b[]) {int i,j; for(_________ ){ for(j=ROW-1;j>0;j--) if(a[j-1][i]>b[i]) (24) ; else break; (______) ; } } 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<ROW-1;i++){ for(int j=0;j<COL;j++)cout<<setw(5)<<a[i][j]; cout<<endl; } cout<<endl: __________; cout<<"插入后数组中的数据依次为:"<<'\n'; for(i=0;i<ROW;i++){ for(int j=0;j<COL;j++) cout<<setw(5)<<a[i][j]; cout<<endl; } } |