c++试题和答案(学生)

  • 格式:docx
  • 大小:37.82 KB
  • 文档页数:12

一. 填空1、#include <iostream.h>Using namespace std;int add(int a,int b);int main(){int x,y,sum;cout<<"Enter two numbers:"<<'\n';//在下画线处填上语句,完成用cin读入x和ycin>>x;cin>>y;sum=add(x,y);cout<<"The sum is:"<<sum<<'\n';return 0;}int add(int a,int b){//在下画线处填上语句,完成计算a与b的和并返回之return a+b;}2、#include <iostream.h>Using namespace std;int main(){char name[20];cout<<”Hello,your name:”;//在下画线处填上语句,完成将字符串输入到数组name中cin>>name;//在下画线处填上语句,完成将name数组用cout输出cout<<name<<endl;return 0;}3#include <iostream.h>Using namespace std;int mul(int x,int y) //mul函数1{ return x*y; }int mul(int x,int y,int z) //mul函数2{ return x*y*z; }void main(){int a=3,b=4,c=5;//在下画线处填上语句,用于调用mul函数1cout<<a<<'*'<<b<<'='<<mul(a,b)<<endl;//在下画线处填上语句,用于调用mul函数2cout<<a<<'*'<<b<<'*'<<c<<'='<< mul(a,b,c)<<endl;}4#include <iostream.h>Using namespace std;main(){int *p; //声明一个整型指针变量p//在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给pp=new int;*p = 10;cout<<*p; //在下画线处填上语句,用于撤销指针p,释放p指向的存储空间delete p;return 0;}5#include <iostream.h>main(){int *p;//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p p=new int;if (!p){cout<<"allocation failure\n";return 1;}//在下画线处填上语句,将p所指向的存储区赋值20*p=20;cout<<*p;//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间delete p;return 0;}6下列程序的输出结果是7 。

#include <iostream>using namespace std;int main(){int i = 5;int *p =& i;*p = 7;cout << i << endl;return 0;}(15也用了)7下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。

(注:阶乘的定义是n!=n*(n-1)*...*2*1)unsigned fact(unsigned n){if ( n<= 1)return 1;return n*fact(n-1) ;}8与成员访问表达式p->name等价的表达式是(*P).name 。

9.UML的全称为Unified Modeling Language,统一建模语言。

10.UML中有结构事物,动作事物,分组事物,注释事物四种类型事物。

11.UML中的四种关系为依赖,关联,泛化,实现。

12.类Sample的构造函数将形参data赋值给数据成员data。

请将类定义补充完整。

class Sample{public:Sample(int data=0);Private:Int data;};Sample::Sample(int data){【this->data=data;】}(13)若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为【double】。

(14)有如下循环语句:For(int i=50; i>20; i-=2)cout<<i<<',';运行时循环体的执行次数是【15】。

(15)利用表达式a[i]可以访问int型数组a中下标为i的元素。

在执行了语句int *p=a;后,利用指针p也可访问该元素,相应的表达式是【*(p+i)】。

(16)下面是一个递归函数,其功能是使数组中的元素反序排列。

请将函数补充完整。

void reverse(int *a, int size){if(size<2) return;int k=a[0];a[0]=a[size-1];a[size-1]=k;reverse(a+1,size-1 );}(17)有如下类定义:class Sample{public:Sample();~Sample();Private:Static int date;};将静态数据成员data初始化为0的语句是【int Sample::data = 0;】(18)“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape,请将Triangle类中的CalArea函数补充完整。

class Shape{public:virtual int CalArea()=0;}class Triangle: public Shape{public:Triangle{int s, int h}: side(s),height(h) {}int CalArea(int side,int height) { return side*height/2 ; }private:int side;int height;};(19)UML的定义包括UML语义和UML表示法。

(20)观看以下程序:class point{public:void show() {cout<<”point”<<endl;}};void main(){point p1;point *p;p=&p1;p1.show(); ______________//通过对象p1访问show函数p->show() ;//通过指针p访问show函数}21、在C++类中可以包含___公有___________、___私有___________和_____保护_________三种具有不同访问控制权的成员。

22、定义类时,在类头中将使用关键字____class_________来表示类定义的开始。

如果一个类中至少有一个纯虚函数,则该类称为______抽象类__________。

23、C++类的组成包括数据成员和______成员函数________,友元_____不是(是、不是)该类的成员函数。

24、友员函数是用关键字______friend ______修饰的非成员函数。

25、若有:int i;int &j=i;i=10;j=i+1;则i=11,j=11。

26、new的功能是动态申请内存空间,delete的功能是释放由new申请的空间。

二.选择题1 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c (派生类的构造函数),这3种构造函数的调用顺序为()A abcB acbC cabD cba答案:A2下面描述中,符合结构化程序设计风格的是(A)A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B)模块只有一个入口,可以有多个出口C)注重提高程序的执行效率D)不使用goto语句3下面概念中,不属于面向对象方法的是(D)A)对象B)继承C)类D)过程调用4关于面向对象的程序设计方法,下列说法正确的是(D)A)“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理B)“多态性”指的是对象的状态会根据运行时要求自动变化C)基类的私有成员在派生类的对象中不可访问,也不占内存空间D)在面向对象的程序设计中,结构化程序设计方法仍有着重要作用5判断字符型变量ch是否为大写英文字母,应使用表达式(D)A ) ch>='A' & ch<='Z'B ) ch<='A' ||ch>='Z'C ) 'A'<=ch<='Z'D ) ch>='A' && ch<='Z'6已知下列语句中的x和y都是int型变量,其中错误的语句(C)A ) x=y++;B ) x=++y;C ) (x+y)++;D ) ++x=y;7执行语句序列(D)int n;cin >> n;switch(n){ case 1:case 2: cout << '1';case 3:case 4: cout << '2'; break;default: cout << '3';}时,若键盘输入1,则屏幕显示A)1 B)2 C)3 D)128关于动态存储分配,下列说法正确的是(B)A)new和delete是C++语言中专门用于动态内存分配和释放的函数B)动态分配的内存空间也可以被初始化C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new9)对类的构造函数和析构函数描述正确的是(A)A 构造函数可以重载,析构函数不能重载B 构造函数不可以重载,析构函数可以重载C 构造函数可以重载,析构函数也可以重载D构造函数不能重载,析构函数也不能重载(10)下列程序的输出结果是(A)#include <iostream>using namespace std;int main(){char a[] = "Hello, World";char *ptr = a;while (*ptr){if (*ptr >= 'a' && *ptr <= 'z')cout << char(*ptr + 'A' -'a');else cout << *ptr;ptr++;}return 0;}A ) HELLO, WORLDB ) Hello, WorldC ) hELLO, wORLD D ) hello, world11) 已知:int m=10;在下列定义引用的语句中,正确的是(A)A ) int &x=m;B )int y=&m;C )int &z;D ) int &t=&m;(17)下列函数原型声明中错误的是(D)A ) void Fun(int x=0, int y=0);B ) void Fun(int x, int y);C ) void Fun(int x, int y=0);D ) void Fun(int x=0, int y);(12)已知程序中已经定义了函数test,其原型是int test(int, int, int);,则下列重载形式中正确的是(B)A ) char test(int,int,int);B ) double test(int,int,double);C ) int test(int,int,int=0);D ) float test(int,int,float=3.5F);(13)已知函数f的原型是:void f(int *a, long &b); 变量v1、v2的定义是:int v1;long v2;,正确的调用语句是(C)A) f(v1, &v2); B) f(v1, v2);C) f(&v1, v2); D) f(&v1, &v2);(14)有以下类定义class MyClass{public:MyClass(){cout<<1;}};则执行语句MyClass a, b[2], *p[2];后,程序的输出结果是(B)A)11 B)111 C)1111 D)11111(15)关于动态存储分配,下列说法正确的是(B)A)new和delete是C++语言中专门用于动态内存分配和释放的函数B)动态分配的内存空间也可以被初始化C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new(16)关于友元,下列说法错误的是(A)A)如果类A是类B的友元,那么类B也是类A的友元B)如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员C)友元关系不能被继承D)如果类A是类B的友元,那么类A的所有成员函数都是类B的友元(17)在公有派生的情况下,派生类中定义的成员函数只能访问原基类的(C)A)公有成员和私有成员B)私有成员和保护成员C)公有成员和保护成员D)私有成员、保护成员和公有成员(18)在C++中用来实现运行时多态性的是(D)A)重载函数B)析构函数C)构造函数D)虚函数(19)一个类可以同时继承多个类,称为多继承。