面向对象程序设计(C++)_第1页
面向对象程序设计(C++)_第2页
面向对象程序设计(C++)_第3页
面向对象程序设计(C++)_第4页
面向对象程序设计(C++)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计(C++)面向对象程序设计(C++)全文共8页,当前为第1页。面向对象程序设计(C++)全文共8页,当前为第1页。学习中心/函授站_ 潍坊学习中心姓 名 杜君 学号 7024140092004西安电子科技大学网络与继续教育学院2015学年上学期《面向对象程序设计(C++)》期末考试试题(综合大作业)题号 一 二 三 四 五 总分题分 10 20 20 20 30得分考试说明:1、大作业于 2015年4月3日公布,2015年5月9日前在线提交;2、考试必须独立完成,如发现抄袭、雷同、拷贝均按零分计。一、简答题(10分)1.1(3分)C++提供了哪些循环语句?它们各自的特点是什么?解答:C++提供了三种循环语句 for、while 和do-while。while 循环语句先判断是否满足循环条件,如果满足循环条件,则执行一次循环体,再判断是否执行下一次循环,否则退出循环。do-while 循环语句先执行一次循环体后再判断是继续执行循环体还是退出循环。for 循环先设置循环变量的初值,再判断是执行循环体还是退出循环体。如果执行了循环体,再改变循环变量值后,判断是执行下一次循环体还是退出循环,依此类推。1.2(3分)在C++中什么可以充当友元?友元是否可以继承,为什么?解答:在C++中函数和类都可以充当友元,分别称为友元函数和友元类。友元不可以继承,因为友元不是类的成员。1.3(4分)若派生类以 private 方式从一个基类派生,派生类的对象可以访问基类中的那些成员?派生类的成员函数可以访问基类中的那些成员?解答:若派生类以 private 方式从一个基类派生,派生类的对象不能访问基类中的任何成员;派生类的成员函数可以访问基类中的 public 和protected 成员。二、填空题(每空1分,共20分)2.1break语句在循环结构中的功能是退出其所在的循环, continue 语句的功能是结束第1页 (共8页)面向对象程序设计(C++)全文共8页,当前为第2页。面向对象程序设计(C++)全文共8页,当前为第2页。本次循环。2.2有一段程序为: while( 表达式)语句1 语句2,,当表达式的值为非 0时,执行 执行循环体一次 ;当表达式为 0时,执行 退出while 循环 。2.3 使用关键字 inline 说明的函数称为内联函数。 编译时,源程序中所有对该函数的调用被替换为此函数的 定义2.4 数组名代表的是该数组的 首地址 ;数组元素作为函数的实参时,是以指针方式传递参数的。2.5在C++中,类A的每一个非静态成员函数都有一个隐藏的指针类型的形参 this,它指向当前正在操作的对象,其类型为 A*const 。2.6C++语言引入了异常处理机制,用throw语句“抛出”异常,然后用相应的语句catch捕获被“抛出”的异常,并做出相应的处理。2.7在C++语言中,用 new 表达式来创建动态的类对象;用 delete 表达式释放动态类对象。2.8C++支持两种类型的多态,编译时多态和运行时多态。 运行时 多态是通过虚函数来实现的, 编译时多态 多态是通过函数重载来实现的。2.9 纯虚函数就是没有函数体的虚函数,包含纯虚函数的类称为抽象类。2.10在某些应用中,需要程序中属于某个类的所有对象共享某个数据。在 C++语言中,为了不破坏数据的封装性,需将所要共享的数据说明为类的 私有成员 ,即用关键字_private____ 说明的类成员。三、选择题(每题2分,共20分)3.1在下列给字符数组赋值语句中, A 是错误的。已知, chars[5] 。A.s[0]='m'; B.s[5]='n'; C.s[1]='a'; D.s[2]='b';3.2下列对结构变量赋值的描述中, C 是错误的。A.结构变量可以使用初始值表对它初始化B.可以给一个结构变量的各个成员赋值C.可将任意已知的结构变量名赋给一个结构变量D.可将一个已知结构变量名赋给相同结构类型的另一个结构变量3.3下列if 语句中,条件为真的语句是 B 。A.if(0) B.if(3) C.boolbFlag=ture;if(!bFlag) D.if(a)3.4若i的初值为 1,B 能输出1到10的整数。A.if(i++<10)cout<<i; B.docout<<i;while(++i<=10);C.while(i++<10)cout<<i; D.switch(++i<=10)cout<<i;3.5在下面的程序中,若实参 a与形参x以引用传递的方式传递信息,实参 b与形参y以值传递的方式传递信息, 那么从函数 compute返回主程序后,a和b的值分别为 A 。MainProgram voidcompute(x,y)a:=1; x:=x+2*y;b:=2; y:=2*x+y;compute(a,b); return;A.5和2 B.5和12 C.1和2 D.1和123.6下列关于运算符重载的描述中, B 是正确的。A.运算符重载可改变其优先级 B.运算符重载不改变其语法结构第2页 (共8页)面向对象程序设计(C++)全文共8页,当前为第3页。面向对象程序设计(C++)全文共8页,当前为第3页。C.运算符重载可改变其结合性 D.运算符重载可改变其操作数的个数3.7 为了使类中的成员能够被类的对象通过成员运算符访问, 则应该把成员的访问权限定义为 A 。A.public B.protected C.private D.packaged3.8 假设A是一个类,那么执行语句“ Aa, b(3), *p;”,调用了 C 次构造函数。A.2 B.3 C.4 D.53.9 假设类AB用成员函数的方式重载加法运算符, 以实现两个 AB类对象的加法,并返回相加的结果,则该成员函数的声明为 B 。A.ABoperator+(AB&a,AB&B); B.ABoperator+(AB&);C.operator+(ABa); D.AB&operator+();3.10 下列对C++中静态数据成员的描述中,正确的是 A 。A.静态数据成员是类的所有对象共享的数据B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象来调用四、读程题(每题5分,共20分)4.1给出下列源程序的输出结果。#include<iostream.h>intadd(int*x,intn){intsum,i;for(sum=0,i=0;i<n;i++)sum+=*(x+i);returnsum;}voidmain(){intarr[]={1,3,5,7};cout<<add(arr,4)<<endl;}解:第一个调用 add(int)返回4+1=5第二个调用 add(int,int)返回4+5=94.2 指出下列类定义中的 3处错误。#include<iostream.h>classA{public:A(){a1=a2=0;cout<<"Defaultconstructorcalled.\n";}A(inti,intj){a1=i;a2=j;cout<<"Constructorcalled.\n";}voidprint(){cout<<"a1="<<a1<<","<<"a2="<<a2<<endl;}private:inta1,a2;};voidmain(){Ax,y(3,9);第3页 (共8页)面向对象程序设计(C++)全文共8页,当前为第4页。面向对象程序设计(C++)全文共8页,当前为第4页。x.print();y.print();}解:<:print1(); 不要class;endl: ,要返回类型{A:voidprint2();good" 主义class 只在定义时用 ;classB; 不要class}:publicA{public#include<};iostream>:voidprint1(){cout</<//}};"/usingnamespacestd:print2()/:;classA{public;/ ,其他不要用voidB;boy.print2();<voidmain(){Bboy4.3 给出下述源程序的运行结果。#include<iostream.h>#include<string.h>structStudent{char*name;doublescore;}*p;voidmain(){Students1;p=&s1;p->name=(char*)newchar[50];p->score=95.5;strcpy(p->name,"Maping");cout<<p->name<<','<<(*p).score<<endl;第4页 (共8页)面向对象程序设计(C++)全文共8页,当前为第5页。面向对象程序设计(C++)全文共8页,当前为第5页。}解:输出的是Maping95.54.4 给出下述源程序的运行结果并说明该程序的功能。#include<iostream.h>intadd(inta,intb=5);voidmain(){intm=5;cout<<"sum1="<<add(m)<<endl;cout<<"sum2="<<add(m,add(m))<<endl;cout<<"sum3="<<add(m,add(m,add(m)))<<endl;}intadd(intx,inty){returnx+y;}sum1=10sum2=15sum3=20解:voidmain(void){cout<<c+m(15,42);//m(15,42) 的返回值为 66,c为全局变量,// 在returnm(m(::c+=a+b+c)); 语句中已修改值为 64,所以结果为 130//在m(::c+=a+b+c)调用中,::c为全局c,a+b+c中的c为局部c}五、编程题(每题15分,共30分)5.1有n个整数已按由小到大的顺序排列好,要求输入一个整数,把它插入到原有数列中,而且仍然保持有序,同时输出新的数列。 (插入时应考虑到插入的数的各种可能性,比所有的数都小;比所有的数都大;在最大数和最小数之间)解:printf(",8.h>%d",n;k;),a[i]);11,6;i++){k=i;for(i=0;i<intmain(){inta[11]={0:\stdio;i<if(n<}}for(i=0;\10;a[k]=n;i++)printf(",3;i>,4;;,&n),7;%d"break#include<printf(",9;scanf("i--)a[i]=a[i-1];a[i]){for(i=10;n"请输入N值,2;第5页 (共8页)面向对象程序设计(C++)全文共8页,当前为第6页。面向对象程序设计(C++)全文共8页,当前为第6页。inti,k,10},5;return0;n")5.2 利用运算符重载,定义复数类的加法与减法,使之能够执行下列运算。解:Complexa(4.0,6),b(7.4,2),c(0,0);c=a+b;c=4.1+a;c=b+2.3;#include<iostream>#include<cstdlib>usingnamespacestd;classComplex{public:Complex(){real=0.0;imag=0.0;}Complex(floatr,floati){real=r;imag=i;}Complexoperator+(Complex&);Complexoperator-(Complex&);Complexoperator+(float);friendComplexoperator-(float,Complex&);friendComplexoperator+(float,Complex&);Complexoperator-(float);voidprint(){if(real>0)cout<<imag<<"i+"<<real<<endl;elseif(real<0)cout<<imag<<"i-"<<-real<<endl;elsecout<<imag<<"i"<<endl;}private:floatreal;floatimag;};第6页 (共8页)面向对象程序设计(C++)全文共8页,当前为第7页。面向对象程序设计(C++)全文共8页,当前为第7页。ComplexComplex::operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}ComplexComp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论