高级语言C++程序设计--考试试卷 - 答案_第1页
高级语言C++程序设计--考试试卷 - 答案_第2页
高级语言C++程序设计--考试试卷 - 答案_第3页
高级语言C++程序设计--考试试卷 - 答案_第4页
高级语言C++程序设计--考试试卷 - 答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、 高级语言C+程序设计-考试试卷答案姓名: _ 成绩 _第一题 选择(22题,每题1.5分, 共33分)答案:1-11题DCDACDABDDB答案:12-22题DADDADDDAAD1. 按照C 语言规定的用户标识符命名规则,不能出现在标识符中的是A)大写字母 B)下划线 C)数字字符D)连接符2. 以下选项中不合法的标识符是A)cout B)FOR C)&&a D)_003. 设有定义:int x=2;,以下表达式中,值不为6的是A)x*=(1+x) B)x*=x+1 C)x+,2*x D)2*x, x+=24. C+ 源程序中不能表示的数制是A)二进制 B)十六进制 C)十

2、进制D)八进制5. 以下关于结构化程序设计的叙述中正确的是A) 一个结构化程序必须同时由顺序、分支、循环三种结构组成B) 有三种基本结构构成的程序只能解决小规模的问题C) 在C +语言中,程序的模块化是利用类实现的D) 结构化程序使用goto 语句会很便捷6. 以下定义语句中正确的是A) float a=1,*b=&a,*c=&b; B) int a=b=0;C) double a=0.0;b=1.1; D) char A=65+1,b=b;7. 计算机能直接执行的程序是A) 可执行程序 B) 目标程序 C) 源程序 D) 汇编程序8. 以下叙述中正确的是A) C+ 语言程序中

3、的注释必须与语句写在同一行 B) 简单C+ 语句必须以分号结束C) C+ 语句必须在一行内写完 D) C+ 程序中的每一行只能写一条语句9. 以下选项中,不合法的C+语言用户标示符是A) AaBc B) ab C) 1 D) a-b10.关于C+语言的变量,以下叙述中错误的是A) 由三条下划线构成的符号名是合法的变量名B) 所谓变量是指在程序运行过程中其值可以被改变的量C) 程序中用到的所有变量都必须先定义后才能使用D) 变量所占的存储单元地址可以随时改变11. C +语言中double 类型数据占字节数为A) 12 B) 8 C) 4 D) 1612. 以下叙述中正确的是A) 空语句就是指程

4、序中的空行B) 花括号对只能用来表示函数的开头和结尾,不能用于其他目的C) 复合语句在语法上包含多条语句,其中不能定义局部变量D) 当用cin 从键盘输入数据时,每行数据在没有按下回车键(Enter 键)前,可以任意修改13. 以下叙述中正确的是A) C+ 语言程序总是从main 函数开始执行B) C+ 语言程序所调用的函数必须放在main 函数的前面C) C+ 语言程序中main 函数必须放在程序开始位置D) C+ 语言程序总是从最前面的函数开始执行14. 以下叙述中正确的是A)if 语句只能嵌套一层 B)不能在else 子句中在嵌套if 语句C)改变if-else 语句的缩进格式,会改变程

5、序的执行流程 D)if 子句和else 子句中可以是任意合法的C +语句15. 以下叙述中正确的是A)在while 语句和do-while 语句中无法使用continue 语句B)当break 出现在循环体中的switch 语句体内时,其作用是跳出该switch 语句体,并终止循环C)continue 语句的作用是:在执行完本次循环体中剩余语句后,终止循环D)只能在循环体内和switch 语句体内使用break 语句16. 已定义以下函数:int fun(int *p)return *p;fun 函数返回值是A)一个整数 B)形参p 的地址值 C)形参p 中存放的值 D)不确定的值17. 设有

6、定义:double a10,*s=a;以下能够代表数组元素a3的是A)*s3 B)(*s)3 C)*s+3 D)*(s+3)18. 下列选项中,能正确定义数组的语句是A)int num0.2008; B)int num ;C)int N=2008; int numN; D)#define N 2008; int numN;19. 设有以下函数:void fun(int n,char *s). 则下面对函数指针的定义和赋值均正确的是A)void *pf(); pf=fun; B) void (*pf)(int,char );pf=&fun;C)void *pf(); *pf=fun; D

7、)void (*pf)(int ,char *) ; pf=fun;20. 以下叙述中正确的是A)int *p1, int *p2, int *p3;都是合法的定义指针变量语句B)语句p=NULL;与p=0 是等价的语句C)p=NULL;执行后,指针p 指向地址为0 的存储单元D)指针变量只能通过求指针运算符(&)获得地址值21. int *func(int a10, int n);则以下叙述中正确的是A)说明中的a10改为a或*a 效果完全一样B)函数中不能对a 进行移动指针(如a+)的操作C)只有指向10 个整数内存单元的指针,才能作为实参传递给形参D)形参a 对应的实参只能是数组

8、名22. 若有以下语句typedef struct S int g; char h; T;以下叙述中正确的是A)T 是struct S 类型的变量 B)可用S 定义结构体变量C)S 是srurct 类型的变量 D)可用T 定义结构体变量第二题:类与对象编程 (25分)自定义一个简单的时间类TimeType,它具有数据成员h、m、s,用来表示当前时间的时、分、秒。而后设计该类的功能,进而设计出相应的类成员函数, 实现对时分秒的增加、判断两个时间是否相等以及对时间的输出等操作。试完成各类成员函数并编制主函数,说明TimeType 类对象,对定义的各成员函数进行调用,以验证它们的正确性。class

9、TimeType int h,m,s; /私有数据成员,表示当前时间的时、分、秒public:TimeType(int h0=0, int m0=0, int s0=0);/构造函数,设置时、分、秒并设置参数默认值void incrementSec(int sec); ; ; /增加若干秒/增加若干分 /增加若干小时bool equal(TimeType t2); /判断两时间是否相等void printTime(); /屏幕输出时间对象的有关数据(时、分、秒);编制类似于如下样式的主函数:TimeType t1(11, 48, 59), t2(11, 59, 48), t3;cout<

10、<"t1=" t1.printTime(); if(t1.equal(t2) cout<<"t1=t2"<<endl; t1.incrementMin(30); cout<<"t1=" t1.printTime();#include<iostream> using namespace std; class TimeType /自定义的时间类TimeTypeint h, m, s; /私有数据成员,表示当前时间的时、分、秒public:TimeType(int h0 = 0, int

11、 m0 = 0, int s0 = 0);/构造函数,设置时、分、秒并设置参数默认值void incrementSec(int sec); /增加若干秒,sec>0void incrementMin(int min); /增加若干分,min>0void incrementHou(int hrs); /增加若干小时,hrs>0bool equal(TimeType t2); /判断两时间是否相等void printTime(); /屏幕输出时间对象的有关数据(时、分、秒);TimeType:TimeType(int h0, int m0, int s0)h = h0; m =

12、m0; s = s0;void TimeType:incrementSec(int sec)s = s + sec; m = m + s / 60; s = s % 60;h = h + m / 60; m = m % 60;h = h % 24;void TimeType:incrementMin(int min)m = m + min; h = h + m / 60; m = m % 60;h = h % 24;void TimeType:incrementHou(int hrs)h = h + hrs;h = h % 24;bool TimeType:equal(TimeType t2)

13、int time1 = (h * 60 + m) * 60 + s;int time2 = (t2.h * 60 + t2.m) * 60 + t2.s; return time1 = time2 ? true : false;void TimeType:printTime()cout << "现在是:" << h << "时" cout << m << "分" cout << s << "秒" << endl;int

14、main() TimeType t1(11, 48, 59), t2(11, 59, 48), t3;cout << "t1=" t1.printTime(); cout << "t2=" t2.printTime(); cout << "t3=" t3.printTime();if (t1.equal(t2)cout << "t1 等于 t2" << endl;else cout << "t1 不等于 t2" <&l

15、t; endl; t1.incrementMin(30);cout << "'t1.incrementMin(30);' => "cout << "t1=" t1.printTime();t1.incrementSec(45);cout << "'t1.incrementSec(45);' => "cout << "t1=" t1.printTime();t1.incrementHou(3);cout << &q

16、uot;'t1.incrementHou(3);' => "cout << "t1=" t1.printTime();第三题:继承与派生编程(22分)利用虚函数手段,按照3 种不同的计算方法来求出Fibonacci 数列的第n项(具体项值)并输出。具体地说,可通过在基类baseCla 及其派生类fib1Cla、fib2Cla 和fib3Cla 中说明如下的同一个虚函数“ virtual double fib(int n);”,来实现求Fibonacci 数列第n 项值并返回的3 种不同求解方法:简单变量“数据平移”法(显示出第14

17、76项)、使用数组的实现法(显示出第888项)以及使用递归函数的实现法(显示出第35项)。 基类和派生类可做如下定义:class baseCla /自定义的基类baseClapublic: virtual double fib(int n)=0; ;class fib1Cla:public baseCla private: public: virtual double fib(int n); /简单变量“数据平移”法; 利用函数void fun(baseCla *p, int n)调用相应派生类的函数, 并以科学计数法输出到小数点后15位. #include<iostream>us

18、ing namespace std;class baseCla /自定义的基类baseClapublic:virtual double fib(int n) = 0; /基类baseCla中说明了一个虚函数fib,且为纯虚函数;class fib1Cla : public baseCla /由基类baseCla派生出的fib1Cla类 double a = 1, b = 1, c = 0, i;public:virtual double fib(int n); /派生类中说明同一个虚函数fib(简单变量"数据平移"法);class fib2Cla : public base

19、Cla /派生类fib2Cladouble a1000;public:virtual double fib(int n);/virtual double fib(int n); /派生类中说明同一个虚函数fib(使用数组的求解法);class fib3Cla :public baseClapublic:virtual double fib(int n); /使用递归函数的实现法;double fib1Cla:fib(int n)if (n = 1 | n = 2)return 0;elsefor (i = 3; i <= n; i+)c = a + b;a = b;b = c;retur

20、n c;double fib2Cla:fib(int n)a0 = a1 = 1;int i;if (n = 1 | n = 2)return 1;elsefor (i = 2; i <= n; i+)ai = ai - 1 + ai - 2;return an-1; /此处的n-1即为逻辑意义上的ndouble fib3Cla:fib(int n)if (n = 1 | n = 2)return 1;elsereturn fib(n - 1) + fib(n - 2);void fun(baseCla *p, int n)/自定义函数fun,形参p为指向基类的指针,其对应实参/可为不同

21、派生类对象的地址;n指明要求出数列的第n项/自定义函数fun,形参p 为指向基类的指针,其对应实参/可为不同派生类对象的地址;n 指明要求出数列的第n 项double d = p->fib(n); /根据p 指针值的不同,将调用不同派生类的虚函数fibcout.flags(ios:scientific);cout.precision(15);cout << "fib(" << n << ")=" << d << endl;void main() fib1Cla obj1; /fib1Cla

22、 类对象obj1fib2Cla obj2; /fib2Cla 类对象obj2fib3Cla obj3; /fib3Cla 类对象obj3cout << "- fib1Cla -" << endl;fun(&obj1, 1476); /简单变量“数据平移”求解方法,求fib(1476)cout << "- fib2Cla -" << endl;fun(&obj2, 888); /数组求解方法,求fib(888)cout << "- fib3Cla -" <

23、< endl;fun(&obj3, 35); /递归求解方法,求fib(35)第四题:模板/指针编程(20分)编写一个具有如下样式的类模板tmplt ,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)和普通参数n(元素个数也可变化):template <class T, int n> class tmplt T arrn; / n 个T 类型的数据存放于数组arr 之中public:void dataIn(); /从键盘输入n 个T 类型数据放入arr 数组中void reverseOut(); /将arr 数组中的数据按输入的相反顺序输出

24、void reverseOutByList(); /用链表形式, 反序输出 ;在reverseOutByList()中, 可定义如下的结构类型, 以形成链表项struct item T data;item * next; *first , *temp; #include<iostream>using namespace std;template <class T, int n>class tmpltT arrn;public:void dateIn();void reverseOut();void reverseOutByList();template <clas

25、s T, int n>void tmplt<T, n>:dateIn()for (int i = 0; i < n; i+)cin >> arri;template <class T, int n>void tmplt<T, n>:reverseOut()cout << "该位数的反序数为:"for (int i = n - 1; i >= 0; i-)cout << arri << " "cout << endl;template <class T, int n>void tmplt<T, n>:reverseOutByList() /指针与链表的求解方法struct item /结构类型,用于形成链表项T data; /存放数据item * next; /指向本结构的指针,由它“串联”起后项;item *first = NULL, *t

温馨提示

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

评论

0/150

提交评论