C++语言程序设计》

上传人:枕*** 文档编号:124586380 上传时间:2022-07-25 格式:DOCX 页数:51 大小:221.65KB
返回 下载 相关 举报
C++语言程序设计》_第1页
第1页 / 共51页
C++语言程序设计》_第2页
第2页 / 共51页
C++语言程序设计》_第3页
第3页 / 共51页
点击查看更多>>
资源描述
大连理工大学网络教育学院秋C/C+语言程序设计期末考试复习题 注意事项:本复习题满分共:400分。一、单选题1、下列while循环的执行次数是( A )。while(int i=0) i+;A0B1C5D无限2、下列哪个函数不是类的成员函数。( D )A析构函数B构造函数C拷贝构造函数D友元函数3、在执行int a3=1,2,3,4,5,6;语句后,a00的值是( B )。A4B1C2D54、C+中用3个保存字实现异常解决,除了throw和catch外,尚有( C )。AifBclassCtryDreturn5、下面体现式中错误的是( C )。Ab=a+Ba/=2Ca+b=5Da=5,b=6,c=76、在定义int a5;之后,对a的引用对的的是( D )。Aa5Ba4.3Ca(5)Da07、类中将核心字( A )写在函数体之前函数头之后,阐明该函数是一种常成员函数(或const成员函数),可以避免函数变化数据成员的值。AconstBstaticCfriendDvoid8、设int n=10,i=3;则赋值运算n%=i+1执行后,n的值是( C )。A0B3C2D19、C+中用3个保存字实现异常解决,除了try和catch外,尚有(C )。AifBclassCthrow Dreturn10、设有定义int x; double v;,则10+x+v值的数据类型是(B )。AintBdoubleCcharD不拟定11、对于while、dowhile循环成果说法对的的是( C)。A只是体现形式不同Bwhile构造中的语句至少执行一次Cdowhile构造中的语句至少执行一次D条件成立时,她们有也许一次也不执行12、下列运算符中优先级最高的为( A)。A!B% C-=D&13、有关构造函数的说法错误的是(D )。A构造函数名字和类的名字同样B构造函数在阐明类变量时自动执行C构造函数无任何函数类型D构造函数有且只有一种14、一般的拷贝构造函数的参数是(C )。A某个对象名B某个对象的成员名C某个对象的引用名D某个对象的指针名15、为了判断两个字符串s1和s2与否相等,应当使用( D)。Aif(s1=s2)Bif(s1=s2)Cif(strcpy(s1,s2) Dif(strcmp(s1,s2)=0)16、在定义int a36;后,第10个元素是(B)。Aa24Ba13Ca31D.a4217、不是C语言的浮点类型的是( )。DA. float B. double C. long double D. real18、下面不是字符常量是( )。AA “t”B tC D t19、C语言对嵌套if语句的规定是:else总是与()配对。 DA. 其之前近来的ifB. 第一种ifC. 缩进位置相似的ifD. 其之前近来且不带else的if20、下面代码段的执行成果是( )。D int i;for(i=1;i10;i+) if(i%5=0)break; printf(%d ,i);printf(endn);A end B1 2 3 4 5 end C1 2 3 4 5 D1 2 3 4 end 21、如下程序中调用scanf函数给变量a输入数值的措施是错误的,因素是( )。Bint a,*p=&a;scanf( “ %d ”, *p ); / 输入a的数值A. *p表达的是指针变量p的地址B. *p表达的是变量a的值,而不是变量a的地址C. *p表达的是指针变量p的值D. *p只能用来阐明p是一种指针变量22、设int a10 = 15, 12, 7, 31, 47, 20 ,*p,下列语句中对的的是( )。BA. for ( p = a; a ( p + 10 ); a+ );B. for ( p = a; p ( a + 10); p+ );C. for( p = a, a = a + 10; p a; p+ );D. for( p = a; a age B. student.age C. p - age D. p.age28、 C+源文献的扩展名为( )。AA. cppB. cC. txtD.exe29、有关C+和C语言的描述中,( )是错误的?CA. C是C+的一种子集B. C程序在C+环境可以运营C. C+程序在C环境可以运营D. C+是面向对象的而C是面向过程的二、填空题1、体现式sqrt(81)和pow(6,3)的值分别为 和 。9、2162、空串的长度为 ,存储它需要占用 个字节。0、13、strlen(apple)的值为 。54、使用cin和cout进行输入输出操作的程序必须涉及头文献 ,其语句格式为 。iostream.h #include 5、对一种一维字符数组a进行初始化的数据为12345,则a0和a3元素相应的初值分别为 和 。1、46、对一种类中的数据成员的初始化可以通过构造函数中的 实现,也可以通过构造函数中的 实现。初始化表、函数体7、随机函数rand()%20的值在 至 区间内。0、198、若需要把一种函数“void F();”定义为一种类AB的友元函数,则应在类AB 定义中加入一条语句: 。friend void F();9、根据给定的程序功能,将程序代码补充完整,每空只填一条语句定义并调用排序函数,对一维数组进行降序排序。#include ; /*宏定义常量SIZE为10 */void sort(int a, int size ); /* 冒泡排序函数*/void main() int arraySIZE=2,6,4,8,10,12,89,68,45,38, i; ; /* 调用排序函数 */for( i=0;iSIZE;i+) ; /* 输出数组元素 */ void sort(int a, int size ) int pass ,k ,t; for(pass=0; ;pass+) for( k=0; ksize-pass-1 ;k+) if( ) /* 降序排序 */ t=ak; ak=ak+1; ak+1=t; 参照答案:本题考察数组排序 #define SIZE 10; sort(array, SIZE) ; printf(%5d,arrayi); passak+1;10、根据给定的程序功能,将程序代码补充完整,每空只填一条语句,输入一种正整数,判断与否为素数。#include /* 引用头文献*/void main( ) ; /* 定义变量m与i*/ printf(输入一种正整数 m:n); ; /*输入整数m的值*/ for ( i =2; i =sqrt(m); i + ) /* 寻找能整除m的因子i*/ if ( ) break ; /*输出与否为素数*/ if ( ) printf(%d 是素数.n, m) ; else printf(%d不是素数.n,m) ; 参照答案:本题考察数控制构造 #include int m, i; scanf(%d,&m) ; m% i = 0 isqrt(m)11、如下程序实现字符串的复制,将程序补充完整。#include char* fuzhi(char *p1,char *p2 )int i;for(i = 0; ;i +)*(p1 + i) = *(p2 + i) ; ;return p1; int jishu(char *p)int i;for(i = 0; ;i +); ;int main () char a20 , b20; ; / 输入字符串,存储在b 中fuzhi(a,b);printf(%sn,a);printf(the number is %dn,jishu(a);return 0;参照答案:本题考察数组及函数 *(p2 + i)!=0; *p1 0; *p+ !0 return i; gets(b);12、根据给定的程序功能,将程序代码补充完整,每空只填一条语句,如下程序实现二维数组的转置,输出转置后的数组。#include /*数组大小*/void invert(int x N) int i,j,t;for(i=0;iN;i+) t=xij; ; xji=t; int main() int aNN=1,2,3,4,5,6,7,8,9, i,j; ; /*调用函数invert*/ for(i=0;iN;i+) for(j=0;jN;j+) ; coutendl; return 0; 本题考察二维数组参照答案 #define N 3 for(j=0;ji;j+) xij=xji; invert(a); coutaij;13、根据给定的程序功能,将程序代码补充完整,每空只填一条语句,设计复数类Complex,实现算数运算符重载。#include class Complex double dReal, dImag; /实部与虚部public: Complex(double r=0, double i=0) dReal=r; dImag=i; ; /重载运算符+ Complex operator-() ; /重载取反符号 void print( )const; ;Complex Complex:operator + (const Complex &c2) / 重载加号 Complex c; c.dReal=dReal+c2.dReal; /实部相加 ; /虚部相加 ; / 重载取反符号 return Complex ( -dReal, -dImag); void Complex:print( )const / 输出复数的实部与虚部,格式为(实部,虚部) 本题考察运算符重载参照答案 Complexoperator + (const Complex &c2); c. dImag = dImag +c2. dImag; return c; Complex Complex:operator-() ; cout ( dReal , dImag ) endl;14、根据给定的程序功能,将程序代码补充完整,每空只填一条语句,抽象类Shape类派生矩形类 (Rectangle)和圆类(Circle),area()为求图形面积的成员函数。 #include #include class Shapepublic: ; /定义纯虚函数area ;class Rectangle:public Shape /矩形类int a,b; /矩形边长public: Rectangle(int x,int y); /构造函数float area(); /计算面积;Rectangle:Rectangle (int x,int y); ; /设立a b = y0 ? y:0; /设立b /定义成员函数area() return x*y; /定义圆类,公有继承Shape类float r; / 半径public: Circle(float x)r = x0? x:0; float area() /计算并返回圆形面积;本题考察继承与多态参照答案: virtual float area()=0 ; a=x0? x:0; float Rectangle:area() class Circle: public Shape return 3.14*r*r ; 三、判断题1、循环语句的循环体也许一次都不执行。( )2、使用cin和cout进行输入输出操作的程序必须涉及头文献math.h。( )3、C+源程序文献的扩展名是.exe。( )4、核心字中,用以阐明类中公有成员的是private。( )5、一种类只能有一种对象。( )6、拷贝构造函数不是类的成员函数。( )7、内联函数的核心字为friend。( )8、构造派生类的对象时,就要对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。( )9、一种派生类可以同步有多种基类,这种状况称为单继承。( )10、抽象类不能实例化。( )11、在C+类中可以涉及私有、公有和友元三种具有不同访问控制权的成员。( )12、定义枚举类型的核心字是union。( )13、设有定义int x; double v;则5+x+v值的数据类型是int。( )14、strcat()函数的作用是求字符串长度。( )15、阐明静态数据成员时,前边要加核心字static。( )16、成员函数可以重载。( )17、delete的功能是动态分派内存。( )18、核心字中,用以阐明类中公有成员的是protected。( )19、流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。( )20、类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。( )21、do-while循环可以写成while循环。( ) 22、所谓指令,就是计算机可以辨认的命令。( ) 23、使用内联函数是以牺牲增大空间开销为代价的。( ) 24、对象是系统中用来描述客观事物的一种实体,它是用来构成系统的一种基本单位。( )25、内联函数的核心字为void。( )26、友元关系可以继承。( )判断题答案1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 四、阅读下列程序,请在答题卡上写出输出成果1、#includevoid main() int x=1,y=2,z=3; x+=y+=z; cout(xy?y:x),; cout(xy?x+:y+),; coutyendl;输出成果:6,5,62、#include void main()int i;for(i=4;i=10;i+)if(i%3=0)continue;couti;输出成果:4578103、#includeclass CSampleprivate:int i;static int k;public:CSample();void Display();CSample:CSample()i=0;k+;void CSample:Display()couti=i,k=kendl;int CSample:k=0;void main()CSample a,b;a.Display();b.Display();输出成果:i=0,k=2i=0,k=24、#include void main()int x=1,y=0;switch(x)case 1:switch(y)case 0:coutfirst ;break;case 1:coutsecond ;break;case 2:coutthirdn;输出成果:first third5、#includeclass CSampleint i;public:CSample();void Display();CSample();CSample:CSample()coutConstructor,;i=0;void CSample:Display()couti=i,;CSample:CSample()coutDestructorendl;void main()CSample a;a.Display();输出成果:Constructor,i=0,Destructor6、#includeconst int N=8;void main()int aN=1,2,3,4,5,6,7,8;int i,x;for(i=0; iN/2; i+)x=ai; ai=aN-1-i;aN-1-i=x;for(i=0; iN; i+)coutai;输出成果:876543217、#include class CSampleint i;public:CSample();CSample(int val);void Display();CSample();CSample:CSample()coutConstructor1endl;i=0;CSample:CSample(int val)coutConstructor2endl;i=val;void CSample:Display()couti=iendl;CSample:CSample()coutDestructorendl;void main()CSample a,b(10);a.Display();b.Display();输出成果:Constructor1Constructor2i=0i=10DestructorDestructor8、本题重点考察继承与多态 # include class TwoDimensionalShape /二维图形类public: virtual void show() cout这是一种二维图形0? Len: 1; double getArea()return side*side; void show() cout边长为side的正方形,面积为getArea()endl;/矩形类class Retangle:public Square double longSide;public: Retangle(double l, double w) :Square(l),longSide(w) double getArea()return side*longSide; void show( ) cout边长为side和longSide的长方形,面积为getArea()endl;int main() TwoDimensionalShape t2 = Square(2),Retangle(3,4.5); t0.show(); t1.show(); TwoDimensionalShape * members3 ; /二维图形指针数组 members0= new Square(); members1= t; members2=new Retangle(3,4.5);for(int i=0;ishow(); return 0;运营成果:这是一种二维图形这是一种二维图形边长为1的正方形,面积为1这是一种二维图形边长为3和4.5的长方形,面积为13.59、本题重点考察类的构造与析构函数#include #include class Person int age; /年龄 char *name; /姓名 public:Person ( ): age(0) name = new char10;strcpy(name,noName); coutdefault construct 0 ? a: 0;coutconstruct nameendl; Person () /析构函数 coutdestruct nameendl;if(name )delete name; ;int main() Person p1,p2(30,Linda); coutendl;return 0;运营成果:default constructconstruct Lindadestruct Lindadestruct noName10、本题重点考察函数与字符数组#includeint num4,i;void count(char str ,int n) for( i=0; i n; i+) if(1=stri& stri=9) num0+; else if(A=stri & stri=Z) num1+; else if(a=stri & stri=z) num2+; else num3+;void main( ) char str =Lin247; printf(%sn,str); count ( str, strlen(str) ; for( i=0; i4; i+) printf(%dn, numi );运营成果:Lin247312111、本题重点考察类的定义#includeusing namespace std;class Student int age; char name10;public:Student (int a =18, char *str = noName)strcpy(name,str); age= a0 ? a: 0; Student(Student& s):age(s.age) strcpy(name,s.name); coutcopy construct endl; Student ()coutdestruct names.age; const char* getName()const return name; ;int main() Student p1, p2(22,Linda); if(pare(p2) cout p1.getName() is older.endl; else cout p2.getName() is older.endl; return 0; 运营成果:copy constructdestruct LindaLinda is older.destruct Lindadestruct noName五、简答题(本大题共8小题,共40分)1、简述构造化的程序设计、面向对象的程序设计的基本思想。解答要点:构造化的程序设计将数据和对数据的操作分离,程序是由一种个的函数构成的,面向对象的程序设计将数据和操作封装在一起,程序是由一种个对象构成的,对象之间通过接口进行通信,它可以较好地支持程序代码的复用。2、 虚析构函数有什么作用?解答要点:对象销毁时,需要调用析构函数。在多态调用时,是用基类的指针访问派生类的对象。如果析构函数是非虚函数,则基类指针只能访问基类的析构函数,而不能访问派生类的析构函数,导致派生类对象销毁时,没有调用派生类的析构函数,只是调用了基类的析构函数。如果把析构函数定义成虚函数,则可克服这个问题。3、 拷贝构造函数在哪几种状况下调用?解答要点:用一种对象初始化另一种对象时当用对象作为函数参数传递时当函数返回对象时4、 函数重载与函数覆盖有什么不同,它们与多态有什么关系? 解答要点:函数重载是指函数名相似,而函数的参数个数或类型不同;覆盖是指在派生类中成员函数与基类成员函数的函数名、参数个数、类型与返回值均相似;C+中正是通过虚函数的覆盖,实现多态的功能。5、 C+继承是如何工作的?解答要点:继承使得派生类可以使用基类的公有和保护成员,从而实现代码的复用,派生类可以增长成员,也可以隐藏和覆盖基类的成员。对于公有继承,基类成员的访问权限在派生类保持不变。6、 类与对象有什么区别?解答要点:类是类型,是对象的抽象,对象是类的具体实例。一种类可以有多种对象,每个对象均有自己的存储单元,而类不占存储单元。7、实现将输入的字符串反序输出,如输入windows 输出swodniw。找出并改正程序中的语法及逻辑错误(在原程序中画出出错语句,在右侧修改成对的的语句,同一类错误算一处错误)。void main() char c100,c1; int i ,j, k; printf(Enter a string: ); scanf(%c,c); k=strlen(c); for (i=0,j=k-1;ik ;i+,j-) c1=ci;ci=cj;cj=c1; printf(%sn,c); 本题考察字符数组参照答案:(1) 缺少头文献#include 缺少头文献#include (2) scanf(%c,c); 改为 scanf(%s,c); (3) for (i=0,j=k-1;ik;i+,j-) 改为for (i=0,j=k-1;ik/2;i+,j-) (4) c1=ci;ci=cj;cj=c1; 改为 c1=ci;ci=cj;cj=c1; 8、分析如下代码段,回答问题。 char a=how are you; char *p=how are you;(1) a2=k;和p2=k;哪个是错误的用法?为什么?(2) a+;和p+;哪个是错误的用法?为什么?本题考察字符数组与字符串参照答案:(1) p2=k 错误,由于指针p只能指向字符串,不能存储字符串和字符!(2) a+ 错误,由于数组名为常量,其值不能修改!9、count函数记录字符串str中数字的数目,找出并改正函数定义中存在的错误。int count(char str ) int i, num; for( i=0; i sizeof(str); i+) if( 0=stri=9)num+1;参照答案(1)int i, num; 改为int i, num=0;(2)i sizeof(str);改为stri!=0 或者strlen(str)(3)if( 0=stri=0& stri=9 )(4)num+1; 改为num+;或者+num;(5) 缺少return num; 或将函数类型改为void 函数中输入num值六、编程题 1、编写一种程序输入一华氏温度,编程输出摄氏温度。已知:华氏温度(F)转换为摄氏温度(C)的计算公式为: #includevoid main()float c,f;coutf;c=(f-32)*5/9;cout摄氏温度:cendl;2、编写一种程序将输入的一种三位正整数逆转,例如,输入123,输出321。#includevoid main()int n,i,j,k;coutn;i=n/100;/求百位数n=n-i*100;j=n/10;/求十位数n=n-j*10;k=n;/求个位数cout逆转数:kjiendl;3、编写一种程序,输入3个职工的编号和姓名,然后显示出来。#include#include#includeclass Personprivate:int no;char name10;public:void setdata(int bh,char xm)no=bh;strcpy(name,xm);void dispdata(void)coutsetw(5)nosetw(10)nameendl;void main()Person stud3;stud0.setdata(1,张三);stud1.setdata(2,李四);stud2.setdata(3,王五);for(int i=0;i3;i+)studi.dispdata();4、编写一种程序,求解猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还但是瘾,又多吃了一种。第二天早上又将剩余的桃子吃掉一半,又多吃了一种。后来每天早上都吃前一天剩余桃子的一半零一种。到第10天早上想再吃时,见只剩一种桃子了。求第一天共摘多少桃子。#include void main()int day, x1, x2;day=9;x2=1; /(以上部分2分)while(day0) /(如下循环3分)x1=(x2+1)*2;x2=x1;day-;printf(“total=%dn”,x1);5、编写C程序求解方程。输入方程系数a、b与c,计算方程的根。 若令根的鉴别式为,分别考虑如下几种状况: 若且, 输出一种根的值; 若且,输出“无实根”; 若且,输出两等根的值; 若且,输出两实根的值。分析:本题考察基本数据类型与输入输出操作、运算符与体现式以及选择构造的有关知识点。参照答案#include (1分)#include (1分)int main()(1分)double a,b,c ,d, x1,x2; scanf(%lf,%lf,%lf,&a,&b,&c); (1分)d=b*b-4*a*c; (1分)if(a=0 & b!=0 ) (1分)printf(%f, -c/b); else if(d0) (1分) printf(无实根n);else if (d=0) (1分)printf(%8.4fn, -b/(2*a); else(2分) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(两实根:%8.4f ,%8.4fn,x1,x2); return 0;6、编写C程序计算三角形面积。输入三角形的三边长(假设都为整数)。如果不能构成三角形则输出“错误”,如果能构成三角形则输出三角形的边长和面积,按海伦公式计算三角形面积: 分析:本题考察基本数据类型与输入输出操作、运算符与体现式以及选择构造的有关知识点。参照程序#include (1分)#include (1分)int main()int a ,b ,c ; double s, area; (1分)scanf(%d%d%d,&a,&b,&c); (1分)if(a+bc & b+ca& c+ab) (2分)s = (a+b+c)/2.0; area = sqrt(s*(s-a)*(s-b)*(s-c); (2分)printf(a=%d,b=%d,c =%d,area=%fn ,a,b,c,area); else printf(错误); (2分)7、编写函数int strCompare( char * pStr1, char* pStr2);实现字符串的长度比较,函数返回pStr1与pStr2指向字符串的长度差,在main()函数中输入4个字符串,长度不超过10,调用该函数搜索并输出最长的字符串。分析:本题考察控制构造、数组与函数以及字符串的有关知识点参照程序#include int strCompare(char* pStr1, char* pStr2) return strlen(pStr1)-strlen(pStr2); int main() int i; char c520; for(i=0; i4;i+) gets(ci); strcpy(c4,c0); for(i=0; i0) strcpy(c4,ci); puts(c4); return 0;8、已知如下平面点类Point,以点类为基类,派生出矩形类。矩形在平面坐标系下水平放置,由左下方的顶点、长和宽定义。矩形类增长一种成员函数,判断任一坐标点是在矩形内,还是在矩形的边沿上,还是在矩形外。请给出矩形类的完整定义。class Point public: Point( int a = 0, int b = 0 ):x(a), y(b) ; int getX( ) const return x; int getY( ) constreturn y; protected: int x, y; /横纵坐标;分析:本题考察类的封装及继承有关知识点参照程序 class Rectangle: public Point /3分 double width, length;public:Rectangle(int,int,double,double); int location(Point& p);Rectangle:Rectangle(int x,int y,double w,double l):Point(x,y) /2分 width = (w0)?w:0;length = (l0)?l:0;int Rectangle:location(Point& p) /3分 if( p.xx & p.xy & p.yy+length) return 1; /在矩形内 else if(p.xx+width | p.yy+length) return 0; /矩形外 else return -1; /矩形上 9、设计描述时间的类Time,涉及分别表达小时、分钟和秒的int类型的数据成员、构造函数以及将时间以XX:XX:XX的格式显示在屏幕的成员函数。定义该类使其可以通过下面的测试代码。 Time t3 = Time(1,22), Time(11), Time(24,25,62) ; int n = sizeof(t)/sizeof(Time); for(int i=0; in ;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!