计算机水平考试-程序员分类模拟题17.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序员分类模拟题17
试题一
阅读以下说明和C++代码,填补C++代码中的空缺,将解答写在对应栏内。
[说明]
已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。
其中一些员工是正式的,按年薪分周发放(每年按52周计算);另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。
下面是实现该工资系统的C++代码,其中定义了4个类:工资系统类PayRolK员工类Emplovee. 止式工类Salaried和计时工类Hourly, Salaried和Hourly是Employee的了类。
[C++代码]
//头文件和域名空间略
const int EMPL0YEE_NUM=5;
class Employee{
protected:
int emDCode;//员工号
string name;//员T姓名
double salary;//周发放工资
public:
Employee(const int empCode,const string &name){
this- >empCode=empCode ; this - >name=name ;
}
virtual^Employeel {}
virtual void payl=0;
double getSalaryl{return this->salary;}
}; f
class Salaried ________ {
private : double payRate ;//年薪
public:
Salaried(const int empCode,const string &name,double payRate)
:Employee(empCode,name){
this- >payRate=payRate ;
void payl{
this->salary= ________ ; //计算正式员工的周发放工资数
cout<<this- >name<< 11 : 11 <<this- >salary<<endl ;
«
f
class Hourly ________ {
private:
double payRate;//彳、日寸丁资数
int hours ;//周工作小时数
publie:
Hourly(const int empCode, const string &name, int hours,double
payRate) :Employee(empCode,name){
this- >payRate=payRate ; this- >hours=hours,
void payl{
this- >saiary= _______ ; //计算计时工的周发放工资数
cout<<this->name<< 11 : : <<this- >salary<<endl ;
class PayRoll{ public:
void pay(Employee* e[] ){
for (int i = 0; i<EMPLOYEE_ NUM; i + +) { e [i] ->payl; int mainl{
PayRoll* payRoll=new PayRoll;
______ employees[EMPLOYEE_ NUM]={
new Salaried(1001,"Zhang San",58000.00),
//此处省略对其他职工对象的生成
new Hourly(1005,"LI",12,50.00),
};
payRoll->pay ( ________ );
double total=0•0;
for (int i = 0;i<EMPLOYEE_ NUM;i + +)
(total +=employees [i] ->getSalaryl;} //统计周发放_L资总额
cout<< 卄,总发放额=” V Vtotal V Vendl ;
delete payRoll; return 0;
试题二
阅读以下说明和c程序,填充程序中的空缺。
[说明]
埃拉托斯特尼筛法求不超过自然数N的所有索数的做法是:先把N个自然数按次序排列起来,1 不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3, 3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5, 5是素数(输出),再把5的倍数都划去。
这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。
下面的程序实现埃拉托斯特尼筛法求索数,其屮,数组元>sieve[i] (u>0)的下标i对应自然数i, sieve [i]的值为1/0分别表示i在/不在序列中,也就是将:1划去(去掉)时,就将sieve [i] 设置为0。
[C程序]
#include <stdio.h>
#define N 10000
int main7
{
char sieve[N+l]=8;
int i=0,k;
/*初始时2~N都放入sieve数组* /
for (i=2 ;____ ; i + + )
sieve[i]=1;
for(k=2••){
八找出剩卡的数中垠小者并用K表示★/
for (;k<N+l& & sieve [k] = = 0 ;__ );
if ( _____ ) break;
print ("%d\t"z k) ;/*输出素数*/
/ *从S ieve111去掉k及其倍数* /
for (i=k; i<N+l ; i= ____ ) return 0;
}/*end of main*/
试题三
【应用说明7】
本应用程序的运行窗口显示一行字''欢迎光临〃,还有2个按钮,一个显示''闪烁〃;一个显示''停止〃。
只要用户单击''闪烁〃按钮,文字''欢迎光临〃就会以0・5秒消失、0.5秒显示反复进行闪烁;单击''停止〃按钮时,闪烁停止,恢复图示的初态。
在开发过程屮,需要设置的属性如表4.1所示。
表4・1属性设置
在开发过程中,需要编写的程序代码如下:
【程序代码7】
Ptivate Sub CmdF_Clickl4
Timerl Enabled = 15
Label Visible = False
End Sub
Ptivate Sub Timetl_Timer14
Label Visible = not 17
End Sub
Ptivate Sub CmdT_Clickl4
Timerl Ensbled = 19
Label Visible = true
End Sub
答案:
试题一
:public Employee 2 > payRate/52 3、:public Employee 4、hours* PayRate 5、Employee*或static Employee*
6、e mployees
本题考查考生利用C++语言设计程序的能力,涉及类、函数和虚函数的定义和相关操作,以及继承关系。
考生需要根据给岀的案例和执行过程说明,认真阅读理清程序思路,然后完成程序的设计。
根据题目中有关信息的描述,Salaried和Hourly是Employee的了类,它们Z间是继承关系。
第一空和第三空处需耍体现岀类之间的继承关系。
在子类的构造函数中,调用父类的构造函数,所以继承的权限为public,其语法为:public父类名。
[大I此,第一空处和第三空处均应填入::public Employeeo 根据题目的描述及程序段的注释,第二空处实现计算正式员工的周发放工资数。
正式员工的周发放工资数为年薪除以总周数,因此应填入payRate/52 o第四空处实现计算计时工的周发放工资数。
计吋工的周发放工资数为周工作小时数乘上小时工资数。
因此,第四空处应填入hours* PayRateo 第五空处用于生成5个员工的信息,此处缺少一个类型修饰符。
由对象的生成信息可知,此处应填入Employee*或static Employee*o
第六空处调用工资系统类PayRoll中的pay函数。
由类PayRoll中构造函数void pay (Employee*
e [])的形式可以确定,第六空处应填入employeeso 试题二
7、i VN+l或其等价形式8、k+ +或++k或其等价形式9、k>N或k>=N+l或其等价形
式10> i+k或其等价形式
11、sieve [i] =0或其等价形式
本题要求是完成程序,该程序的功能是找到不超过口然数N的所有素数。
首先在初始时2〜N都放入sieve 数组屮,所以i的取值范围为2~N,包含N,所以第一空应该填i的最大取值为N,所以第一空填i<N+l或者i<=N,并赋值sieve [i]=l,表示所有的数,无论是否为索数都放入数组中,接下来找出剩卜•的数
中最小者并用K表示,在for循环中,每执行一次循环就k值就要加1,所以第二空应该填k++或++k或其等价形式,当循环执行到k>N或k>=N+l时,即k值超过了N值时,该循环结束用break跳出里面的循环语句,故笫三空应该填k>N或k>=N+l或其等价形式,接下来输出素数,再删除素数的倍数,这也是一个循环语句,此吋变量i是从i开始到i+k结朿,所以第四空应填i+k或其等价形式,找到是索数的倍数后,再将该索数的倍数赋值为0,从sieve [i]数组中划去,所以第五空应填sieve [i] =0或其等价形式。
试题三
12> Enabled
13、500
[解析]单击''闪烁〃按钮后,文字才开始闪烁,所以初始时定时器并未启动,(1)处应填定时器的Enabled 属性。
定时器的时间间隔为0・5秒,即500毫秒,所以⑴ 处应填500 (Interval属性的单位是毫秒)。
14、True 15、Label .Visible
16、false
[解析]单击''闪烁〃按钮后,应启动定吋器,所以修改Timerl的Enable属性为血ue。
定时器到时的时候,应当使Label的是否可见属性(Visible)取反,所以(4)处应填Label. Visible。
单击''停止〃按钮后,应停止定时器,所以修改Timerl的Enable属性为false。