首页

软考 - 初级_程序员

类型:
选择方向:
选择考试:
题型:
为你找到 191 个题目。

阅读以下说明和C++代码,填补C++代码中的空缺(1)~(6),将解答写在答题纸的对应栏内。
【说明】
已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放(每年按52周计算);另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。
下面是实现该工资系统的C++代码,其中定义了四个类:工资系统类PayRoll,员工类Employee,正式工类Salaried和计时工类Hourly,Salaried和Hourly是Employee的子类。

【C++代码】
   //头文件和域名空间略
   const int EMPLOYEE_NUM=5;
   class Employee {
        protected:
              int empCode;            //员工号
              string name;            //员工姓名
              double salary;          //周发放工资
        public:
              Employee(const int empCode, const string &name ) {
                   this->empCode=empCode;    this->name=name;
              }
              virtual ~Employee(){ }
  virtual void pay()=0;
              double getSalary() { return this->salary; }
  };
  class Salaried  (1)  {
     private:     double payRate;    //年薪
     public:
       Salaried(const int empCode, const string &namet double payRate):Employee (empCode, name)   {
                     this->payRate=payRate;
       }
       void pay() {
           this->salary= (2) ;   //计算正式员工的周发放工资数
           cout << this->name << ":" << this->salary<   };
  class Hourly  (3)  {
       private:
            double payRate;            //小时工资数
  int hours;                 //周工作小时数
     public:
         Hourly (const int empCode. const string &name, int hours, double payRate)
         :Employee(empCode, name) {
            this->payRate=payRate;    this->hours=hours;
     }
     void pay()  {
          this->salary= (4) ;  //计算计时工的周发放工资数
          cout << this->name << ":" << this->salary << endl;
     }
  };
  class PayRoll  {
     public:
         void pay (Employee*e[])  {
              for (int i=0;  i                    e[i]->pay();
             }
     }
};
int main()  {
     PayRoll payRoll=new PayRoll;
      (5)  employees [EMPLOYEE_NUM]= {
            new Salaried (1001, "Zhang San", 58000.00),
            //此处省略对其他职工对象的生成
            new Hourly (1005, "Li", 12, 50.00),
     };
     payRoll->pay( (6) );
     double total=0.0;
     for (int i=0;  i         { total+=employees[i]->getSalary();}    //统计周发放工资总额
        cout<<"总发放额="<         delete payRoll;  return 0;
}

(共 15 分)
阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工人数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。 
【Java 代码】
irnport  java.util.Scanner;
 
pub1ic  c1ass  JavaMain   {
static float  average(float  x ,int  y)   throws  Exception{
if   (y = =0   )   throw new Exception(   (1)     );
return  x/y;
}
static void  cacu1ate( )  throws  Exception{
float surnSa1ary;
int employeeNumber;
Scanner  sc  =new  Scanner (    (2)     ) ;
try{
System.out.println(" 请输入当月工资总和与员工数: ");
surnSalary=sc.nextFloat( );          //从标准输入获得工资总和
employeeNumber= sc.nextInt ( ) ;    //从标准输入获得员工数
float k = average(surnSa1ary ,employeeNumber);
System.out.println(" 平均工资: " + k);
}
(3)       (Exception   e) {
if (e. getMessage ( ) .equalsIgnoreCase ("zero") ) {
System.out.println(" 请重新输入当月工资总和与员工数: ");
sumSa1ary  = sc.nextFloat( );
employeeNumber = sc.nextInt( );
float k = average(surnSa1ary ,employeeNumber);
System.out.println(" 平均工资: " + k);
}
}
}
 
pub1ic static void main(String[ ]  args)  {
 
try {
caculate ( ) ;
}
(4)     (Exception    e)  {
if    ( e.getMessage( )  .equalsIgnoreCase(“zero”))
System.out.println(" 程序未正确计算平均工资! " );
 }
 }
}
 

【问题 1】
程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:
请输入当月工资总和与员工数:
6000 5
(5)   
【问题 2】
若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:
请输入当月工资总和与员工数:
6000 0
(6)   
0 0
(7)

(共15 分) 
阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。 
【C++代码】
#include
using namespace std;
class Department{
protected:
float   average(float   x ,int  y)  {
if (y = =0) throw    (1);
return  x/y;
}
public:
void  caculate(void)  {
float sumSalary;
int    employeeNumber;
try {
     cout << "请输入当月工资总和与员工数:" << end1;
     cin  >> sumSalary  >> employeeNumber;
     float  k=average(sumSalary,employeeNumber);
     cout  <<  "平均工资: "<<  k  <<  end1;
}
(2)(int e) {
if(e = =0) {
    cout << "请重新输入当月工资总和与员工数 :" << end1;
    cin  >>  sumSalary  >>  employeeNumber;
    float k =average(sumSalary,employeeNumber);
    cout  <<  "平均工资: "<<  k  <<  end1;
  }
 }
}
};
 
void  main ( ) {
try  {
(3);
d.caculate ( );
}
(4)(int  e) {
if  (  e = = 0)
cout <<  "程序未正确计算平均工资! " << end1;
}



 

【问题 1】
程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:
请输入当月工资总和与员工数:
6000 5
(5)
【问题 2】
若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:
请输入当月工资总和与员工数:
6000 0
(6)   
0 0
(7)

(共 15 分)
阅读以下说明和C 程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某旅游服务应用程序运行时,根据输入的两个城市名查找其间的距离。各城市间的距离如表4-1所示。表格中的第一行和第一列表示城市名,表中的每个元素是一个整数,代表该元素所在行和列对应的城市之间的距离(单位:km)。

 

在程序中,城市名用一维全局数组cityTable存储,城市之间的距离矩阵用二维全局数组kmTable表示,并用相应的值对这两个数组进行初始化。
#define NCities 8                                   /* 城市个数  */
#define TRUE 1
static char * cityTable[NCities] = {         /* 城市名按字典序升序排列 */
       "Beijing",
       ......                                                 /* 其他城市名略去  */
       "Sanya",
};
static int kmTable[NCities][NCities] = {
       {0, 1697, 2695, 937, 1784, 1356, 926, 2543},
       {1697, 0,313, 1840,533, 940, 1409, 1505},
        ......                                                 /* 剩余元素的初始值略去  */
};

程序执行时,首先按提示输入两个城市名,然后在cityTable中查找与城市名对应的下标,最后用该下标在kmTable中找到这两个城市之间的距离。
程序中定义的函数FindCityInSortedArray和GetCity说明如下:
(1)函数 FindCityInSortedArray 的功能是用二分查找法在全局数组 cityTable 中查找城市名所对应的下标值。
(2)函数GetCity的功能是读入城市名,调用函数FindCityInSortedArray来获取城市所对应的下标值。如果该城市名不存在,则提示用户重新输入。

【C 程序】 
int main ( )   {
int city1,city2;
city1 = GetCity("输入第 1个城市名: ") ;
city2 = GetCity("输入第 2 个城市名: ");
printf(" %s 和%s之间的距离为:%d  km.\n" ,cityTable[city1] ,
cityTable[city2]  ,
kmTable[city1] [city2]);
return  0;
}
static int  GetCity(char *prompt)   {
char • cityName;
int index;
cityName   =   (char   *)malloc(20*sizeof(char));
while  (   TRUE   )    {
printf(" %s" ,prompt);
gets(cityName) ;                               /*获取输入字符串*/
index = FindCityInSortedArray(cityName);
if (      (1)     )    break;
printf(" 城市名不存在,请重新输入。 \n") ;
}
free(cityName);
return (2);
}
static  int  FindCityInSortedArray(char*key)    {
int lh ,rh ,mid ,cmp;
lh  =  0;
rh  = NCities  - 1;
while   (         (3)       )    {
mid  =  (lh  + rh)   /  2;
cmp  =  strcmp (     (4)     );     /*比较两个城市名是否相同*/
if   (cmp ==  0)  return  (5);             /*两个城市名相同*/
if (cmp  <  0)   {  rh  = mid  - 1;  }
else  {   lh = mid  +  1;  }
}
return  (-1);    /*城市名不存在时返回 -1 */
}

(共15 分)
阅读以下说明和C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】 
基于管理的需要,每本正式出版的图书都有一个 ISBN 号。例如,某图书的 ISBN号为“978-7-5606-2348-1”。
ISBN 号由 13 位数字组成:前三位数字代表该出版物是图书(前缀号),中间的 9个数字分为三组,分别表示组号、出版者号和书名号,最后一个数字是校验码。其中,前缀号由国际EAN提供,已经采用的前缀号为978和979;组号用以区别出版者国家、地区或者语言区,其长度可为1~5位;出版者号为各出版者的代码,其长度与出版者的计划出书量直接相关;书名号代表该出版者该出版物的特定版次;校验码采用模10加权的算法计算得出。
校验码的计算方法如下:
第一步:前 12 位数字中的奇数位数字用 1 相乘,偶数位数字用 3 相乘(位编号从左到右依次为13到2);
第二步:将各乘积相加,求出总和S;
第三步:将总和S 除以10,得出余数R;
第四步:将10减去余数R后即为校验码V。若相减后的数值为10,则校验码为0。 
例如,对于ISBN 号“978-7-5606-2348-1”,其校验码为1,计算过程为:
S=9×1+7×3+8×1+7×3+5×1+6×3+0×1+6×3+2×1+3×3+4×1+8×3=139
R = 139 mod 10 = 9
V = 10 – 9 = 1
函数check(char code[])用来检查保存在code中的一个ISBN号的校验码是否正确,若正确则返回 true,否则返回 false。例如,ISBN 号“978-7-5606-2348-1”在 code 中的存储布局如表3-1所示(书号的各组成部分之间用“-”分隔):


在函数check(char code[])中,先将13位ISBN号放在整型数组元素tarr[0]~tarr[12]中(如表3-2 所示,对应 ISBN 号的位13~位 1),由 tarr[0]~tarr[11]计算出校验码放入变量V,再进行判断。



【C 函数】  
bool check(char code[ ])
{
int  i,k  = 0;
int S = 0 ,temp = 0;
int V ;
int tarr[13]={0};
if   (strlen(code)  <  17)     return false;
for( i=0; i<17 ; i++ )                /*将 13位 ISBN 号存入 tarr */
if (  code [i] !=  '- '  )
tarr[      (1)    ]= code[i]  - ' 0 ';
for (i=0;(2);i++){
if(     i%2 )
S +=  (3) ;
else
S +=  (4) ;
 }
V  =  ( (5)     == 0  )? 0  : 10 - S %10;
if   (   tarr[12]   ==  V)
return true ;
return false;
}

(共 15 分)
阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。

【问题 1】
分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。 
【C 程序】 


【问题 2】
函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组 a,并返回实际输入的整数个数。函数 inputArr 可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。
请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。
【C 函数】  

 

(共15 分)
阅读以下说明和流程图,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】 
下面的流程图旨在统计指定关键词在某一篇文章中出现的次数。
设这篇文章由字符A(0),…,A(n-1)依次组成,指定关键词由字符B(0),…,B(m-1)依次组成,其中n>m≥1。注意,关键词的各次出现不允许有交叉重叠。例如,在“aaaa”中只出现两次“aa”。
该流程图采用的算法是:在字符串A中,从左到右寻找与字符串B相匹配的并且没有交叉重叠的所有子串。流程图中,i 为字符串 A 中当前正在进行比较的动态子串首字符的下标,j为字符串B的下标,k为指定关键词出现的次数。

【流程图】 

()(15分,每空3分)
【说明】
  下面程序的功能是计算并输出某年某月的天数。
 

【C++程序】
  #include < iostream>
  using namespace std;
    ___(1)___ Month ( Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec ) ;
  class Date {
  public:
    Date ( int year , Month m_month ) {
     ___(2)___ = year ;
  if ( m_month < Jan || m_month > Dec ) month = Jan;
  else month = m_month;
  } ;
 ~Date () {} ;
  bool IsLeapYear () {
  return ( ( year % 4 = = 0&&year % 100 != 0 ) || year %400 = = 0);
 };
   int CaculateDays () {
   switch ( ___(3)___ ) {
  case Feb : {
  if ( ___(4)___ ) return 29;
  else return 28;
  }
  case Jan : case Mar : case May : case Jul : case Aug : case : Oct:
  case Dec : return 31;
  case Apr : case Jun : case Sep : case Nov : return 30;
  }
 };
  private :
  int year;
  Month month;
 };
  Void main () {
   Date day ( 2000 ,Feb );
   Cout << day. ___(5)___ ();
 }

()(15分,每空3分)
【说明】
  某个文本文件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字“0”作为结束标志。下面的程序用于计算该文件中这些数据之和,其运行窗口如下: 
 


  用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击“累计”按钮,就能在“总计”文本框中看到该文本文件中的数据之和。
  在开发过程中,设驱动器列表框名为Drive1,目录列表框名为Dir1,文件列表框名为File1,存放数据的文本文件名为D:\test\vb7\data.txt,“累计”按钮名为sum,“总计”文本框(TextBox)名为text1。
 

【Visual Basic代码】
  Private Sub Drive1_Change ()
   Dir1.Path = ___(1)___ ‘用户选择的驱动器反映到目录列表框中
  End Sub
  Private Sub Dir1_Change ()
   File1.Path = ___(2)___ ‘用户选择的文件夹改变文件列表框内容
  End Sub
  Private Sub sum_Click ()
   Dim ___(3)___ As New FileSystemObject , ____(4)____ As TestStream
‘创建自己的文件系统对象,说明自己的文本流对象
   If Right ( Dir1.Path , 1 ) = “ \ ” Then
   Set myTextFile = fso.OpenTextFile ( Dir1.Path + File1.FileName)
  End If
   Set myTextFile= fso.OpenTextFile ( Dir1.Path + “ \ ” +File1.FileName)
   S = 0
   Do
   D = Val ( myTextFile.ReadRow )
   S = S + d
   Loop While ___(5)___
  Text1.Text = Str$ (S)
 End Sub

()(15分,每空3分)
【说明】

  当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在显示面板上显示字符串“Welcome !”;当html页面被其他窗口遮挡后再次显示时,小程序在显示面板上显示“Welcome back !”。
 

【Java代码】
  import javA.awt.*;
  import javA.applet.*;
  public class HelloApplet extends ___(1)___ {
  public void paint ( ___(2)___ ) {
   g.drawstring ( message, 10, 20 );
   message = “welcome back !”;
  }
 public void ____(3)____ () {
   message = “welcome !” ;
 }
 private ___(4)___ message;
}
【html文档】


 
   HTML Test HelloApplet Page
 
 


   Test HelloApplet 小程序

      codebase = “ . ”
    code = “ ___(5)___ ”
    name = “ TestApplet”
    width = ” 400 ”
    height = “ 300 ”
   >
  
 


 

上一页

第 1 页