C++ 练习题.docx
- 文档编号:12036979
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:69
- 大小:36.98KB
C++ 练习题.docx
《C++ 练习题.docx》由会员分享,可在线阅读,更多相关《C++ 练习题.docx(69页珍藏版)》请在冰豆网上搜索。
C++练习题
C++初步知识
1.1判断题
√1.C语言是C++语言的一个子集。
C++语言继承了C语言。
×2.引用是一种变量,它也有值和地址值。
√3.引用是某个变量的别名,引用是被绑定在被引用的变量上。
√4.创建引用时要用一个同类型的变量进行初始化。
×5.C++语言中,函数可以用原型说明,也可用简单说明。
×6.没有返回值的函数不能设置为内联函数。
×7.函数可以设置默认的参数值,默认参数值必须设置在函数定义时的形参上。
1.2单选题
1.下列关于面向对象概念的描述中,错误的是(C)。
A.面向对象方法比面向过程方法更加先进
B.面向对象方法中使用了一些面向过程方法中没有的概念
C.面向对象方法替代了结构化程序设计方法
D.面向对象程序设计方法要使用面向对象的程序设计语言
2.下列关于类的描述中,错误的是(A)。
A.类就是C语言中的结构类型
B.类是创建对象的模板
C.类是抽象数据类型的实现
D.类是具有共同行为的若干对象的统一描述体
3.下列关于对象的描述中,错误的是(C)。
A.对象是类的一个实例
B.对象是属性和行为的封装体
C.对象就是C语言中的结构变量
D.对象是现实世界中客观存在的某种实体
4.下列关于创建一个int型变量的引用,正确的是(A)。
A.inta(3),&ra=a;B.inta(3),&ra=&a;
C.doubled(3.1);int&rd=d;D.inta(3),ra=a;
5.下列关于引用概念的描述中,错误的是(A)。
A.引用是变量,它具有值和地址值
B.引用不可以作数组元素
C.引用是变量的别名
D.创建引用时必须进行初始化
6.已知:
inta(5),&ra=a;下列描述中,错误的是(D)。
A.ra是变量a的引用,即为变量的别名B.ra的值为5
C.ra的地址值为&aD.改变ra的值为10,变量a值仍为5
7.下列关于设置函数默认的参数值的描述中,错误的是(C)。
A.可对函数的部分参数或全部参数设置默认值
B.在有函数说明时,默认值应设置在函数说明时,而不是定义时
C.设置函数默认参数值时,只可用常量不可用含有变量的表达式
D.设置函数参数默认值应从右向左设置
8.下列设置函数参数默认值的说明语句中,错误的是(C)。
A.intfun(intx,inty=10);B.intfun(intx=5,int=10);
C.intfun(intx=5,inty);D.intfun(intx,inty=a+b);
9.下列选择重载函数的不同实现的判断条件中,错误的是(D)。
A.参数类型不同B.参数个数不同
C.参数顺序不同D.函数返回值不同
10.说明一个内联函数时,应加关键字是(A)。
A.inlineB.static
C.voidD.extern
1.3填空题
1.C++语言具有面向对象方法中要求的四大特性:
封装性、继承性抽象性和多态性。
2.引用不是变量,它是某个变量或对象的别名。
引用的值是被引用的变量的值,引用的地址值是被引用的变量的地址值。
3.使用关键字inline说明的函数称为内联函数,具有相同函数名但具有不同实现的函数称为重载函数。
4.在引用调用中,函数实参用变量名,形参用引用名。
1.4分析下列程序的输出结果
1.
#include
intadd(int,int=5);
voidmain()
{
inta(8);
cout<<"sum1="< cout<<"sum2="< cout<<"sum3="< } intadd(inti,intj) { returni+j; } 答: sum1=13 sum2=21 sum3=29 2. #include voidswap(int&,int&); voidmain() { inta(8),b(5); cout<<"a="< swap(a,b); cout<<"a="< } voidswap(int&i,int&j) { intt; t=i; i=j; j=t; } 答: a=8,b=5 a=5,b=8 1.5简单回答下列问题 1、什么是引用? 引用有哪些特征? 答: 引用不是变量,是变量或对象的别名。 引用的值和地址值都是被引用的变量的值和地址值。 当被引用的变量值被改变,则引用的值也被改变,反之亦然。 2、内联函数与一般函数有何不同? 答: 内联函数的函数体是在编译时被替换,一般函数的函数体是在调用时被转去执行。 前者可以提高速度,后者可以减少代码,各有利弊。 3、对重载函数设置默认参数值,对重载函数的选择是否会有影响? 答: 是会有影响的。 i.;类和对象 (一) 练习题2 2.1判断题 ×1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。 ×2.类中的成员函数都是公有的,数据成员都是私有的。 √3.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。 √4.对象成员的表示方法与结构变量成员的表示方法相同。 √5.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。 √6.构造函数是一个其名与类名相同的特殊的成员函数。 √7.构造函数和析构函数都是系统自动调用的成员函数。 √8.成员函数与一般函数一样可以重载、内联和设置参数的默认值。 ×9.静态数据成员必须在构造函数的成员初始化列表中进行初始化。 √10.静态成员都可以使用类名加作用域运算符的方法来引用。 ×11.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。 ×12.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。 √13.常对象需要引用常成员函数,而不能引用非常成员函数。 √14.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。 √15.友元类中的所有成员函数都是友元函数。 2.2单选题 1.下列关于类的定义格式的描述中,错误的是(C)。 A.类中成员有3种访问权限 B.类的定义可分说明部分和实现部分 C.类中成员函数都是公有的,数据成员都是私有的 D.定义类的关键字通常用class,也可用struct 2.下列关键字中,不属于定义类时使用的关键字是(D)。 A.classB.struct C.publicD.default 3.下列关于成员函数的描述中,错误的是(A)。 A.成员函数的定义必须在类体外 B.成员函数可以是公有的,也可以是私有的 C.成员函数在类体外定义时,前加inline可为内联函数 D.成员函数可以设置参数的默认值 4.下列关于对象的描述中,错误的是(D)。 A.定义对象时系统会自动进行初始化 B.对象成员的表示与C语言中结构变量的成员表示相同 C.属于同一个类的对象占有内存字节数相同 D.一个类所能创建对象的个数是有限制的 5.下列关于构造函数的描述中,错误的是(C)。 A.构造函数可以重载 B.构造函数名同类名 C.带参数的构造函数具有类型转换作用 D.构造函数是系统自动调用的 6.下列关于析构函数的描述中,错误的是(A)。 A.析构函数的函数体都为空 B.析构函数是用来释放对象的 C.析构函数是系统自动调用的 D.析构函数是不能重载的 7.下列关于静态成员的描述中,错误的是(C)。 A.静态成员都是使用static来说明的 B.静态成员是属于类的,不是属于某个对象的 C.静态成员只可以用类名加作用域运算符来引用,不可用对象引用 D.静态数据成员的初始化是在类体外进行的 8.下列关于常成员的描述中,错误的是(C)。 A.常成员是用关键字const说明的 B.常成员有常数据成员和常成员函数两种 C.常数据成员的初始化是在类体内定义它时进行的 D.常数据成员的值是不可以改变的 9.下列关于友元函数的描述中,错误的是(B)。 A.友元函数不是成员函数 B.友元函数只可访问类的私有成员 C.友元函数的调用方法同一般函数 D.友元函数可以是另一类中的成员函数 10.下列关于类型转换函数的描述中,错误的是(C)。 A.类型转换函数是一种成员函数 B.类型转换函数定义时不指出类型,也没有参数 C.类型转换函数的功能是将其函数名所指定的类型转换为该类类型 D.类型转换函数在一个类中可定义多个 2.3填空题 1.类体内成员有3个访问权限,说明它们的关键字分别是公有、私有和保护。 2.使用class定义的表中,成员的默认访问权限是私有的;由struct定义的类中,成员的默认的访问权限是公有的。 3.如果一个类中没有定义任何构造函数时,系统会自动提供一个默认构造函数;同样,类中没有定义析构函数时,系统会自动提供一个默认析构函数。 4.静态成员是属于类的,它除了可以通过对象名来引用外,还可以使用 类名限定来引用。 5.友元函数是被说明在类体内的非成员函数。 友元函数可访问该类中的全部成员。 2.4分析下列程序的输出结果 1. #include classA { public: A() { a1=a2=0; cout<<"Defaultconstructorcalled.\n"; } A(inti,intj); ~A() {cout<<"Destructorcalled.\n";} voidPrint() {cout<<"a1="< private: inta1,a2; }; A: : A(inti,intj) { a1=i; a2=j; cout<<"Constructorcalled.\n"; } voidmain() { Aa,b(5,8); a.Print(); b.Print(); } 答: Defaultconstructorcalled. Constructorcalled. a1=0,a2=0 a1=5,a2=8 Destructorcalled. Destructorcalled. 2. #include classB { public: B() {cout<<++b< ~B() {cout< staticintGetb() {returnb;} private: staticintb; }; intB: : b=10; voidmain() { Bb1,b2,b3; cout< : Getb()< } 答: 11 12 13 13 13 12 11 3. #include classDate { public: Date(inty,intm,intd) { year=y; month=m; day=d; } friendvoidPrint(Date&); private: intyear,month,day; }; voidPrint(Date&d) { cout< } voidmain() { Dated1(2005,10,1),d2(2005,12,9); Print(d1); Print(d2); } 答: 2005/10/1 2005/12/9 4. #include classC { public: C(inti,intj) {c1=i;c2=j;} voidSum(Ca,Cb) { c1=a.c1+b.c1; c2=a.c2+b.c2; } voidPrint() {cout<<"c1="< private: intc1,c2; }; voidmain() { Ca(6,9); Cb(a); Cc(b); c.Sum(a,b); c.Print(); } 答: c1=12,c2=18 5. #include classS { public: S() {PC=0;} S(S&s) { PC=s.PC; for(inti=0;i elems[i]=s.elems[i]; } voidEmpty() {PC=0;} intIsEmpty() {returnPC==0;} intIsMemberOf(intn); intAdd(intn); voidPrint(); private: intelems[100],PC; }; intS: : IsMemberOf(intn) { for(inti=0;i if(elems[i]==n) return1; return0; } intS: : Add(intn) { if(IsMemberOf(n)) return1; elseif(PC==100) return0; else { elems[PC++]=n; return1; } } voidS: : Print() { cout<<'{'; for(inti=0;i cout< if(PC>0) cout< cout<<'}'< } voidmain() { Sa; cout< a.Print(); Sb; for(inti=1;i<=5;i++) b.Add(i); b.Print(); cout< cout< for(i=6;i<=10;i++) b.Add(i); Sc(b); c.Print(); } 答: 1 {} {1,2,3,4,5} 1 0 {1,2,3,4,5,6,7,8,9,10} 2.5编程题 1.按下列要求编程: (1)定义一个描述矩形的类Rectangle,包括的数据成员有宽(width)和长(length); (2)计算矩形周长; (3)计算矩形面积; (4)改变矩形大小。 通过实例验证其正确性。 答: 编程如下: #include classRectangle { public: Rectangle(inta,intb) {width=a;length=b;} intArea() {returnwidth*length;} intPeriment() {return2*(width+length);} voidChangesize(inta,intb) {width=a;length=b;} voidPrint(); private: intwidth,length; }; voidRectangle: : Print() { cout<<"AREA="< cout<<"PERIMENT="< } voidmain() { Rectangler(5,8); r.Print(); r.Changesize(3,9); r.Print(); } 2.编一个关于求多个某门功课总分和平均分的程序。 具体要求如下: (1)每个学生信息包括姓名和某门功课成绩。 (2)假设5个学生。 (3)使用静态成员计算5个学生的总成绩和平均分。 答: 编程如下: #include #include classStudent { public: Student(chars[],intgr) {strcpy(name,s);grade=gr;totalize+=gr;} staticvoidPrint(); private: charname[10]; intgrade; staticinttotalize; }; intStudent: : totalize=0; voidStudent: : Print() { cout<<"总成绩为"< } voidmain() { Students1("ma",85),s2("Wang",96),s3("Li",82),s4("lu",78),s5("zhang",80); Student: : Print(); } 2.6.简单回答下列问题 1、一个类中是否必须有用户定义的构造函数? 如果用户没有定义构造函数,又如何? 答: 一个类用户可以不定义构造函数,这时系统自动提供一个默认的构造函数。 2、拷贝构造函数具有几个参数? 它有类型转换的作用吗? 答: 拷贝构造函数具有一个参数,即为该类对象的引用。 拷贝构造函数没有类型转换作用。 3、静态成员属于类的,是否每个对象都可以引用该静态成员? 答: 可以。 4、常对象可以引用非常成员函数吗? 非常对象可以引用常成员函数吗? 答: 不可以。 可以。 5.友元函数能否访问类中的保护成员? 友元函数访问类中私有成员与成员函数访问私有成员的形式相同吗? 答: 能。 不相同。 类和对象 (二) 练习题3 3.1判断题 ×1.定义对象指针时也要调用构造函数。 √2.对象指针可用同类对象的地址值给它赋值。 √3.常类型指针有两种,一种是指针的地址值是常量,另一种是指针所指向的变量或对象是常量。 ×4.指向对象的常指针的地址值是可以改变的。 ×5.指向常对象的指针所指向的对象是可以改变的。 √6.this指针是系统生成的指向当前被某个成员函数操作对象的指针。 ×7.定义对象引用时,可以对其引用进行初始化,也可以不进行初始化。 ×8.对象数组的元素可以是不同类的对象。 ×9.对象指针数组可以使用不同类的对象的地址值进行初始化。 ×10.自身类对象可作该类的子对象。 √11.子对象的初始化要在构造函数的成员初始化列表中进行。 √12.使用new运算符创建的对象称为堆对象。 ×13.使用new运算符创建的对象数组其元素都具有默认值。 3.2单选题 1.f1()函数是类A的公有成员函数,p是指向类的成员函数f1()的指针,下列表示中正确的是(C)。 A.p=f1()B.p=f1 C.p=A: : f1D.p=A: : f1() 2.p是指向类A数据成员a的指针,a是类A的一个对象。 在给a成员赋值为5的下列表达式中,正确的是(C)。 A.a.p=5B.a->p=5 C.a.*p=5D.*a.p=5 3.VoidSet(A&a);是类A中一个成员函数的说明,其中A&a的含义是(A)。 A.类A的对象引用a作该函数的参数 B.类A的对象a的地址值作函数的参数 C.表达式变量A与变量a按位与作函数参数 D.指向类A对象指针a作函数参数 4.已知: constAa;其中A是一个类名,指向常对象指针的表示为(B)。 A.const*Apa;B.constA*pa; C.A*constpa;D.const*paA; 5.下列关于子对象的描述中,错误的是(D)。 A.子对象不可以是自身类的对象B.子对象是另一个类的对象 C.子对象的初始化要包含在构造函数中D.一个类中只能有一个子对象 6.执行下列说明语句,其调用构造函数的次数为(A)。 Aa[5],*p[2];其中,A是一个类名 A.5B.6 C.7D.10 7.下列关于运算符new的描述中,错误的是(D)。 A.它可以创建对象或变量 B.它可以创建对象数组或一般类型数组 C.用它创建对象或对象数组时要调用相应的构造函数 D.用它创建的对象可以不用delete运算符释放 8.下列关于运算符delete的描述中,错误的是(B)。 A.使用该运算符可以释放用new运算符创建的对象或对象数组 B.使用该运算符可以释放所有对象 C.使用delete运算符时会自动调用析构函数 D.用它释放对象数组时,它作用的指针名前要加下标运算符[] 9.定义不同存储类对象时,必须要加的存储类说明符是(C)。 A.autoB.extern C.staticD.register 10.下列关于this的描述中,错误的是(D)。 A.this是一个由系统自动生成的指针 B.this指针是指向对象的 C.this指针在用对象引用成员函数时系统创建的 D.this指针只能隐含使用,不能显式使用 3.3填空题 已知: classA{public: A(inti){a=i;} voidprint(){cont< private: inta; }; 要求: 1.定义一个指向对象的常指针p,应该是A*constp;。 2.定义一个指向常对象指针p,应该是constA*p;。 3.定义类A的含有5个元素的一维对象数组a,应该是A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 练习题