第二部分 Visual C++程序设计 21.设有变量说明:”short int a=0,b=0;”则表达式sizeof(‘a’+’b’)的值是( ) A. 1 B. 2 C.4 D.8 22.下列关于while和do … while循环语句的叙述中正确的是( ) A. do …while 的循环体至少执行一次 B. while的循环体至少执行一次 C.do… while的循环体不能是复合语句 D.do … while 允许从循环体外跳转到循环体内 23.设有函数原型说明, void test(int a, int b=7, char *c=”#”) 下面的函数调用中存在语法错误的是( ) A.test(3) B. test(3,8.2) C. test(6,”*”) D. test(0,0,”*”) 24.执行以下程序时,输入一行字符串为: Thank you very much! 程序的输出结果为( ) #include void main(void) { char line[100]; cin>>line;cout< } A.T B.Thank C. Thank you very much! D.Thank you 25.下列关于运算符重载的叙述中正确的是( ) A. 运算符重载可以改变操作数的个数 B.运算符重载可以改变运算符的优先级 C.运算符重载可以改变运算符的结合性 D.运算符的重载不能改变操作数的个数,也不能改变运算符的优先级和结合性 26.定义以下的类: class X{ int a; public: X(int x=0){ a=x;} } ; class Y : public X{ int b; public:Y(int x=0,int y=0):X(y){b=x;} }; 在下列选项的说明语句中,存在语法错误的是( ) A. X *pa=new Y(1,2) B. X a1= Y(1,3); C. X b2(2,3); Y &a2=b2; C. Y b3(10); X a3(b3); 27.设有以下语句: int a=5; int arr[a]; const int b=5; int x[b]; int c=5; int *p=new int[c]; const int d=5; int *p1= new int[d]; 其中存在语法错误的是( ) (A).第一行 (B)第二行 (C)第三行 (D) 第四行 28.设有说明语句: float a[3][3]={1,2,3,4,5}, *b[3]={0}, (*c)[3]=a, **d=0; 以下选项中语法正确的语句是( ) A. a[0]=b[0]; B.b[0]=c[0]; C. c[0]=d[0]; D.d[0]=a[0][0]; 29.下列关于虚函数的描述中正确的是( ) (A).虚函数可以是一个static类型的成员函数 (B).虚函数可以是一个非成员函数 (C).虚函数实现静态多态性 (D).基类中采用virtual说明一个虚函数后,派生类中定义相同原型的虚函数时,可不必加virtual说明 30.设变量a、b是整型变量,下列switch语句中正确的是( ) A.switch(a) B. switch(a+b) { { case a: a++; break case 1: b=a++;break; case b: b++;break case 1: a=++b; } } C. switch(a*a) D. switch(a/10+b) { { case 10,12 :++a; case 3: b=a/10;break; case 14,16: ++b; default: a+=b; } }
二:填空题: 1.对于switch(e),表达式e只能是整型、( )或枚举型表达式 2.面向对象程序设计的三大特性是封状性,继承性和( ) 3.执行以下语句后,a的值为 ( ) int a=0, m=3, n=10; a=(m++,m+n); 4.在c++中,标识符是以字母或( )开头的,由字母、数字和( )组成的字符序列 5.在C++中,类的每一个非静态成员函数都有一个( )指针,该指针指向正在调用成员函数的对象 阅读程序题 6.[程序](2分) # include int fun(int x,int y) { x=x+y; y=x+y; cout<<”x=”< return x+y; }
void main(void) { int x=5, y=8, z=fun(x,y); cout<<”x=”< cout<<”z=”< } 程序输出的第二行是( ),第三行是( ) 7.[程序] (3分) # include int f(int m, int &n) { static int a=1; int c=2; m+=++a; n+=++c; return m+n; }
void main(void) { int a=1, b=2; cout< cout< } 程序输出的第一行是( ),第二行是( ),第三行是( ) 8.[程序] # include
void findmax(int *a, int n, int i, int *pk) { if(i { if(a[i]>a[*pk]) *pk=i; findmax(a,n,i+1,pk); } }
void main(void) { int a[10]={34,32,23,12,67,54,44,60,33,24}, index =0; findmax(a,10,0,&index); cout< cout<<”Its’ index is:”<} 程序输出的第一行是( ),第二行是( ) 9.[程序] #include int a=100; int fun(int *a, int &b,int c) { static int e; *a+=e++; b++; c+=::a++; e=*a+b+c; return e; }
void main(void) { int a=10, b=1; c=1; cout< cout<<::a+a+b+c<<’\n’; }
程序输出的第一行是( ),第二行是( ) 第三行是( ) 10.[程序] #include #include
class Base{ char str[20]; public: Base(char *s=”Base default”) { strcpy(str,s); cout< } };
class Inh1:public virtual Base{ char str1[20]; public: Inh1(char *s1, char *s2): Base(s1) { strcpy(str1,s2); cout< } };
class Inh2: public virtual Base{ char str2[20]; public: Inh2(char *s1, char *s2): Base(s1) { strcpy(str2,s2); cout< } };
class Inh3: public Inh1, public Inh2 { char str3[20]; public: Inh3(char *s1, char *s2, char *s3, char *s4): Inh1(s1,s2),Inh2(s1,s3) { strcpy(str3,s4); cout< } };
void main(void) { Inh3 a(“class Base,”class Inh1”,”class Inh2”,”class Inh3”); } 程序输出的第二行是( ),第三行是( ),第四行是( ) 完善程序题 11.下面程序的功能是:将二维数组a中的每个元素向右移一列,最后一列移到最左边,并按矩阵形式输出数组a.例如: 数组移动前为: 1 2 3 4 5 6 7 8 9 移动后为: 3 1 2 6 4 5 9 7 8 [程序] #include #define ROW 3 #define COL 3 void fun( ) { int i,j, t; for(i=0; i { t=*(*(p+i)+ROW-1); for(j=COL-1;j>0;j--) *(*(p+i)+j)=( ) ( )=t; } }
void main(void) { int a[ROW][COL]={1,2,3,4,5,6,7,8,9}; int i,j; fun(a); for( ) { for(j=0;j cout<<’\n’; } } 12.以下程序的功能是:从一个字符串str中删除或添加一个指定的字符,若指定的字符c出现在字符串str中,则从str中删除第1个值为c的字符,否则把字符c添加到str的尾部,在程序中,函数dele()从字符串中删除第一个字符,函数add()添加一个字符到字符串尾部,函数search()用于查找指定的字符是否在字符串中,若在,则返回所在位置,否则返回0.
#include
char *search(char *s, char ch) { while(*s) if(*s++==ch) ruturn ( ) return 0; }
void dele(char *s , char ch) { char *p1=search(s,ch), *p2=p1+1; while(*p2) *p1++=*p2++; *p1=’\0’; }
void add(char *s, char ch) { while(*s) s++; ( )=ch; *s=’\0’; }
void main(void) { char str[80]=”abc12123”, c; cout< cin>>c; void( ); if(search(str,c)) fp=dele; else fp=add; fp( ); cout<} 13.下面程序中,主函数建立一条单向链表,链表上的一个结点为一个学生的记录(由学号和成绩组成),在主函数中产生若干名学生的记录,并放在链表中,函数fun()的功能是:先求出链表上所有学生的平均成绩,并通过形参aver带回,然后将高于或等于平均成绩的学生记录放在h所指向的新链表中,最后返回新链表的头接点指针h # include #include struct student { char no[10]; float grade; student *next; }
student *fun(student *head, float &aver) { student *h, *p, *p1; float sum=0; int n=0; aver=0; h=null; p=head; while(p!=null) { ( ); n++; p=p->next; } aver=sum/n; p=head; while(p!=null) { if(p->grade>=aver) { p1=new student;( ); p1->grade=p->grade; p1->next=h; h=p1; } ( ); } return h; }
void main(void) { student *head, *p, *h; char no[10]; float aver; head=null; cout<<”输入学号”; cin>>no; while(*no !=’#’) { p=new student; strcpy(p->no,no); cout<<”输入成绩”;cin>>p->grade; ( ); head=p; cout<<”输入学号(首字符#表示结束输入):”; cin>>no; } p=head; while(p!=null){ cout<no<<’\t’<grade<<’\t’<<’\n’; p=p->next; } h=fun(head,aver); cout< p=h; while(p!=null) { cout<no<<’\t’<grade<<’\t’<<’\n’; p=p->next; } p=head; while(p!=null) { head=head->next; delete p; p=head; } p=h; while(p!=null) { h=h->next; delete p; p=h; } }
|