试题类型
《C++程序设计》笔试考试模拟(100分)
1.下列字符列中,可作为C++语言程序自定义标识符是( )。
A.switch B.student C.break D.do
2. 运算符 +、<=、=、% 中,优先级最低的运算符是( )。
A. + B.< C.= D.%
3. 设变量m,n,a,b,c,d的值均为0,执行(m = a==b)||(n=c==d)后,m,n的值是( )。
A.0,0 B. 0,1 C. 1,0 D. 1,1
4. 字符串”vm\t \\\np\102qu”的长度是( )。
A. 8 B. 9 C. 16 D. 17
6.
5.设有代码“int a = 6;”,则执行了语句“a + = a - = a*a;”后,变量a的值是( )。
A.0 B. -24 C. -40 D. –60
6. void main()
{ int x=-1;
do
{x=x*x;}
while(!x);}
下列说法正确的是( )。
A.是死循环 B.循环执行两次
C.循环执行一次 D.有语法错误
7.下面有关for循环的正确描述是( )。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
8.下面程序段( )。
x=3;
do
{y=x--;
if(!y) {cout<<”x”; continue;}
cout<<”#”;}
while(1<=x && x<=2);
A.将输出## B.将输出##*
C.是死循环 D.含有不合法的控制表达式
9.以下正确的说法是( )。
A.用户若需要调用标准函数,调用前必须重新定义
B.用户可以直接调用所有标准库函数
C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数
D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数
10.在参数传递过程中,对形参和实参的要求是()。
A.函数定义时,形参一直占用存储空间
B.实参可以是常量、变量或表达式
C.形参可以是常量、变量或表达式
D.形参和实参类型和个数都可以不同
11.对数组名作函数的参数,下面描述正确的是()。
A.数组名作函数的参数,调用时将实参数组复制给形参数组
B.数组名作函数的参数,主调函数和被调函数共用一段存储单元
C.数组名作参数时,形参定义的数组长度不能省略
D.数组名作参数,不能改变主调函数中的数据
12. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
13. 以下程序的输出结果是( )。
#include <iostream.h>
void main()
{ char s[]="12134211",*p;
int v1=0,v2=0,v3=0,v4=0;
for (p=s;*p;p++)
switch(*p)
{
case '1':v1++;
case '3':v3++;
case '2':v2++;
default: v4++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,7,5,8 C.7,3,2,1 D.8,8,8,8
14. 下列声明结构体变量错误的是( )。
A.struct student B. struct student
{ int no; { int no;
char name[16]; char name[16];
} st1,st2; };
struct student st1,st2;
C.struct student D. struct student
{ int no; { int no;
char name[16]; char name[16];
} ; };
struct st1,st2; student st1,st2;
15. 对类的构造函数和析构函数描述正确的是( )。
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
16. 下面对于友元函数描述正确的是( )。
A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员
C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员
17. 派生类的对象对它的基类成员中( )是可以访问的。
A.公有继承的公有成员 B.公有继承的私有成员
C.公有继承的保护成员 D.私有继承的公有成员
18. C++类体系中,不能被派生类继承的有( )。
A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数
19.以下( )成员函数表示虚函数。
A.virtual int vf(int); B.void vf(int)=0;
C.virtual void vf()=0; D.virtual void vf(int) { };
20. 下面对静态数据成员的描述中,正确的是( )。
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以在类体内进行初始化
C.静态数据成员不能受private控制符的作用
D.静态数据成员可以直接用类名调用
21. 继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性 B.传递性 C.重复性 D.多样性
22.若有以下定义,则释放指针所指内存空间的操作是 ( )。
float r=news float[10];
A.delete r ; B.delete *r;
C.delete []r; D.delete r[];
23.若有以下定义,则对字符串的操作错误的是( )。
char s[10]=”Program”,t[]=”test”;
A. strcpy(s,t); B. cout<<strlen(s);
C. strcat(“this”,t); D. cin>>t;
24.在if语句中的表达式是( )。
A.只能是表达式 B.只能是关系表达式和逻辑表达式
C.只能是逻辑表达式 D.可以是任意表达式
25.在用关键字class定义的类中,以下叙述正确的是( )。
A. 在类中,不作特别说明的数据成员均为私有类型
B. 在类中,不作特别说明的数据成员均为公有类型
C. 类成员的定义必须是成员变量定义在前,成员函数定义在后
D. 类的成员定义必须放在类定义体内部
1.C++程序有且只有一个 。
2.若有变量定义 int x = 7; float a = 2.5, c = 4.7;表达式
a + (int)(x/3*(int)(c + 2)/2) % 4 的值是 。
3. ”x或y中至少有一个小于z”的C++语言表达式是 。
4.将字符串s2拷贝到字符数组s1的函数调用是 。
5.执行语句“ x = (a = 4, b = a++);”后,变量x、a、b的值依次为 。
6.表述“x或y中有一个大于z”的C++语言表达式是 。
7.字符串str长度的函数调用是 。
8.执行语句“ y = (x = 3, z = --x);”后,变量的值依次为_ 。
9.设 #define a(x) x*x;
cout<<a(4+6)<<endl;
上述程序段运行结果为 。
10.设x为整型变量,表达数学关系式:13 < x < 19的C++语言表达式是 。
11.设有代码“static int a[3][4]={{1,2}, {3}, {4,5,6}};”则a[1][1]值为 。
12.若有定义:char u; int b; float v; double d;
则表达式u * b + d - v的值的类型为 。
13.假定所有变量均已正确定义,下列程序段运行后x的值是 。
a = b = c = 0; x = 35;
if(!a)x--;else if(b);if(c)x = 3;else x = 4;
14.类的构造函数的主要作用是
15.C++将类继承分为 和 两种。
16.建立类对象时,为节省内存,系统一般只分配用于 _内存。
17.派生类可以定义其_ _____中不具备的数据和操作。
18.operator是C++的一个关键字,它经常和C++的一个运算符连用,构成一个运算符函数名。运算符函数的返回类型不能是 类型。
19.在继承机制下,当对象消亡时,编译系统先执行________的析构函数,然后再执行_______的析构函数。
20.C++文件的两种类型,分别是 和 。
21.在保护继承关系下,基类有公有成员和保护成员将成为派生类中的 成员,它们只能由派生类的 来访问。
1. #include<iostream.h>
void main( )
{int I;
for(I=1;I<=5;I++)
switch(I%2)
{case 0:I++; cout<<“*”;break;
case 1:I+=2; cout<<“&”;
default: cout<<“\n”;}}
2. #include <iostream.h>
void fun( );
int n=5;
void main( )
{ int n=10;
cout<<n<<endl;
fun();
}
void fun( )
{ cout<<n<<endl;
}
3. #include <iostream.h>
int b=5;
int fun(int n);
void main( )
{ int i;
for(i=0;i<3;i++)
{ cout<<fun(i)<<endl;}
}
int fun(int n)
{ static int a=1;
int c=10;
a=a+100;
b=b+100;
c=c+100;
return a+b+c;
}
4. #include <iostream.h>
int gcd(int m,int n)
{ if(m%n==0) return n;
else return gcd(n,m%n);
}
void main( )
{ int x=40,y=116;
cout<<gcd(y,x)<<endl;
}
5. #include <iostream.h>
#include <conio.h>
class Point{
int x,y;
public:
Point(){x=1;y=1;}
Point(int tx,int ty)
{x=tx;y=ty;}
~Point(){cout<<"Point "<<x<<','<<y<<" is deleted."<<endl; }
};
void main()
{ Point obj1;
Point obj2(10,20); }
6. #include<iostream.h>
class count
{ static int n;
public:
count()
{n++;}
void show()
{cout<<n<<endl;}
~count()
{cout<<n<<endl;n--;
}
};
int count::n=0;
void main()
{ count a;
a.show();
{count b[4];
b[3].show();
}
a.show();
}
四.改正错误(每题有二处错误,在错误语句或表达式画线,并写出正确语句。)(每题 4分,共16分)
1.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。
#include<iostream.h>
#include<stdlib.h>
const int N=10;
int find(int *p,int n,int x)
{ int i ;
*(p+n)=x;
while(*p+i!=x)
i++;
if(i!=n)
return 1;
else
return -1;
}
void main()
{int i,pos,x;
int *p=new int [N];
for(i=0;i<N;i++)
*(p+i)=rand()%50;
for(i=0;i<N;i++)
cout<<*(p+i)<<'\t';
cout<<"\ninput x: ";
cin>>x;
pos=find(p,N,x);
if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;
else cout<<"No find!"<<endl;
}
下列程序求字符串长度。
#include<iostream.h>
int fun(char s)
{ int i=0;
while(s[i]!='\n')
{i++;}
return i;
}
void main()
{char s[80];
cin.getline(s,80); //读一行字符
cout<<"length:"<<fun(s)<<endl;}
2.#include<iostream.h>
class Point
{private:
int x,y;
void init(int a,int b)
{ x=a;y=b;}
void show()
{ cout<<"x= "<<x<<" y="<<y<<endl;}
};
void main()
{ Point a(24,50);
a.show();
}
3. #include <iostream.h>
class Amplifier{
float invol,outvol;
public:
Amplifier(float vin,float vout)
{invol=vin;outvol=vout;}
float gain();
};
Amplifier::float gain() { return outvol/invol; }
void main()
{ Amplifier amp(5.0,10.0);
cout<<"\n\nThe gain is =>"<<gain()<<endl;
}
4.#include <iostream.h>
class Amplifier{
float invol,outvol;
public:
Amplifier(float vin,float vout)
{invol=vin;outvol=vout;}
float gain();
};
Amplifier::float gain()
{ return outvol/invol;}
void main()
{ Amplifier amp(5.0,10.0);
cout<<"\n\nThe gain is =>"<<gain()<<endl;
}
1.有一个一维数组,存放10个职工的年龄,别写两个函数求职工的最大年龄和最小年龄。
#include <iostream.h>
void max_age(int arr[ ]);
int max , min;
void main( )
{ int i;
int array[10];
cout<<"input 10 data:";
for(i=0;i<10;i++)
{ cin>>array[i];}
max_age(array);
min_age(array);
cout<<"max_age is :"<<max<<endl; //使用全局变量max
cout<<"min_age is :"<<min<<endl; //使用全局变量min
}
void max_age(int arr[ ])
{ int j;
max=arr[0]; //使用全局变量max
for(j=1;j<10;j++)
if ( )
max=arr[j]; //使用全局变量max
}
void min_age(int arr[ ])
{int k;
min=arr[0]; //使用全局变量min
for(k=1;k<10;k++)
if (min>arr[k])
; //使用全局变量min
}
2.下列函数swap实现数据交换功能功能,请填空。
#include<iostream.h>
void swap(int *p,int *q)
{int temp;
temp=*p;
; //1
; //2
}
void main()
{int a,b;
int *p1,*p2;
cout<<"请输入两个正数:";
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
1.根据π/4 =1-1/3+1/5-1/7+…求π的近似值,直到最后一项的值小于0.000001为止。(10分)
2.有一行字符,要求将每个单词中的第一个字母改成大写字母(如果已经是大写则不变)。(提示读一行字符用cin.getline( ) ) (10分)
3. 编写一个函数求满足以下条件的最大的n:
12+22+32+…+n2<1000
4.定义一个抽象类shape用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。程序中通过基类有指针来调用派生类中的虚函数,计算不同形状的面积。(15分)