BME_C++测试题

生物医学工程测试(2022-1)

一. 单选题(共35 题,70.0分)

1. (单选题,2.0分)设 int a=12; 表达式a+=a-=a*=a的值是( )。

  • A. 132
  • B. 0
  • C. 12
  • D. 144

 正确答案: B

2. (单选题,2.0分)以下程序段输出的结果是()

for(int i=0,m=1; i<4; i++)
for(int j=0; j<i; j++)
m+=1;
cout<<m;

  • A. 6
  • B. 7
  • C. 17
  • D. 16

正确答案: B

3. (单选题,2.0分)下面属于C++基本数据类型的是( )。

  • A. bool
  • B. []
  • C. enum
  • D. *

正确答案: A

4. (单选题,2.0分)若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。

  • A. 数组首地址
  • B. 数组元素的个数
  • C. 数组中全部元素的值
  • D. 数组的第一个元素值

正确答案: A

5. (单选题,2.0分)假定a为一个整型数组名,则元素a[4]的字节地址为 ( )。

  • A. a+32
  • B. a+16
  • C. a+4
  • D. a+8

 正确答案: B

6. (单选题,2.0分)表达式5*2-6+’b’+3*8正确的是( )

  • A. 134
  • B. 98
  • C. 126
  • D. 78

 正确答案: C

7. (单选题,2.0分)字符串char str[]=“China”在内存中占用( )个字节。

  • A. 5
  • B. 依编译系统而定
  • C. 6
  • D. 7

正确答案: C

8. (单选题,2.0分)系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是()

  • A. 参数个数
  • B. 函数的类型
  • C. 函数名称
  • D. 参数的类型

正确答案: B

9. (单选题,2.0分)以下说法正确的是( )。

  • A. 函数的定义可以嵌套,函数的调用也可以嵌套
  • B. 函数的定义不可以嵌套,但是函数的调用可以嵌套
  • C. 函数的定义不可以嵌套,函数的调用也不可以嵌套
  • D. 函数的定义可以嵌套,但是函数的调用不可以嵌套

正确答案: B

10. (单选题,2.0分)下面有关重载函数的说法中正确的是( )。

  • A. 重载函数必须有不同的形参列表;
  • B. 重载函数必须具有不同的返回值类型;
  • C. 重载函数名可以不同;
  • D. 重载函数形参个数必须不同;

 正确答案: A

11. (单选题,2.0分)

在C++中,表示一条语句结束的符号是 (  )。

  • A. 
  • B. 
  • C. /*
  • D. //

正确答案: A

12. (单选题,2.0分)

运算符优先级按由高到低顺序排列正确的是(  )。

  • A. =,||, !=,%
  • B. ||,!=,%,=
  • C. =,%,||,!=
  • D. %,!=,||,=    

 正确答案: D

13. (单选题,2.0分)for(int x=0,y=0;!x&&y<=5;y++)语句执行循环的次数是( )。

  • A. 0
  • B. 无数次
  • C. 5
  • D. 6

 正确答案: D

14. (单选题,2.0分)下面各组语句中,不是“死循环”的是(  )

A.

int a=3379;

   while(a++%2+3%2)

   a++;

B.

int i=0;      

do            

 {           

    ++i;           

  }while(i>=0);

C.

int j, sum=0;      

   for(j=1; ; j++)         

   sum++; 

D.

int k=100;

   while(1)

   { 

       k=k%100+1; 

       if(k=20) break;

    } 

正确答案: D

15. (单选题,2.0分)下面关于循环语句的叙述中,正确的是( )。

  • A. for循环与do-while循环一样,都是先执行循环体后判断条件
  • B. for循环体内不能出现while语句
  • C. for循环只能用于循环次数已知的情况
  • D. 无论哪种循环,都可以从循环体内转移到循环体外

 正确答案: D

16. (单选题,2.0分)若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a:c<d?c:d的值 为()。

  • A. 2
  • B. 3
  • C. 1
  • D. 4

 正确答案: C

17. (单选题,2.0分)

列叙述中正确的是:( )

  • A. C++语言程序中,只有int类型的函数可以未经声明而出现在调用之后
  • B. C++语言程序中,要调用的函数必须在main()函数中定义 
  • C.  C++语言程序中,main()函数必须放在程序开始的部分
  • D. C++语言程序必须要有return语句

正确答案: A

18. (单选题,2.0分)若给定条件表达式(M)?(a++):(a--),则其中表达式M和( )等价。

  • A. M=1
  • B. M!=1
  • C. M==0
  • D. M!=0

正确答案: D

19. (单选题,2.0分)下面( )是合乎语法要求的。

  • A. int a[2][]={1,2};
  • B. int a[][]={{1},{2}};
  • C. int n=10, a[n];
  • D. int a[]={1};

正确答案: D

20. (单选题,2.0分)下列关于指针的操作中,错误的是( )。

  • A. 两个同类型的指针可以相加
  • B. 可以用一个空指针赋给某个指针
  • C. 两个同类型的指针可以进行比较运算
  • D. 一个指针可以加上两个整数之差

正确答案: A

21. (单选题,2.0分)在C++中,源文件变为可执行程序的正确顺序是( )。

  • A. 编辑,编译,链接,执行
  • B. 编译,链接,编辑,执行
  • C. 编辑,链接,编译,执行
  • D. 编译,编辑,链接,执行

 正确答案: A

22. (单选题,2.0分)所有在函数中定义的变量,都是( )。

  • A. 局部变量
  • B. 全局变量
  • C. 寄存器变量
  • D. 静态变量

正确答案: A

23. (单选题,2.0分)有如下数组声明:int values[30];,下标值引用错误的是( )。

  • A. values[10]
  • B. values[0]
  • C. values[30]
  • D. values[20]

 正确答案: C

24. (单选题,2.0分)在C++中执行以下4条语句后输出rad值为:( )
static int hot=200;
int&rad=hot;
hot=hot+100;
cout<<rad<<endl;

  • A. 300
  • B. 100
  • C. 0
  • D. 200

 正确答案: A

25. (单选题,2.0分)在C++中,当为一个变量定义引用时,引用类型________。

  • A. 必须与变量类型一致
  • B. 不一定与变量类型一致
  • C. 也即变量的地址
  • D. 也即变量的指针

 正确答案: A

26. (单选题,2.0分)类A 的一个成员函数的说明: void Set(A &a); 则该函数的参数“ A &a ”的含义是( )

  • A. 将变量a 的地址赋给类A
  • B. 变量A与a按位与后作函数参数
  • C. 类A 对象引用a 用作函数的形参
  • D. 指向A 的指针为a

正确答案: C

27. (单选题,2.0分)下面的哪个保留字不能作为函数的返回类型?( )。

  • A. long
  • B. void
  • C. new
  • D. int

正确答案: C

28. (单选题,2.0分)在int a=3,int *p=&a;中,*p的值是( )

  • A. 变量a的地址值
  • B. 无意义
  • C. 3
  • D. 变量p的地址值

 正确答案: C

29. (单选题,2.0分)不能把字符串"Hello!"赋给数组b的语句是( )。

  • A. char b[10];b="Hello!";
  • B. char b[10];strcpy(b,"Hello!");
  • C. char b[10]="Hello!";
  • D. char b[10]={'H','e','l','l','o','!'};

 正确答案: A

30. (单选题,2.0分)下面对于指针的描述不正确的是( )

  • A. 指针不能用除0以外的常量赋值
  • B. 两个指针变量的加减法无意义
  • C. 指针是地址变量
  • D. 指针指向不同基类型的变量长度不同

正确答案: B

31. (单选题,2.0分)若定义“int a[]={ 1,2, 3},*p=a;”当执行p++后,下列说法错误的是( )。

  • A. *p与a[1]等价
  • B. p向高地址移动了一个存储单元
  • C. p与a+1等价
  • D. p向高地址移了一个字节

正确答案: D

32. (单选题,2.0分)若k为int类型,则while循环执行( )次。
k=2; while(k==0) cout<<k; k--; cout<<“\n”;

  • A. 1
  • B. 10
  • C. 0
  • D. 9

 正确答案: C

33. (单选题,2.0分)有定义:int a[3][4],为了完成赋值p=a,则指针p可以定义为( )。

  • A. int *p[3][4];
  • B. int (*p)[4];
  • C. int *p[4];
  • D. int **p;

 正确答案: B

34. (单选题,2.0分)设有两个int型的指针p1和p2,则p1和p2__________。

  • A. 可以相加,也可以相减
  • B. 可以相减,但不可以相加
  • C. 可以相加,但不可以相减
  • D. 既不能相加,也不能相减

正确答案: B

35. (单选题,2.0分)下面关于for循环的叙述中,不正确的是(  )

  • A. 循环变量不必在表达式1中给出
  • B. 循环变量可增可减
  • C. 在执行过程中可以改变循环变量的初值和终值
  • D. 在循环体中,不能改变循环控制变量的值

 正确答案: C

二. 判断题(共10 题,10.0分)

1. (判断题,1.0分)某函数的实参是数组名,形参也是数组名,调用结果是形参数组会开辟一个与实参数组相同的存储单元,且存储的内容和实参数组存储的内容一样。()

  • A.
  • B.

 正确答案: 错

2. (判断题,1.0分)指针变量所保存的是程序中一个对象的数据值,通过指针变量可以直接读取对象数值。()

  • A.
  • B.

 正确答案: 错

3. (判断题,1.0分)While循环语句的循环体至少执行一次。()

  • A.
  • B.

正确答案: 错

4. (判断题,1.0分)一个数组的数组名实际上是指向该数组首元素的指针,并且允许修改它。()

  • A.
  • B.

 正确答案: 错

5. (判断题,1.0分)若n为整型,则表达式n=2/3的值是1,表达式(float)2/3的值是1.0。()

  • A.
  • B.

 正确答案: 错

6. (判断题,1.0分)在程序运行过程中,静态局部变量只被初始化一次。()

  • A.
  • B.

正确答案: 对

7. (判断题,1.0分)定义重载函数时,应在参数个数或参数类型上不同。()

  • A.
  • B.

 正确答案: 对

8. (判断题,1.0分)假定a是一个一维数组,则a[i]的指针访问方式为 *(a+i)。()

  • A.
  • B.

 正确答案: 对

9. (判断题,1.0分)C++语言的变量有四种存储类别∶自动的、寄存的、静态的和外部的,分别用保留字auto、register、static和extern表示。()

  • A.
  • B.

正确答案: 对

10. (判断题,1.0分)设a=3,b=4,c=5。则逻辑表达式: !(a+b)+c-1&&b+c/2的值为True。()

  • A.
  • B.

 正确答案: 对

三.概念辨析题(共2题,10.0分)

1.(概念辨析题,5.0分)辨析局部变量和全局变量的作用域,如果局部变量和全局变量同名,在相同作用域范围内局部变量和全局变量会如何使用?

正确答案:

局部变量的作用域为当前函数或循环等,全局变量的作用域为整个程序。

如果局部变量和全局变量同名,则在局部变量作用域范围内使用的是局部变量,而在局部变量作用域范围之外使用的是全部变量。

2.(概念辨析题,5.0分)简述break和continue在程序运行中的区别?

正确答案:

continue语句只结束本次循环,而不是终止整个循环的执行。

break语句则是结束整个循环过程(单个循环情况),不再判断执行循环的条件是否成立。break语句可以用在循环语句和switch语句中。在循环语句中用来结束内部循环;在switch语句中用来跳出switch语句。答案解析:循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。

四.程序阅读分析题((共2题,10.0分)

1.(程序阅读分析题,5.0分)

分析下列程序输出结果,并说明指针和指向变量间的关系。

#include <iostream>

using namespace std;

int main( )

{

int x=10,*p;

int y=2;

x=y++;

p=&x ;

*p+=x+y++;

cout<<x<<“,“<<y<<endl;

return 0;

}

正确答案:结果:7,4

简述:指针和指针变量的关系,指针就是地址,地址就是指针。

地址就是内存单元的编号。指针变量就是存放内存地址的变量。指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。

结果:

2.(程序阅读分析题,5.0分)

程序分析,写出运行结果,并简述其主要算法过程。

#include<iostream>

using namespace std;

int main()

{

float fac(int n);

int n=5;

float y;

y=fac(n);

cout<<n<<""<<y<<endl;

return 0;

}

float fac(int n){

float f;

if(n<O)

cout<<" n<0, dataerror!"<<endl ;

}

else

if(n==O| | n==1)

f=1;

else

f=fac (n-1)*n ;

return(f);

}

运行结果:

简述:

正确答案:

结果:5120

简述:1、每一次函数调用都会有一次返回,当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行;2、递归函数中,位于递归调用前的语句和各级被调函数具有相同的顺序;3、每一级的函数调用都有自己的私有变量;4、递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反,5、虽然每一级递归有自己的变量,但是函数代码并不会得到复制;6、递归函数中必须包含可以终止递归调用的语句。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《面向对象程序设计》试题 一、单选题(每空2分,共40分) 1、关于C++C语言关系的描述中,( )是错误的。 A.C语言C++语言的一个子集 B.C语言C++语言是兼容的 C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法中,( )是正确的。 A.int& x=m; B.int& y=10; C.int& z; D.float& t=&m; 3、考虑下面的函数原声明: void DefPar(int a, int b=7, char z = '*'); 下面函数调用中,不合法的是( )。 A.DefPar(5); B.DefPar(5,8); C.DefPar(5,'#'); D.DefPar(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( )。 A.函数的返回值类 B.参数的类 C.函数称 D.参数个数 5、下列有关C++类的说法中,不正确的是( )。 A.类是一种用户自定义的数据类 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中,如果不做特别说明,所有成员的访问权限均为私有的 D.在类中,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X类,则当程序执行到语句X array[3];时,调用了( )次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是( )。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类 8、类定义的内容允许被其对象无限制地存取的是( )。 A.private 部分 B. protected 部分 C.public 部分 D.以上都不对 9、关于常数据成员的说法,不正确的是( )。 A.常数据成员的定义形式与一般常变量的,只不过常数据成员的定义必须出现在类体中 B.常数据成员必须进行初始化,并且不能被更新 C.常数据成员通过构造函数的成员初始化列表进行初始化 D.常数据成员可以在定义时直接初始化 10、运用运算符delete删除一个动态对象时( )。 A.系统首先为该动态对象调用构造函数,再释放其占用的内存 B.系统首先释放该动态对象占用的内存,再为其调用构造函数 C.系统首先为该动态对象调用析构函数,再释放其占用的内存 D.系统首先释放动态对象占用的内存,再为其调用析构函数 11、可在类外用p.a的形式访问派生类对象 p的基类成员a,其中a是( )。 A.私有继承的公用成员 B.公用继承的私有成员 C.公用继承的保护成员 D.公用继承的公用成员 12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是(  )。 A.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针 13、设置虚基类的目的是( )。 A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 14、在C++中,用于实现动态多态性的是( )。 A.内联函数 B.重载函数 C.模板函数 D.虚函数 15、不能说明为虚函数的是( )。 A.析构函数 B.构造函数 C.类的成员函数 D.以上都不对 16、如果一个类至少有一个纯虚函数,那么就称该类为( )。 A.抽象类 B.派生类 C.纯基类 D.以上都不对 17、下面关于友元的描述中,错误的是( )。 A.友元函数可以访问该类的私有数据成员 B.一个类的友元类中的成员函数都是这个类的友元函数 C.友元可以提高程序的运行效率 D.类与类之间的友元关系可以继承 18、下列运算符中,( )运算符在C++中不能被重载。 A.&& B.[ ] C.:: D.new 19、模板的使用实际上是将类模板实例化成一个( )。 A.函数 B.对象 C.类 D.抽象类 20、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。 A.MyClass(MyClass x) B.MyClass&(MyClass x) C.MyClass(MyClass &x) D.MyClass(MyClass *x) 二、填空题(前16个空,每空1分,后2个空,每空2分,共20分) 1、类和对象的关系可表述为:类是对象的 ,而对象则是类的 。 2、在C++中,三种继承方式的说明符号为 、 和 ,如果不加说明,则默认的继承方式为 。 3、如果只想保留公共基类的一个复制,就必须使用关键字 把这个公共基类声明为虚基类。 4、若要把void fun( )定义为类A的友元函数,则应在类A的定义中加入语句 。 5、类的静态成员分为 和 。 6、运算符重载要求保持其原来的操作数个数、 、 和语法结构。 7、通过关键字 可以声明模板,通过关键字 指定函数模板的类参数,有几个类参数就有几个类关键字。 8、列出C++中两种用户自定义的数据类: 、 。 9、构造函数的作用是 。 10、后置自增运算符“++”重载为类的成员函数(设类为A)的形式为 。 三、阅读下面3个程序,写出程序运行时输出的结果:(共13分) 1、#include <iostream> using namespace std; void fun(int &a,int &b) { int p; p=a; a=b; b=p; } void exchange(int &a,int &b,int &c) { if(a<b) fun(a,b); if(a<c) fun(a,c); if(b<c) fun(b,c); } void main() { int a=12,b=89,c=56; exchange(a,b,c); cout<<"a="<<a<<",b="<<b<< ",c="<<c<<endl; } 2、#include <iostream> using namespace std; class Date { public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month, day, year; }; Date::Date(int m, int d, int y) : month(m),day(d),year(y) { } Date::Date(int m,int d):month(m),day(d) { year=2009; } Date::Date(int m) : month(m) { day=1; year=2010; } Date::Date() { month=1; day=1; year=2010; } void Date::display() { cout <<month<<"/"<<day<<"/"<<year<<endl; } void main() { Date d1(12,31,2009); Date d2(12,31); Date d3(1); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); } 3、#include <iostream> using namespace std; class A { public: A() { cout<<"constructing A "<<endl; } ~A() { cout<<"destructing A "<<endl; } }; class B: public A { public: B() { cout<<"constructing B "<<endl; } ~B() { cout<<"destructing B "<<endl; } }; class C : public B { public: C() { cout<<"constructing C "<<endl; } ~C() { cout<<"destructing C "<<endl; } }; void main() { C c1; } 四、编程题(共27分) 1、(10分)已知复数类Complex的声明如下: class Complex { public: Complex(); Complex(double); Complex(double, double); friend Complex operator + (Complex&, Complex&); friend ostream & operator << (ostream&, Complex&); friend istream& operator >> (istream&, Complex&); private: double real, imag; }; 要求: (1)写出该类的所有构造函数的类外定义代码。 (2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。 2、(17分)下列Base类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。 class Base { public: virtual double area()=0; }; double total(Base *s[ ], int n) { double sum=0.0; for(int i=0; i<n; i++) sum+=s[i]->area( ); return sum; } 要求: (1)从Base类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。 (2)写出main( )函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值