阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
【说明】
设计希赛IT教育研发中心的工资管理系统,该中心主要有3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资1000元,然后再按当月销售额的4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5‰。
按要求设计一个基类employee,销售员类salesman,经理类manager,销售经理类 salesmanager。
程序5-1是类employee的模块内容,程序5-2是类salesman的类模块内容,程序5-3是类manager的模块内容,程序5-4是类salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量10000后的输出结果如下:
张三所管部门月销售量:10000
销售经理:张三
编号:1001
本月工资:5050
include <iostream.h>
include <string.h>
class employee
{
protected:
int no;
char *name;
float salary;
public:
employee(int num,char *ch)
{ no=num;
name=ch;
salary=0; }
virtual void pay()=0;
virtual void display()
{ cout<<"编号:"<<no<<endl;
cout<<"本月工资:"<<salary<<endl; }
};
【程序5-2】
class salesman: (1)
{
protected:
float commrate, sales;
public:
salesman(int num,char *ch):employee(num,ch)
{ commrate=0.04; }
void pay()
{ cout<<name<<"本月销售额:";
cin>>saies;
salary=sales*commrate+1000; }
void display()
{ cout<<"销售员:"<<name<<endl;
employee::display(); }
};
【程序5-3】
class manager: (1)
{
protected:
float monthpay;
public:
manager(int num,char *ch):employee(num,ch)
{ monthpay=8000; }
void pay()
{ salary=monthpay; }
void display()
{ cout<<"经理:"<<name<<endl;
employee::display(); }
};
【程序5-4】
class salesmanager: (2)
{
public:
salesmanager(int num,char *ch): (3)
{ monthpay=5000;
commrate=0.005;}
void pay()
{ cout<<name<<"所管部门月销售量:";
cin>>sales;
(4) }
void display()
{ cout<<"销售经理:"<<name<<endl;
(5) }
};
void main() //主测试函数
{ salesmanager p1 (1001,"张三");
p1.pay();
p1.display();
}
第1题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
【函数】
main()
{
int number[20],n,m,i;
printf("the total numbers is:");
scanf("%d",&n);
printf("back m:");
scanf("%d",&m);
for(i=0;i<=n-1;i)
scanf("%d,",&number[i]);
(1);
for(i=0;i<=n-1;i)
printf("%d,",number[i]);
}
move(array,n,m)
int n,m,array[20];
{
int *p,array_end;
array_end=(2);
for(p=array[n-1];(3);p--)
*p=(4);
*array=array_end;
m--;
if(m>0) (5);
}
第3题
阅读以下说明和Java代码,请回答问题1和问题2。
【说明】
己知类Stock和类cxyjava都定义在cxyjava.java文件中,类Stock的定义中第14行前共有四行出现了错误,将下面代码修改正确并完善后的输出结果为:
0:0
1:23
【Java代码】
01 public class Stock{
02 static {
03 shares = 0;
04 share val = 0.0;
O5 }
06 public Stock(){getData();}
07 public Stock(int n, iht pr=0){
08 shares = n;
09 share val = pr;
10 getData();
11 }
12 public void getData() {
13 System.out.println(shares + ":"+share_val);
14 }
15 private int shares;
16 private int share_val;
17 };
18
19 public class cxyjava{
20 public static void main(String args[]) {
21 Stock a = (1) ;
22 Stock b = new Stock(1,23);
23 //其他无输出代码省略
24 }
25 }
请指出错误所在行号并给出该行修改后的完整结果。
第4题
阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。
【应用说明】
某应用程序可选择打开用户指定的文本文件,将其内容显示在指定的文本框内供用户编辑,并将编辑后的结果保存在用户指定的文件中。运行时的窗口如图6-1所示,其中有6个标签、一个驱动器列表框、一个目录列表框、一个文件列表框、一个文件类型组合框、一个文件编辑文本框、一个文件名文本框以及两个命令按钮。
该程序的开发要求如下。
(1)通过驱动器列表框(Drivel)、目录列表框(Dirl)和文件列表框(Filel),选择文件。
(2)文件类型组合框(Cmb_type)设置为下拉式列表框,其中有三个供选项,分别为“所有文件(*.*)”、“文本文件(*.txt)”和“可执行文件(*.exe)”。在文件列表框中列出的文件类型会自动与文件类型组合框中选择的文件类型相匹配。
(3)在文件列表框中单击一个文件名时,该文件名会显示在文件名文本框 (Txt filename)中。
(4)在文件列表框中双击一个文件名时,若是文本文件,则在文件编辑文本框 (Txt file)中显示该文件的内容并可进行编辑;若不是文本文件,则弹出一个对话框,提示“请选择文本文件!”。
(5)对于编辑后的文本文件,可在文件名文本框中输入新的文件名,并单击命令按钮(Cmd save)进行保存。
【Visual Basic程序代码】
Private Sub Form_Load()
Cmb_type.Addltem "所有文件(*.*)"
Cmb_type.Addltem "文本文件(*.txt)"
Cmb_type.Addltem "可执行文件(*.exe)"
Cmb_type.ListIndex=0
Filel.Pattern="*.*": Txt_filename.Text=" "
Txt_file.Text= " "
End Sub
Private Sub Dirl Change()
Filel.Path=(1)
End Sub
Private Sub Drivel Change()
Dirl.Path=Drivel.Drive
End Sub
Private Sub Cmb_type_click()
Select Case Cmb_type.(2)
Case 0
Filel.Pattern="*.*"
Case 1
Filel.Pattern="*.txt"
Case 2
Filel.Pattern="*.exe"
End Select
End Sub
Private Sub Cmd_save_Click()
usrFile=GetFileName() '函数GetFileName获得要保存的文件名
Open usrFile For Output As 1 '定义usrFile为1号输出文件
Print 1,Txt file.Text '输出到1号文件
Close 1
End Sub
Private Sub Filel_DblClick()
If right(Filel.FileName,3)<>(3)Then
MsgBox "请选择文本文件!"
Exit Sub
End If
usrFile=GetFileName() '函数GetFileName获得要打开的文件名
Open usrFile For Input As 1 '定义usrFile为1号输入文件
Txt_file.Text=" "
DO While (4) EOF(1)
Line Input l,fContext '从1号文件读入一行
Txt_file.Text;Txt file.Text +(5)+vbCrLf
Loop
Close 1
End Sub
'其他代码略
第5题
阅读以下说明、Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
本程序输出10000之内的所有完全数。完全数是指等于其所有因子和(包括1,但不包括这个数本身)的数。例如:6=1×2×3,6=1+2+3,则6是一个完全数。
【程序】
public class PerfectNum
{
Public static void main(String args[])
{
int count=1;
for(int i=1; i<10000; i++)
{
int y=0;
for(int j=1; j<i; j++)
if((1))
y=(2)
if((3))
{
System.out.print( (4) +String.valueOf('\t'));
(5)
If(count%3==0)
System.out.printin();
}
}
}
第6题
试题六(共15分)
阅读以下说明和Java代码,填补Java代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
已知某公司主要有两大类耗电资产( Asset):计算机(ComputerAsset)和建筑物( Building Asset)。为了节约能源,通过控制各种电源,将可关闭的房灯、计算机显示器等在夜间关闭。
为了实现上述需求,设计了如图6-1所示的类图,并用下面的Java代码加以实现。
【Java代码】
abstract class Asset{ /*通用资产,基类*/}
interface PowerSwitchable{ /*可在夜间关闭电源的物体实现该接口*/
public void powerDown();
public void powerUp();
}
abstract class BuildingAsset extends Asset{/*建筑物资产*/
protected int room;
public BuildingAsset(int room){ this.room= room; }
}
abstract class BuildingLight extends BuildingAsset{
//灯的通用信息:flourescent/incandescent等,略
BuildingLight(int roomNumber){ super(roomNumber);}
}
classEmergencyLight (1) {/*应急灯,永不关闭*/
EmergencyLight(int roomNumber){
super(roomNumber);
}
}
class RoomLights (2) {
RoomLights(int roomNumber){ super(roomNumber); }
public void powerDown(){ /*关电源,代码略*/}
public void powerUp(){/*开电源,代码略*/}
}
/*ComputerAsset、 Computer CPU和Computer Monitor代码略*/
public class BuildingManagement{
Asset things[]= new Asset[24];
int numltems=0;
public void goodNight(){/*值班员定时“关闭”时调用,关闭可关闭的电源*/
for (int i=0; i<things.length; i++)
if( things[i] instanceof (3) )
((PowerSwitchable)things[i]).powerDown();
}
/*goodMorning()与goodNight()类似,依次调用powerUp(),其实现细节此处略*/
public void add(Asset thing){ /*为建筑添加资产*/
things[ (4) ]=thing;
}
public static void main(String[] args){
BuildingManagementbl= (5) BuildingManagement();
bl.add(new RoomLights(101)); //101房间的控制灯
bl.add(new EmergencyLight(101)); //101房间的应急灯
bl.add(new ComputerCPU(10104));//101房间4号桌上的计算机主机
bl.add(new ComputerMonitor(10104)); // 101房间4号桌上的计算机显示器
bl.goodNight();
}
}
第7题
阅读以下说明和C函数代码,回答问题并将解答写在对应栏内。
【说明】
著名的菲波那契数列定义式为
f1=1 f2=1 fn=fn-1+fn-2 (n=3,4,…)
因此,从第1项开始的该数列为1,1,2,3,5,8,13,21,…。函数fibl和fib2分别用递归方式和迭代方式求解菲波那契数列的第n项(调用fib1、fib2时可确保参数n获得一个正整数)。
【C函数代码】
函数fib1和fib2存在错误,只需分别修改其中的一行代码即可改正错误。
(1)函数fib1不能通过编译,请写出fib1中错误所在行修改正确后的完整代码。
(2)函数fib2在n≤2时不能获得正确结果,请写出fib2中错误所在行修改正确后的完整代码。
第8题
阅读以下说明和C程序代码,将应填入(n)处的字句写在对应栏内。
【说明】
下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。
函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。
【C程序代码】
include <stdio.h>
include <stdlib.h>
int isPalm(long m)
{ /*判断m是否为回文数*/
int i = 0, k = 0;
char str[32];
while (m > 0) { /*从个位数开始逐个取出m的各位数字并存入字符数组str*/
str[k++] =(1)+ '0';
m = m / 10;
}
for(i = 0; i < k/2; i++) /*判断str中的k个数字字符序列是否是回文*/
if ( str[i] != str[(2)] ) return 0;
return 1;
}
int main ( )
{
long n, a, t;
printf("input a positive integer:"); scanf("%ld",&n);
if (n < 100 || n > =1000) return -1 ;
while((3)) { /*n不是回文数时执行循环*/
printf("%ld-> ", n);
for(a = 0, t = n; t > 0; ) { /*计算n的反序数并存入a*/
a =(4)*10 + t % 10; t = t / 10;
} /*end of for*/
n =(5); /*与反序数求和*/
} /*end of while*/
printf ("%id\n",n);
system("pause"); return 0;
}
第9题
阅读以下说明和算法,完善算法并回答问题。
【说明】
假设以二维数组G[1..m,1..n)表示一幅图像各像素的颜色,则G[i,j]表示区域中点(i,j)处的颜色,颜色值为0~k的整数。
下面的算法将指定点(i0,j0)所在的同色邻接区域的颜色置换为给定的颜色值。约定所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域。
例如,一幅8×9像素的图像如图2-1所示。设用户指定点(3,5),其颜色值为0,此时其上方(2,5)、下方(4,5)、右方(3,6)邻接点的颜色值都为0,因此这些点属于点(3,5)所在的同色邻接区域,再从上、下、左、右四个方向进行扩展,可得出该同色邻接区域的其他点(见图2-1中的阴影部分)。将上述同色区域的颜色替换为颜色值7所得的新图像如图2-2所示。
【算法】
输入:矩阵G,点的坐标(i0,j0),新颜色值newcolor。
输出:点(i0,j0)所在同色邻接区域的颜色置换为newcolor之后的矩阵G。
算法步骤(为规范算法,规定该算法只在第七步后结束)如下。
第一步:若点(i0,j0)的颜色值与新颜色值newcolor相同,则(1);
第二步:点(i0,j0)的颜色值→oldcolon创建栈S,并将点坐标(i0,j0)入栈;
第三步;若(2),则转第七步;
第四步;栈顶元素出栈→(x,y),并(3);
第五步;1)若点(x,y-1)在图像中且G[x,y-1]等于oldcolor,则(x,y-1)入栈S;
2)若点(x,y+1)在图像中且GIx,y+1]等于oldeolor,则(x,y+1)入栈S;
3)若点(x-1,y)在图像中且G[x-1,y)等于oldcolor,则(x-1,y)入栈S;
4)若点(x+1,y)在图像中且G[x+1,y)等于oldcolor,则(x+1,y)入栈S;
第六步:转(4);
第七步:算法结束。
【问题】
是否可以将算法中的栈换成队列?回答;(5) 。
第10题
试题二(共15分)
阅读以下说明和C程序代码,将解答写在答题纸的对应栏内。
【说明】
下面是一个待修改的C程序,其应该完成的功能是:对于输入的一个整数num,计算其位数k,然后将其各位数字按逆序转换为字符串保存并输出。若num为负整数,则输出字符串应有前缀“-”。例如,将该程序修改正确后,运行时若输入“14251”,则输出“15241”;若输入“-6319870”,则输出“-0789136”。
下面给出的C程序代码中有五处错误,请指出错误代码所在的行号并给出修改正确后的完整代码行。
【C程序代码】
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!