文档库 最新最全的文档下载
当前位置:文档库 › C++语言程序设计练习题

C++语言程序设计练习题

C++语言程序设计练习题
C++语言程序设计练习题

1.面向对象程序设计中的数据隐藏指的是参考答案为:D

A.输入数据必须输入保密口令B.数据经过加密处理 C. 对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性

[解析]输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏。面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。这就是面向对象程序设计中的数据隐藏所指。

2.下列各项中不符合函数重载必须满足的条件的是参考答案为:D

A.必须有不同的参数个数B.对应的参数类型必须不相同 C. A和B必须同时满足D.A和B只要满足一个即可

[解析]我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:① 有不同的参数个数;或者② 对应的参数有不相同的数据类型,即①和②中只要有一个满足就可以了。当然两者都满足更好,但这不是必须的。

3.下列带缺省值参数的函数说明中,正确的说明是参考答案为:A

A.int Fun(int x,int y=2,int z=3); B.int Fun(int x=1,int y,int z=3);

C. int Fun(int x,int y=2,int z); D.int Fun(int x=1,int y,int z=3);

[解析]在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。从所给出的四个选项来看,只有“int Fun(int x,int y=2,int z=3)”符合这条规定,其它的都不符合。

4.有如下的对类“CSample”的说明,其中()是错误的。

class CSample { 参考答案为:A

A.int a=23;

B.CSample();

public:

C.CSample(int val);

D.~ CSample();

};

[解析]在上面对类“CSample”说明中,“CSample()”和“CSample(int val)”是该类重载的构造函数、“~ CSample()”是该类的析构函数,这三个语句都是正确的。错误的语句是“int a=23”,因为它违反了在类的声明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化。

5.已知类A中的一个成员函数的说明如下:

void Set(A &a);

则该函数的参数“A &a”的含义是参考答案为:C

A.指向A的指针为a

B.将变量a的地址赋给类A

C.类A对象引用a用作函数的形参

D.变量A与a按位与后作函数参数

[解析]因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号“&”,则“&a”表示是类A的对象引用。所以“A &a”的含义是类A对象引用a用作函数的形参。

6.若类A和类B的定义如下:

class A {

public:

int i,j;

void get();

};

class B: private A {

int i,j;

protected:

int k;

public:

void make();

};

void B::make() { k=i*j; }

则其中()是非法的表达式。参考答案为:D

A.void get();

B.int k;

C.void make();

D.k=i*j;

[解析]对于给定的四项中,前三项都是正确的,只有第四项是错误的。因为,类B是类A的私有派生类(缺省访问类型),所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B::make()”既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式“k=i*j;”造成了访问的二义性,即其中的i和j,到底是取自类A呢?还是取自类B呢?

7.下面的主程序中,语句()是错误的。

class A {

int i;

public:

virtual void fun()=0;

A(int a) { i=a; }

};

class B {

int j;

public:

void fun() { cout<<”B::fun()\n”; }

B(int b,int c) :A(b) { j=c; }

};

void main() 参考答案为:A

A.{ A a(5);

B.A *pa;

C.B b(7);

D.B *pb;

}

[解析]在类A中,函数“virtual void fun()=0”为纯虚函数,因此,类A为抽象类。作为抽象类,它是不能被用来定义具体对象的,而语句“A a(5);”恰恰是定义抽象类的对象的,所以它是错误的

8.拷贝(复制)构造函数的作用是参考答案为:C

A.进行数据类型的转换

B.用对象调用成员函数

C.用对象初始化对象

D.用一般类型的数据初始化对象

[解析]进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能。用对象调用成员函数不用构造函数,只要用“对象名.成员函数名”即可。所以拷贝(复制)构造函数的作用,只能是用对象来初始化对象。

9.下列说法中,正确的说法是参考答案为:B

A.所有的运算符都能被重载

B.运算符被重载时,它们的优先级与结合性不会改变

C.当需要时,我们可以自定义一个运算符来进行重载

D.每个运算符都可以被重载成成员函数和友元函数

[解析]当重载运算符时,不是所有的运算符都能被重载,有几个运算符是不能被重载的,如三元运算符“?:”、‘.’、‘*’、‘::’、‘#’等;也不是每个运算符都可以被重载成成员函数和友元函数,如运算符‘=’、‘()’、‘[]’、和‘→’都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;但是运算符被重载时,它们的优先级与结合性不会改变。

10.下面对结构或类中成员的访问中,不正确的访问是参考答案为:A A.*pointer.salary; (其中pointer为指向类对象的指针)

B.pointer->salary;

C.x=worker.salary; (其中worker为具有类类型的对象)

D.Location &rA=A1;int x=rA.GetX(); (Location为已定义的类,A为对象)

[解析]因pointer为指向类对象的指针,所以“pointer->salary”是正确的访问数据成员的形式;因worker为具有类类型的对象,所以“worker.salary”也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rA.GetX();”表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX()给变量x赋值,这样的访问成员函数的形式也是正确的;“*pointer.salary;”中,因为运算符‘.’的优先级高于运算符‘*’的优先级,所以相当于“*(pointer.salary);”,那正确的形式应该是“*(pointer→salary);”。故“*pointer.salary”是不正确的访问。11.C++ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是 ( )D

A.增加了一些新的运算符

B. 允许函数重载,并允许设置缺省参数

C. 规定函数说明

符必须用原型 D. 引进了类和对象的概念

12.下列符号不能组成标识符的是 (A ) A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符

13.类型修饰符 unsigned 不能修饰 (D ) A. char B. int C. long int D. float 14.在 int a=3,int *p=&a ;中, *p 的值是 ( D) A. 变量 a 的地址值 B. 无意义 C. 变量 p 的地址值 D.3

15.下列关于指针的操作中,错误的是 (D ) A. 两个同类型的指针可以进行比较运算 B. 可以用一个空指针赋给某个指针 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加

二,填空题不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。1.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由____________机制支持,而后者则由____________机制支持。

答:函数重载、虚函数

[解析]静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持。动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数(与指针或引用)机制来支持。

2.由char const *str=”stucture”;所以定义的指针称为____________,关键字const 所修饰的是____________。

答:指向常量的指针、指针所指的字符串

[解析]根据由‘*’在修饰符“const”中位置的不同,它所修饰的对象也不同,“const ”表示所修饰的是指针所指的常量,该指针称为指向常量的指针;“* const”表示所修饰的是指针本身,该指针称为常指针;“* const”则表示所修饰的是指针本身和指针所指常量,该指针称为指向常量的常指针。

3.引入虚基类的目的是为了解决多重继承中的____________和____________问题。

答:二义性、多占用空间

[解析]在允许多重继承时可能出现两个问题,第一个是公有派生类中的成员通过不同基类调用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一级公共基类存有备份,这就引起了公共基类的重复存储,也就多占了存储空间。引入虚基类的目的是为了解决多重继承中的这两个问题。

4.构造函数与析构函数所调用的虚函数是____________的函数,因此调用时实现的是____________联编。

答:所在类、静态

[解析]在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造函数来生成派生类对象。所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类还未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用自己的虚函数,因为虚函数的调用是不能由派生类调用基类的。在析构派生类对象是时,先调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象。所以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数(原因同构造函数),基类的析构函数调用的也是它自己的虚函数,因为此时派生类对象以已被析构掉了。由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此调用时实现的是静态联编。

7.说明一个const成员函数(又称常量成员函数)的方法是,将const写在__________之间,而且它修饰的是__________。

答:函数头与函数体、this指针

[解析]为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号‘)’与函数体的左花括号‘{’之间,而且它修饰的是对象所属的this指针。表示该函数不能修改它所在对象中的数据成员的值。

20.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是____________的。

答:operater、void

[解析]对某个运算符的重载,实际上是用关键字operater 与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是无类型的,即不能是void的。

三改错题

1.分析下列程序中的错误,并说明出错原因。

# include

class base {

const int n;

public:

base() { cout<<”Initializing default\n”; }

base(int m) { cout<<”Initializing\n”; n=m; }

~base() { cout<<”Destroying\n”; }

};

void main()

{ base x(1);

base y=x;

}

答:(1) n=m; const数据成员不以该形式赋值

(2)错误处base y=x;,以对象初始化对象

[解析](1)作为const数据成员n不能用赋值表达式的形式为其赋初值,必须在定义构造函数时在函数头中以“base(int m):n(m)”形式来初始化。

(2)base y=x; 语句中‘=’不是赋值的意思,而是初始化的意思。即在定义类base的对象y时,以对象x给它初始化,相当于base y(x);。但是以对象初始化对象时,必须调用拷贝构造函数才行。因程序中没给出拷贝构造函数,也不能调用系统的缺省拷贝构造函数,因用户给出了构造函数后,再也不能调用系统提供的任何缺省构造函数。所以,base y=x;是错误的。

2.分析下列程序中的错误,并说明出错原因。

#include

class A {

int x;

public:

A(int a) { x=a; fun(); }

virtual void fun()=0;

};

class B:public A {

public:

B(int b) :A(b) {}

void fun() { }

};

void main()

{ A aa(5);

B bb(8);

}

答:1)A aa(5); 抽象类不能定义对象

[解析](1)在构造函数“A(int a)”调用了纯虚函数“fun()”,因构造函数调用虚函数是静态联编,即调用的是它自己类的虚函数。在此调用的是纯虚函数,它只被说明,而未定义,所以不可能被执行,因此出错。

(2)抽象类相当于是对类的引用性声明,所以它只能定义该类的指针和引用,而不能定义它的对象。在此,A为抽象类,而“A aa(5)”却定义了A的对象,因此是错误的。

3.分析下列程序中的错误,并说明出错原因。

#include

class AA {

int aa;

AA(int xx) { aa=xx; }

public:

int get() { return aa; }

~AA() { cout<<”Destroying”<

};

main()

{ AA elem(5);

cout<

}

答:(1)AA(int xx) 的访问属性错、应具有公有属性

[解析](1)构造函数虽是由系统自动调用来生成对象的,但一般都是在类外调用,所以它的访问属性必须是公有的。程序中构造函数的访问属性是私有的(缺省值),运行中必定出错。

四.完成程序题

根据题目要求,完成程序填空。

1.仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句。

class point {

float x,y;

public:

point(float a,float b) { x=a; y=b; }

float distance(point &p) {

float dx=_____①______;

float dy=_____②______;

return (float)sqrt(dx*dx+dy*dy);

}

};

void main()

{ point p1(2,3),p2(32,43);

cout<

}

答:① p.x-x

② p.y-y

③distance(p2)

[解析]由于求两点之间距离的函数“distance”为成员函数,所以由该函数的this指针所指对象可用作起点(参数之一),另一个用作终点的参数,必须在函数的参数表中显式地给出。dx 和dy分别计算两个结点间x和y坐标间的距离,因此应该为:dx=p.x –x 和dy =p.y –y。对它们求平方相加后开方即可,得到两点间的距离:(float)srrt(da*da+dy*dy)。在主程序中求p1和p2两个结点之间的距离,由于由p1调用距离函数,所以由p2作为它的参数,即distance(p2)。

2.两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等。在空格处填入合适

的内容,以完成下面的程序,使其重载运算符“==”,用以比较两个复数的相等。请在主函数中输出比较的结果。

#include

class complex {

double real,imag;

public:

complex(double r,double i) { real=r; imag=i; }

bool operator==(complex &);

};

int complex:: operator==(complex &com)

{ return(_____①_____) }

void main()

{ complex c1(12.3,32.5),c2(21.7,18.6);

if(______②______)

return cout<<”true\n”;

else

return cout<<”false\n”;

}

答:① (real==com.real)&&(imag==com.i mag)

② c1==c2或c1.operator==(c2)

[解析]若两个复数的相等,则必有它们的实数部分和虚数部分都相等,所以运算符重载函数中返回“(real==com.real)&&(imag==com.imag)”,只有real==com.real与imag==com.imag都为真时,该函数的返回值才为真。在主程序中,为了比较两个复数c1和c2,可以隐式地写成“c1==c2”,也可显式写成“c1.operator==(c2)”。

3.下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成员函数,但是类BB 的友元函数。请在①、②和③处各填入正确的内容,使程序能正常运行。

#include

_____①______;

class AA {

int t;

public:

AA(int x) { t=x; }

void print(BB &b);

};

class BB {

int s;

public:

BB(int y) { s=y; }

friend void ___②___print(BB &);

};

void ____③_____

{ cout<<”AA:”<

void main()

{ AA m(6);

BB n(8);

m.print(n);

}

答:① class BB;

② AA::

③ AA::print(BB &w)

[解析]由于AA类的成员函数“print”是类BB的友元函数,因此它必须有一个BB类的引用作为参数,以便有引用BB类数据成员的接口。但此时BB类还未定义,为解决此矛盾,在①处先对BB类作引用性声明“class BB;”,告诉系统BB类在后面定义。因为函数“print”是类AA的成员函数,在类外定义必须加上类名和作用域分辨符,即在②处加上“AA::”。在BB类外定义“print”时,因是友元,所以没有加上“BB::”的必要,但“AA::”还是必须加的,所以在③处填“AA::print(BB &w)”。

五.程序分析题

1.请分析以下的程序,给出该程序的正确执行结果。

#include

int add(int x,int y) { return x+y; }

void main()

{ int m=2,n=3;

cout<<”1:”<

m=2,n=3;

cout<<”2:”<

m=2,n=3;

cout<<”3:”<

m=2,n=3;

cout<<”4:”<

}

答:1:7

2:8

3:8

4:9

[解析]在说明答案之前,要说明两个问题:

1)C++语言中,函数参数是压在栈里的,因压栈是从前往后进行的,所以出栈就是从后向前进行的,也即先取最后的参数,然后再向前逐个取用;

2)对于单加运算,m++是先执行后加1,++m是加1后再执行。

由此,因m=2,n=3;,所以:

1:(m++)+(m+n)=2+(2+3)=7 (m++后执行,且后加1,所以m=2一直未变)

2:(++m)+(m+n)=3+(2+3)=8 (++m后执行,但先加1,执行++m时,m=3了)

3:(m+n)+(m++)=(3+3)+2=8 (先执行m++,后加1,执行m+n时,m=3了)

4:(m+n)+(++m)=(3+3)+3=9; (先执行++m,且先加1,故一开始就有m=3)

3.请分析下面的程序并给出该程序的执行结果。

#include

class AA {

int a;

public:

AA() { cout<<”Initualizing AA!\n”; }

~AA() { cout<<”Destroying AA!\n”;

};

class BB {

int b;

AA p;

public:

BB() { cout<<”Initualizing BB!\n”; }

~BB() { cout<<”Destroying BB!\n”;

};

void main()

{ BB X;

cout<<”Ending main!\n”;

}

答:Initualizing AA!

Initualizing BB!

Ending main!

Destroying BB!

Destroying AA!

[解析]虽然在主程序中只定义了一个类BB的对象,但在类BB中声明了类AA的对象作为它的数据成员。当一个类中含有对象作为数据成员时,在生成对象时,先调用成员对象的构造函数,再调用类自己的构造函数,所以输出了“Initualizing AA!”(成员对象构造函数的输出)和“Initualizing BB!”(类自己构造函数的输出)。对象生成后,执行下一句输出语句,则输出“Ending main!”。此时程序结束,调用析构函数来析构掉对象,先调用类自身的析构函数,其输出为“Destroying BB!”,再调用成员对象的析构函数,其输出为“Destroying AA!”。

4.写出下列程序的运行结果。

#include

class AA {

public:

static int n;

AA() { n++; }

};

int AA::n=0;

main()

{ cout<<”AA::n=”<

AA d1;

cout<<

AA d2;

cout<<

AA d3,d4;

cout<<

cout<<

}

答:AA::n=0

d1.n=1

d2.n=2

d1.n=4

d2.n=4

[解析]由于数据成员n的访问属性是公有的,所以在类外可访问它;又它是静态变量,所以具有全局性。在构造函数中,执行的是n++操作,即每次调用构造函数n就加1。当程序开始时,因未定义对象,所以n的值为初始化时的值,则输出为“AA::n=0”。当定义了对象d1后,由于调用了构造函数,则该对象中n=1,故输出“d1.n=1”。同理,对象d2输出“d2.n=2”。由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,所以下面两条语句的输出为“d1.n=4”和“d2.n=4”。

5.写出下列程序的输出结果。

#include

class AA {

public:

AA{} { cout<<”Constructor of AA. \n”; fun(); }

vir tual void fun() { cout<<”AA::fun() calle d.\n”; }

};

class BB:public AA {

public:

BB(){ cout<<”Constructor of BB.\n”; fun(); }

void fun() { cout<<”BB::fun() calle d.\n”; }

};

void main()

{ BB d; }

答:Constructor of AA.

AA::fun() called.

Constructor of BB.

BB::fun() called.

[解析]虽然函数fun()说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun()。所以,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数“fun()”,所以输出为“Constructor of AA.”和“AA::fun() called.”。同理调用派生类的构造函数时,生成的输出为“Constructor of BB.”和“BB::fun()called.”。

6.请给出下面的程序的输出结果。

#include

template class T

void sort(T* a,int n)

{ T num;

for(int i=0;i

{ for(int j=i;j

if(a[j]>a[j+1])

{ num=a[j]; a[j]=a[j+1]; a[j+1]=num; }

}

for(i=0;i

cout<

}

void main()

{ int iver[5]={ 12,45,9,23,37 };

double dver[5]= { 22.3,56.7,43.5,13.8,8.6 };

sort(iver,5);

sort(dver,.5);

}

答:9 12 23 37 45

8.6 13.8 22.3 43.5 56.7

[解析]这是使用模板的例子。函数sort是一个递增的排序函数,T是个模板。当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序。所以输出如上结果。

7.分析以下程序的执行结果 #include

void main()

{

int a;

int &b=a; // 变量引用

b=10;

cout<<"a="<

}

解:本题说明变量引用的方法。b是a的引用,它们分配相同的空间,b的值即为a的值。所以输出为 a=10。

8.分析以下程序的执行结果

#include

class Sample

{

int x;

public:

Sample(){};

Sample(int a){x=a;}

Sample(Sample &a){x=a.x+1;}

void disp(){cout<<"x="<

};

void main()

{

Sample s1(2),s2(s1);

s2.disp();

}

解:本题说明类拷贝构造函数的使用方法。Sample类的Sample(Sample &a)构造函数是一个拷贝构造函数,将a对象的x值赋给当前对象的x后加1。所以输出为:x=3。

9.分析以下程序的执行结果

#include

class Sample

{

public:

int x;

int y;

void disp()

{

cout<<"x="<

}

};

void main()

{

int Sample::*pc;

Sample s,*p=&s;

pc=&Sample::x;

p->*pc=10;

pc=&Sample::y;

p->*pc=20;

p->disp();

}

解:本题说明了类数据成员指针的使用方法。这里通过指向对象的指针来给类数据成员赋值,其原理与上题相似。输出为:

x=10,y=20

10.分析以下程序的执行结果

#include

class Sample

{

int x;

int y;

public:

Sample(int a,int b)

{

x=a;y=b;

}

int getx(){return x;}

int gety(){return y;}

};

void main()

{

int (Sample::*fp)();

fp=&Sample::getx;

Sample s(2,7);

int v=(s.*fp)();

fp=&Sample::gety;

int t=(s.*fp)();

cout<<"v="<

}

解:本题说明了类成员函数指针的使用方法。在main()中定义的fp是一个指向Sample类成员函数的指针。执行fp=Sample::getx后。fp指向成员函数getx(),int v=(s.*fp)()语句等价于int v.getx(),v=x=2;执行fp=Sample::gety之后,fp指向成员函数gety(),int t=(s.*fp)()语句等价于int t=s.gety(),t=x=7。所以输出为:

v=2,t=7

11.分析以下程序的执行结果

#include

class Sample

{

int x;

int y;

public:

Sample(int a,int b)

{

x=a;y=b;

}

int getx(){return x;}

int gety(){return y;}

};

void main()

{

int (Sample::*fp)();

fp=&Sample::getx;

Sample s(2,7),*p=&s;

int v=(p->*fp)();

fp=&Sample::gety;

int t=(p->*fp)();

cout<<"v="<

}

解:本题说明了类成员函数指针的使用方法。这里通过指向对象的指针来调用指向类成员函数的指针,其原理与上题相似。输出仍为:

v=2,t=7

12.分析以下程序的执行结果

#include

class base

{

public:

base(){cout<<"constructing base class"<

~base(){cout<<"destructing base class"<

};

class subs:public base

public:

subs(){cout<<"constructing sub class"<

~subs(){cout<<"destructing sub class"<

};

void main()

{

subs s;

}

解:本题说明单继承情况下构造函数和析构函数的调用顺序。这里base为基类,subs为派生类。

所以输出为:

constructing base class

constructing sub class

destructing sub class

destrcuting base class

注意:在单继承情况下,首先调用基类的构造函数,随后调用派生类的构造函数,析构函数的调用顺序则正好相反。

13.分析以下程序的执行结果:

#include

class base

{

int n;

public:

base(int a)

{

cout<<"constructing base class"<

n=a;

cout<<"n="<

}

~base(){cout<<"destructing base class"<

};

class subs:public base

{

base bobj;

int m;

public:

subs(int a,int b,int c):base(a),bobj(c)

{

cout<<"constructing sub cass"<

m=b;

cout<<"m="<

}

~subs(){cout<<"destructing sub class"<

void main()

{

subs s(1,2,3);

}

解:本题说明派生类中含有对象成员情况下构造函数和析构函数的调用顺序。这里base 为基类,subs为派生类,subs类的构造函数中含有对象成员。

所以输出为:

constrcuting base class

n=1

constructing base class

n=3

constructing sub class

m=2

destructing sub class

destructing base class

destructing base class

注意:当派生类中含有对象成员时,构造函数的调用顺序如下:

基类的构造函数

2)对象成员的构造函数

3)派生类的构造函数

析构函数的调用顺序与之相反

14.分析以下程序的执行结果

#include

class A

{

public:

int n;

};

class B:public A{};

class C:public A{};

class D:public B,public C

{

int getn(){return B::n;}

};

void main()

{

D d;

d.B::n=10;

d.C::n=20;

cout<

}

解: D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本。所以对于对象d,d.B::n与d.C::n是两个不同的数据成员它们互无联系。

所以输出为:

10,20

15.分析以下程序的执行结果

#include

class A

{

public:

int n;

};

class B:virtual public A{};

class C:virtual public A{};

class D:public B,public C

{

int getn(){return B::n;}

};

void main()

{

D d;

d.B::n=10;

d.C::n=20;

cout<

}

解:

D类是从类和类派生的而类和类又都是从类派生,但这是虚继承关系即是虚基类因此和共用一个的副本所以对于对象d,d.B::n与d.C::n是一个成员。

所以输出为:

20,20

16.分析以下程序执行结果

#include

int add(int x,int y)

{

return x+y;

}

double add(double x,double y)

{

return x+y;

}

void main()

{

int a=4,b=6;

double c=2.6,d=7.4;

cout<

}

解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返

回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。所以输出为: 10,10

17.分析以下程序的执行结果

#include

class Sample

{

int i;

double d;

public:

void setdata(int n){i=n;}

void setdata(double x){d=x;}

void disp()

{

cout<<"i="<

}

};

void main()

{

Sample s;

s.setdata(10);

s.setdata(15.6);

s.disp();

}

解:本题说明重载成员函数的使用方法。setdata()成员函数有两个,根据其参数类型加以区分。

所以输出为:i=10, d=15.6

22.分析以下程序的执行结果

#include

class Sample

{

int n;

public:

Sample(){}

Sample(int i){n=i;}

Sample &operator =(Sample);

void disp(){cout<<"n="<

};

Sample &Sample::operator=(Sample s)

{

Sample::n=s.n;

return *this;

}

void main()

{

Sample s1(10),s2;

s2=s1;

s2.disp();

}

解:本题说明重载运算符(=)的使用方法。operator=成员函数实现两个对象的赋值。

所以输出为: n=10

六.程序设计题

1.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。

解:在Triangle类中设计一个友元函数operator+(Triangle t1,Triangle t2),它重载运算符"+",返回t1和t2两个三角形的面积之和。

本题程序如下:

#include

#include

class Triangle

{

int x,y,z;

double area;

public:

Triangle(int i,int j,int k)

{

double s;

x=i;y=j;z=k;

s=(x+y+z)/2.0;

area=sqrt(s*(s-x)*(s-y)*(s-z));

}

void disparea()

{

cout<<"Area="<

}

friend double operator+(Triangle t1,Triangle t2)

{

return t1.area+t2.area;

}

};

void main()

{

Triangle t1(3,4,5),t2(4,5,6);

double s;

cout<<"t1:"; t1.disparea();

cout<<"t2:"; t2.disparea();

s=t1+t2;

cout<<"总面积="<

}

本程序执行结果如下:

t1:Area=6

t2:Area=9.92157

总面积=15.9216

2.重载运算符“+”友元函数只能返回两个三角形的面积之和,不能计算三个三角形的面积之和,改进一下,使之能计算任意多个三角形的面积之和。

解:重载运算符为什么不能计算3个三角形的面积之和呢?对于式子:s=t1+t2+t3,先计算t1+t2,返回一个double数然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需要添加这样重载运算符“+”友元函数即可。

本题程序如下:

#include

#include

class Triangle

{

int x,y,z;

double area;

public:

Triangle(int i,int j,int k)

{

double s;

x=i;y=j;z=k;

s=(x+y+z)/2.0;

area=sqrt(s*(s-x)*(s-y)*(s-z));

}

void disparea() {

cout<<"Area="<

}

friend double operator+(Triangle t1,Triangle t2)

{

return t1.area+t2.area;

}

friend double operator+(double d,Triangle t)

{

return d+t.area;

}

};

void main()

{

Triangle t1(3,4,5),t2(4,5,6),t3(5,6,7),t4(6,7,8);

double s;

cout<<"t1:"; t1.disparea();

cout<<"t2:"; t2.disparea();

cout<<"t3:"; t3.disparea();

cout<<"t4:"; t4.disparea();

s=t1+t2+t3+t4;

cout<<"总面积="<

本程序的执行结果如下:

t1:Area=6

t2:Area=9.92157

t3:Area=14.6969

t4:Area=20.3332

总面积=50.9517

3.设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。解:

#include

#include

#include

class student

{

char name[10];

int deg1,deg2,deg3;

public:

student(){}

student(char na[],int d1,int d2,int d3)

{

strcpy(name,na);

deg1=d1;deg2=d2;deg3=d3;

}

friend student operator+(student s1,student s2)

{

static student st;

st.deg1=s1.deg1+s2.deg1;

st.deg2=s1.deg2+s2.deg2;

st.deg3=s1.deg3+s2.deg3;

return st;

}

void disp()

{

cout<

}

friend void avg(student &s,int n)

{

cout<

}

};

void main()

C语言程序设计第三版习题库答案

C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y);

}elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x);

C语言程序设计试题集与答案解析

一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。

13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.

Java语言程序设计基础篇前三章课后习题要点

第1章计算机、程序和Java概述 1.1(显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science和Programming is fun。 程序: 显示: 1.2(显示五条消息)编写程序,显示Welcome to Java五次 程序: 显示: 1.3(显示图案)编写一个程序,显示下面的图案:

程序: 显示: 1.4(打印表格)编写程序,显示以下表格: 程序: 显示:

1.5(计算表达式)编写程序,显示(9.5x4.5- 2.5x3)/(45.5- 3.5)的结果 程序: 显示: 1.6(数列求和)编写程序,显示1+2+3+4+5+6+7+8+9的结果 程序: 显示: 1.7(近似求π)可以使用以下公式计算π: Π=4x(1-1/3+1/5-1/7+1/9-1/11+1/13+...) 编写程序,显示4x(1-1/3+1/5-1/7+1/9-1/11+1/13...)的结果。在程序中用1.0代替1 程序: 显示:

第2章基本程序设计 2.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度,然后将其转换华氏温度,并显示结果。转换公式如下所示: Fahrenheit-=(9/5)*celsius+32 (华氏度=(9/5)*摄氏度+32) 程序: 显示: 2.2(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱体的体积 面积=半径x半径xπ 体积=面积x高 程序: 显示:

2.3(将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。 程序: 显示: 2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示用户输入磅数,然后转换成千克并显示结果。1磅等于0.454千克。 程序: 显示: 2.5(财务应用程序:计算小费)编写一个程序,读入一笔费用与酬金率,就算酬金和总钱数。例如,如果用户读入10作为费用,15%作为酬金率,计算结果显示酬金为$1.5,总费用为$11.5. 程序:

C语言程序设计基础试题及答案

第一部分C语言基础 一、选择题 1、以下正确得C语言标识符就是() A。%X B。a+b?C.a123 D.test! 2、已定义int a,b;则以下不正确得C语句就是() A.a*=5;??B。b/=2;? C.a+=1、75;?D.b&&=a; 3、若x、i、j与k都就是整型变量,则执行下面表达式后x得值为( ) x=(i=4,j=16,k=32) A.4?B.16 ?C.32 D.52 4、C语言中得标识符只能由字母、数字与下划线三种字符组成,且第一个字符( ) A.必须就是字母???B.必须为下划线? C.必须为字母或下划线D.可以就是字母、数字、下划线中得任一字符 5、下面正确得字符常量就是( ) A.“c”? B。’\\”? C.‘w’??D.” 6、设int a=2,b=0,c;则执行语句c+=b&&a--后, c得结果为( )。 A.0,1B.1,0 ?C.2,0 D.不确定 7、以下不正确得C语言标识符就是()?A) int B)a_1_2?C)ab1exe D)_x 8、以下就是正确得C语言标识符就是( )。?A)#define?B)_123 C) %d D) \n 9、下列四组字符串中都可以用作C语言程序标识符得一组就是() 。?A) prin tB)i\am C)Pxq D)str_l ???oodbs tart$it line# _3d one_half My-〉bookCpp ? pow 10、下面各选项组中,均就是C语言关键字得组就是()。?A)auto,enu

m,include B)switch,typedef,continue?C)signed,union,scanf?D)if,s truct,type 11、下列不属于C语言关键字得就是( ) 。 A)default?B)register C)enum ?D)external 12、C语言程序从main()函数开始执行,所以这个函数要写在( )。?A) 程序文件得开始?B)程序文件得最后?C)它所调用得函数得前面 D) 程序文件得任何位置 13、下列关于C语言得叙述错误得就是( ) A)大写字母与小写字母得意义相同?B) 不同类型得变量可以在一个表达式中 C)在赋值表达式中等号(=)左边得变量与右边得值可以就是不同类型?D) 同一个运算符号在不同得场合可以有不同得含义 14、在C语言中,错误得int类型得常数就是( ) 。?A)32768?B)0 C)037?D) 0xAF 15、将字符g赋给字符变量c,正确得表达式就是( )。 A) c=\147 ?B)c="\147" ?C)c='\147' 16、下列转义字符中错误得一个就是( )。 A) ’\000’ B)'\0014' ?C) ’\x111’ D) ’\2’ 17、将空格符赋给字符变量c,正确得赋值语句就是( )。 A) c=’\0’ B) c=NULL C)c=0 D)c=32 18、已知:char a=’\70’;则变量a中()。 A)包含1个字符?B)包含2个字符?C) 包含3个字符?D) 说明非法 19、字符串"\”EOF\n=-\61\””得长度就是( )。 A)8 ?B) 9?C)14?D)非法字符串

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

c语言程序设计第五版习题答案

习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch 语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么?它由哪几部分组成? 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤? 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 3.输入下面程序并运行。

#include main() { printf("******\n"); printf(" *****\n"); printf(" ****\n"); printf(" ***\n"); printf(" **\n"); printf(" *\n"); } 【解答】运行结果为:****** ***** **** *** ** * 思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。 三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* I love C programs! ************************* 【分析与提示】 ①要有文件包含语句#include 。C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。这些函数的说明都包括在stdio.h文件中。 ②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。 ③注意显示的信息有三行,所以要用到换行符“\n”。 参考代码: #include main() { printf("************************\n"); printf(" I love C programs! \n"); printf("************************\n"); }

程序设计基础(知识点)

第三部分程序设计基础 3.1 程序、程序设计、程序设计语言的定义 ⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。 ⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。 ⑶程序设计语言:程序设计语言用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。 3.2 高级语言和低级语言的概念及区别 ⑴高级语言:高级语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。

它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。 ⑵低级语言:低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 ⑶区别: 高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 了解知识:CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码。越低级的语言,形式上越接近机器指令,汇编语言就是与机器指令一一对应的。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,

年C语言程序设计基础期末考试试卷‘B’及答案

年C语言程序设计基础期 末考试试卷‘B’及答案 The following text is amended on 12 November 2020.

一、单项选择题 1. 在C语言中,下面字符串能用作变量名的是( )。 A、a+b B、auto C、2-and D、a2 2. 若double x=2,y;则执行y=x+3/2;后,y的值是( )。 A、 B. C. D. 3 3. 下列关于C语言中字符常量与字符串常量的叙述中,错 误的是( )。 A、字符常量是用单撇号括起来的一个字符 B、空格字符也可用作字符常量 C、字符串常量是用单撇号括起来的一个字符序列 D、字符串常量是用双撇号括起来的一个字符序列 4. 若有以下变量说明和数据的输入方式,则正确的输入语 句为( )。

变量说明:float x1,x2; 数据的输入方式:<回车> <回车> A、scanf(“%f,%f”,&x1,&x2); B、scanf(“%f%f”,&x1,&x2); C、scanf(“%,%”,&x1,&x2); D、scanf(“%%”,&x1,&x2); 6. 在一个源文件中定义的全局变量的作用域为()。 A. 本文件的全部范围 B. 从定义该变量开始至本文件结束 C. 本函数的全部范围 D. 本程序的全部范围

7. 当调用函数时,实参是一个数组名,则向函数传送的是( )。 A、数组的长度 B、数组的首地址 C、数组每一个元素的地址 D、数组每个元素中的值 8.若j为整型变量,则下面while循环( )。 j=10; while(j!=0) j=j-1; A、执行0次 B、执行1次 C、执行10次 D、执行无限次 9. 在while(x)语句中的x与下面条件表达式等价的 是:( )。 A、x!=0 B、 x==1 C、x!=1 D、x==0 10. 以下对C语言函数的描述中,正确的是( )。 A、调用函数时,参数可以是表达式

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

(完整版)C语言程序设计练习及答案

《C语言程序设计》练习及答案 得分评卷人复查人 一、单选题,每小题1分,共60分(将正确答案的序号写在题目的括号中)。 1、结构化程序设计的三种基本控制结构是(D )。 A、主程序、子程序、函数 B、输入、处理、输出 C、调用,返回,转移 D、顺序、选择、循环 2、下列关于C程序变量的叙述, ( D )是错误的。 A、变量名必须由字母或下划线开头。 B、程序中的变量必须在被使用之前定义。 C、不同的基本类型的变量之间可以混合运算。 D、变量的数据类型决定变量的"作用域"。 3、能将C语言编写的源程序转换为目标程序的软件是(C )。 A、编辑程序 B、汇编程序 C、编译程序 D、解释程序 4、以下符号中,合法的用户标识符是( D )。 A、-p B、int C、3ab D、_xt_ 5、以下选项中,与m=n++完全等价的表达式是( C )。 A、m=++n B、m+=n+1 C、m=n, n=n+1 D、n=n+1,m=n 6、若有定义:int aa[8];。则以下表达式中不能代表数组元aa[1]的地址的是(C )。 A、&aa[0]+1 B、&aa[1] C、&aa[0]++ D、aa+1 7、表达式!5&(7+3)&&(4+5)的值是(A)。 A、0 B、1 C、5 D、9 8、以下选项中非法的C语言表达式是(A )。 A、x+1=x+1 B、0<=x<100 C、i=j==0 D、(char)(65+3) 9、在TURBO C中, int类型变量所占字节数是(B )。 A、1 B、2 C、4 D、8 10、C语言中基本的数据类型包括(B)。 A、整型,实型,逻辑型 B、整型,实型,字符型

(完整版)《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

C语言程序设计第二版习题参考答案

C语言程序设计第二版 习题参考答案 Document serial number【LGGKGB-LGG98YT-LGGT8CB-LGUT-

C语言程序设计习题参考答案 习题 1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII 码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是 ___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。

程序设计基础试题(附答案)

程序设计基础复习题 一、单选 1、一个完整的计算机系统应该包括() A、系统软件和应用软件 B、计算机及其外部设备 C、硬件系统和软件系统 D、系统硬件和系统软件 2、“裸机”的概念是指() A、正在进行设计还没有组装好的计算机 B、已经组装好但还没有安装任何软件的计算机 C、仅安装了操作系统的计算机系统 D、安装了文字处理软件但没有安装专用数据处理系统的计算机 3、世界上第一台电子数字计算机研制成功的时间是() A、1936年 B、1946年 C、1956年 D、1970年 4、CASE的含义是() A、计算机辅助设计 B、计算机辅助制造 C、计算机辅助教学 D、计算机辅助软件工程5、当前广泛使用的微型计算机是() A、第一代 B、第二代 C、第三代 D、第四代 6、当代计算机的体系结构称为是() A、冯·诺依曼机 B、非冯·诺依曼机 C、图灵机 D、比尔盖茨机 7、硬盘是() A、输入设备 B、输出设备 C、存储设备 D、计算设备 8、下面4句话中,最准确的表述是() A、程序=算法+数据结构 B、程序是使用编程语言实现算法 C、程序的开发方法决定算法设计 D、算法是程序设计中最关键的因素

9、计算机能直接执行的语言是() A、机器语言 B、汇编语言 C、高级语言 D、目标语言 10、解释程序的功能是() A、将高级语言程序转换为目标程序 B、将汇编语言程序转换为目标程序 C、解释执行高级语言程序 D、解释执行汇编语言程序 11、下面4种程序设计语言中,不是面向对象式语言的是() A、JAVA B、Object Pascal C、Delphi D、C 12、不是C语言的基本数据类型是() A、int B、double C、char D、bool 13、在C语言中,为了求两个整数相除之后得到的余数,可以使用运算符() A、/ B、% C、* D、++ 14、数据的逻辑结构分为() A、纯属结构和非线性结构 B、顺序结构和非顺序结构 C、树型结构和图型结构 D、链式结构和顺序结构 15、用链表表示纯属表的优点是() A、便于随机存取 B、便于插入和删除操作 C、花费的存储空间较顺序存储少 D、元素的物理顺序与逻辑顺序相同 16、栈的最主要特点是() A、先进先出 B、先进后出 C、两端进出 D、一端进一端出 17、下面4句结论只有一句是错误的,它是()

C语言程序设计基础

题型及分数: 单选题:25分 判断题:10分 填空题:15分 程序分析题:20分 编程题:30分 其中:课后习题及复习大纲中相类似题所占比例在70%-80%。 带*号的内容和复习题为较难部分,为非重点考察内容。 第一章C语言程序设计基础(出题比例4-6%) 1.程序设计语言的基本概念 ?程序 ?程序设计语言 ?常用程序设计语言及其类型 ?源程序、编译、目标文件、连接、可执行程序 ?编程的步骤 2.C语言程序的基本结构 (1) C源程序的框架 C源程序的框架,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 (2) C语言源程序的书写规则: ?C源程序是由一个主函数和若干个其它函数组成的; ?函数名后必须有小括号,函数体放在大括号内; ?C程序对大、小写字母书写敏感; ?每句的末尾加分号; ?可以一行多句; ?可以一句多行; ?可以在程序的任何位置加注释,注释的方式。 3.C语言程序设计的的基本步骤和调试过程 复习题:/***** 1. 每个C语言程序中有且仅有一个函数,它是程序的入口和出口。 2. 引用C语言标准库函数,一般要用预处理命令将其头文件包含进来。 3. C语言属于() A.高级语言 B. 低级语言 C.中级语言 D. 机器语言 4. C语言规定了若干有特定意义、为C语言专用的单词,称为关键字。 5. C语言的语句以结尾。 6. C语言源程序经过编译以后生成文件,生成的文件名后缀为,经过连接后生成文件,后缀为 7.C语言中不能使用关键字作为标识符。(√)

第二章基本数据类型,运算符与表达式(出题比例20-30%) 关键知识点: 1.常量,变量: a)标识符的命名规则 b)常量,变量的概念:直接常量,符号常量,变量必须先定义后使用 c)变量名和变量值的区别。 2.C语言中的基本数据类型 a)各种数据类型的数据在内存中的存放方式 b)掌握各种数据类型数据的常量使用方法,特别注意字符常量和字符串常量的区别使 用 c)整型,字符型,浮点型变量的定义和引用方法 d)数据的数据类型,数据的取值范围,数据在内存中存放方式三者之间的联系 3.运算符和表达式的使用方法 a)自增、自减运算符 b)赋值运算符 c)算术运算符及表达式 d)逗号运算符及表达式 e)*位运算符及表达式 f)sizeof运算符及表达式 g)*强制数据类型转换符及表达式 4.运算符的优先级和结合性 本章复习题: 课后习题:一、单选题,二、填空题 1. C语言的标识符命名规则中,第一个字符可以为字符‘#’或‘&’ .(×)。 2.下列全部属于合法的用户标识符的是() A.A1 P_0 dS B. float 2la _A C. *a hy kk D. _123 temp main 3. C语言对字母的大小写不敏感。(×) 4. C语言中,符号常量由宏定义命令#define来定义。(√) 5. 在VC 6.0中,数据类型int,char,float和double所占的内存字节数分别是、、和。 6.下列四个选项中,均是合法的整型常量的选项是A A.160 –0XFFFF 011 B。-0XCDF 01A 0XE C.-01 986,012 0688 D。-0X48a 2e5 0x

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

C语言程序设计基础测试题-答案

C语言程序设计基础测试题 一、单选 [1] 下面叙述中错误的是____。 A. 复合语句中定义的函数只在该复合语句中有效 B. return( )语句中的括号中,可以是变量,常量或有确定值的表达式 C. 形式参数也是局部变量 D. 主函数中定义的变量在整个程序中都是有效的 [2] 下列说法中正确的是____。 A.带参数的宏定义中的参数是没有类型的 B.宏展开将占用程序的运行时间 C.宏定义命令是C语言中的一种特殊语句 D.使用#include命令包含的头文件必须以“.h"为后缀 [3] 若函数的形参为一维数组,则下列说法中正确的是____。 A.调用函数时的对应实参必为数组名 B.形参数组可以不指定大小 C.形参数组的元素个数必须等于实参数组的元素个数 D.形参数组的元素个数必须多于实参数组的元素个数 [4] 系统的标准输出设备是____。 A.键盘 B.硬盘 C.内存 D.显示器 [5] 下面叙述中正确的是____。 A.全局变量在定义它的文件中的任何地方都是有效的 B.全局变量在程序的全部执行过程中一直占用内存单元 C. C语言的switch语句中case后可为常量或表达式或有确定值的变量及表达式 D. 说明函数时必须明确其参数类型和返回类型 [6] C程序的基本结构单位是____。 A.文件 B.语句 C.函数 D.表达式 [7] 对于定义,char *aa[2]={"abcd","ABCD"},选项中说法正确的是____。 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 [8] 任何一个C语言的可执行程序都是从____开始执行的。 A.程序中的第一个函数 B.main( )函数的入口处

《C语言程序设计基础》 试卷A及参考答案

《c语言程序设计基础》试卷 (A卷) 考试时间:90分钟闭卷任课老师: 班级:学号:姓名:成绩: (每小题2分,共30分) 、由C++源文件编译生成的目标文件的缺省扩展名为() A、cpp B、exe C、obj D、lik 2、下列中,不是C++合法的标识符() A、2mn B、m123 C、kk D、a_1 3、C++中,基本数据类型不包括() A、int B、float C、char D、class 4、x和y均为bool量,则x| |y为真的条件是() A、它们均为真 B、其中一个为真 C、它们均为假 D、其中一个为 5、C++中,一个字符型数据在内存中占()字节。 A、4 B、2 C、1 D、8 6、字符串常量”hello”的长度是() A、5 B、6 C、7 D、8 7、以下语句,int i=2,j=2,m,n;m=i++;n=++j;则m,n,i,j的值分别为() A、2,3,2,2 B、2,3,3,3 C、2,2,3,3 D、3,3,2,2 8、假定a为一个整型数组名,则元素a[4]的字节地址为()

A、a+4 B、a+8 C、a+16 D、a+32 9、 x>0 || y==5的相反表达式为()。 A、 x<=0 || y!=5 B、 x<=0 && y!=5 C、 x>0 || y!=5 D、 x>0 && y==5 10、在下面的函数声明中,存在着语法错误的是() A、void BC(int a , int) B、void BD(int , int) C、void BE(int , int=5) D、int BF(int x ; int y) 11、循环体至少被执行一次的语句为()。 A、for循环 B、while循环 C、do循环 D、任一种循环 12、已知一函数中有下列变量定义,其中属于静态变量的是() A、int a=5; B、static double b; C、register char c; D、auto short d; 13、do语句能够改写为()语句。 A、复合 B、if C、switch D、 while 14、要使语句: p=new int[10]; 能够正常执行,p应定义为() A、int p; B、int p[10]; C、int *p; D、int (*p)[10]; 15、编写C++程序一般需经过的几个步骤依次是( )。 A、编译、编辑、连接、调试 B、编辑、编译、连接、调试 C、编译、调试、编辑、连接 D、编辑、调试、编辑、连接 二、填空题(每小题1分,共10分) 1、使用const 语句定义一个标识符常量时,则必须对它同时进行。 2、用于输出表达式值的标准输出流对象是_________,用于从键盘上为变量输入

相关文档
相关文档 最新文档