1、嵌入式程序设计语言 C+复习题http:/ 2.分析以下程序的执行结果 #include Swap(int x,int y)int temp; temp=x; x=y; y=temp; void main() int x=10,y=20; swap(x,y); cout void main() int a=10,20,30,40,*pa=a; int *pb=pa; pb+; cout class Sample int x; public: Sample(); Sample(int a)x=a; Sample(Sample void disp()cout class Sample int x,
2、y; public: Sample()x=y=0; Sample(int i,int j)x=i;y=j; void copy(Sample void setxy(int i,int j)x=i;y=j; void print()cout #include class Book char *title; / 书名 char *author; / 作者 int numsold; / 月销售量 public: Book() Book(const char *str1,const char *str2,const int num) int len=strlen(str1); title=new ch
3、arlen+1; strcpy(title,str1); len=strlen(str2); author=new charlen+1; strcpy(author,str2); numsold=num; void setbook(const char *str1,const char *str2,const int num) int len=strlen(str1); title=new charlen+1; strcpy(title,str1); len=strlen(str2); author=new charlen+1; strcpy(author,str2); numsold=num
4、; Book() delete title; delete author; void print(ostream str= “china”; B. char str7= c, h, i, n, a;C. char str1= “china”,str2=“123”;D. char str110; str1= “china”;4. 以下对二维数组 a 进行正确初始化的是( )A. int a23=1,2,3,4,5,6; B. int a 3=1,2,3,4,5,6;C. int a2 =1,2,3,4,5,6; D. int a2 =1,2,3,4;5. 选出下列标识符中不是合法的标识符的是(
5、)A. hot_do B. cat1 C. _pri D. 2ab6. 以下说法中正确的是( )A. C 语言程序总是从第一个的函数开始执行B. 在 C 语言程序中, 要调用的函数必须在 main()函数中定义C. C 语言程序总是从 main()函数开始执行D. C 语言程序中的 main()函数必须放在程序的开始部分7. 若已定义:int a9, *p=a;并在以后的语句中未改变 p 的值,不能表示 a1地址的表达式为( )A. p+1 B. a+1 C. a+ D. +p8. 若有说明: int i,j=7, *p=, 则与 i=j; 等价的语句是( )A. i= *p; B. *p=*
6、 C. i= D. i=* *p;9. 若变量 c 为 char 类型,能正确判断出 c 为小写字母的表达式是( )A. a= a) | (c=c) D. (c= a) X=5;X.print();X=example(10);X.print();4由于二义性原因,一个类不能从同一个类中直接 一次以上,如果必须这样做,可以使用一个 。5在 c+中,如果在多条继承路径有一个公共的基类,如果想使这个公共的基类只产生一个拷贝,则可以将这个基类说明为 。使用关键字 说明。6简单成员函数是指声明中不含有 、 、 关键字的函数。7静态成员为该类的所有 共享,它们被存储于一个 中。8在 c+中声明 和 时使用
7、 volatile 或 const 均是非法的。9当访问私有静态数据成员时,可通过定义公有的 来访问。10有关继承,静态成员 被继承,友元 被继承。11c+不允许重载 、 、 、 运算符。12 、 、 、 四个运算符只能用类运算符来重载。13c+提供两种格式控制方式,一种是 ,另一种是 。14如果 Empty 是从某个其它类派生出来的,而且这个其它类又有一个析构函数,c+也将为 Empty 写一个 。15当一个基类定义了赋值或初始化语义,而其派生类却未定义赋值或初始化语义时,c+编译器为该派生类自动生成一个 或 函数。16如果程序员定义 class Empty; ,下列各语句将产生的函数名称是
8、:a. const Empty e1; / b. Empty e2=e1; / c. e2=e1; / d. Empty *pe2=/ e. const Empty *pe1=/ 三、改错题(每题 7 分) 1. 仔细阅读下面的程序,找出类定义中的错误及其理由,并以尽量少的改动使其能够正确编译运行并给出运行结果。#include class test int m;int Get()return m;public:static test(int i)m=i;void Set(int i)m=i;void Show()cout#include main()ifstream out(“myfile2
9、“);if(!out)cout#include class basepublic:virtual char * fun(void)const=0;char * base:fun(void)constreturn “base“;class derived1:virtual public basepublic:char * fun(void)constreturn “derived1“;class derived2:virtual public basepublic:char * fun(void)constreturn “derived2“;class subderived:public der
10、ived1,public derived2public:char * fun(void)constchar * pch;pch=new charstrlen(derived1:fun()+strlen(derived2:fun()+1;strcpy(pch,derived1:fun();strcat(pch,derived2:fun();return pch;void main(void)base * pb;pb=new derived1;coutfun()fun()fun()class basepublic:virtual int fun(void)constcoutfun();b2.fun
11、();b3.fun();五、完成程序(每题 10 分) 1根据已有程序和输出结果完成下面的程序。#include #include class Pointprivate:_protected:_public:Point(float a, float b, float c)_float Getx()return X;float Gety()return Y;float Getz()return Z;class Line:_Pointprivate:float m;public:Line(float a, float b, float c, float d)_void show()coutclas
12、s baseint i;int j;public:base(void):i(0),j(0)base(int I,int J): int getI(void)constreturn i;int getJ(void)constreturn j;virtual void display(void)constcoutvoid f( );void main()f( );f( );void f( )static int a=10;int b=1;a=a+b;cout#include class student private:char *name; static int num; int card;pub
13、lic:student(char *str) name=new charstrlen(str)+1;strcpy (name,str);num+;card=num;void print() coutint n=10;int func()int k=0;k=k+n;n=n+10;return(k);void main()int j=1;j=func();coutclass baseint x;public:void setx(int i) x=i; int getx( ) return x;class dervied:public baseint y;public:void sety(int i
14、) y=i; int gety() return y; ;void main( )base *p;base b_obj;dervied d_obj;p=p-setx(11);coutgetx()setx(66);coutgetx() void main()int tj10=0,0,0,0,0,0,0,0,0,0; int tjdata;couttjdata;while(tjdata0;cout class timepublic:time();void settime(int h,int m,int s);void printmilitary();void printstandard();pri
15、vate:int hour;int minute;int second; time:time() hour=minute=second=0;void time:settime(int h,int m,int s) hour=(h=0int get()return this-x;prvate:int x;void main() text a;a.load(10)coutusing namespace std;class A private:int number;public:A();int geint()return number;A();A:A()number=0;A:A()coutclass
16、 CRootpublic:int small;CRoot(int n = 2) small = n;void showsmall()coutclass CShapepublic:float area() return 0.0; ;class CTriangle : public CShapepublic:CTriangle(float h = 0, float w = 0) H = h; W = w; float area()return (float)(H * W * 0.5); private:float H, W;class CCircle : public CShapepublic:C
17、Circle(float r = 0) R = r; float area()return (float)(3.14159265 * R * R); private:float R;int main() CTriangle tri( 3, 4 );coutarea()= area()using namespace stdclass Apublic:virtual void f1()coutf1();p-f2();p=new B;p-f1();p-f2();delete p;分析程序,回答下列问题:该程序的输出结果是什么?该程序中 B 类继承了 A 类,是公有继承还是私有继承?类 B 中成员函数
18、 f1()和 f2()的访问权限是什么?类 B 中成员函数 f1()和 f2()都是虚函数吗?5、将类 B 中 f2()函数的参数 int i 去掉,对输出结果是否有影响?为什么?六、编程题(20 分)定义一个人信息类 CPerson 的数据成员有:姓名(name)、年龄(age )、性别(sex),函数成员:构造函数、显示(ShowInfo )函数、设置姓名和性别(SetNameAndSex)函数、设置年龄(SetAge );学生类 CStudent 从 CPerson类派生,并增加数据成员:学号(strno )、三门成绩(score3)、总分(total)和平均成绩(ave),函数成员:构造函数、ShowAll 函数(显示学生数据)、SetScore 函数(设置成绩)、SetNoAndAge 函数(设置学号和年龄)。编写一个主函数 main 测试定义的类。