软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷17

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:12次
  • 作答时间:150分钟
试卷简介
试卷预览
1

下面是一个Applet程序,其功能是在绘图区域中通过鼠标的移动来绘制直线,并且有清除绘图区域按钮,用来清除已经绘制的图像。

 程序运行结果如图5所示。

 

 import java.awt.*;

 import java.applet.*;

 /*

  <applet code=ex6_7. class width=800 height=400>

  </applet>

 */

 public class ex6_7 extends Applet{

  private Button btn;

  private boolean bDraw,bClear;

  private int upX,upY,downX,downY;

  public void int(){

  setLayout(null);

  bClear=false;

  bDraw=false;

  btn=new Button("clear");

  btn.reshape(250, 150,70,30);

  add(btn);

  }

  public void paint (Graphics g){

   if(bClear){

    g.clearRect(0,0,getSize(). width,getSize(). height);

     (1);

   }

   if(bDraw){

     g.drawLine((2));

     bDraw=false;

   }

  }

  public void update (Graphics g){

    (3);

  }

  public boolean mouseDown(Event event, int x,int y){

   downX=x;

   downY=y;

   return true;

  }

  public boolean mouseup(Event event,int X,int y){

   upX = x;

   upY =y;

    (4);

   repaint();

   return true;

  }

 public boolean action(Event event,Object object){

  if((5)){

   bClear=true;

   repaint();

  }

  return true;

  }

 }

 ex6_7. html

 <HTML>

  <HEAD>

   <TITLE>ex6_7</TITLE>

 </HEAD>

 <BODY>

   <appletcode=" ex6_7. class" width=800 height=400 >

  </applet>

  </BODY>

 </HTML>

1

读下列程序说明和C程序,将应填入(n)处。

 【程序说明】

 该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。

 【程序】

 #include<stdio.h>

 void strmerge(char,a,char *b,char *c)  //将字符串a,b合并到字符串c中

 {

  char t,*w;

  w=c;

  while((1))

  {//找到字符串a,b当前字符中较小的字符

   if(*a< *b)

   {

    t= *a;

     (2);

   {

   else if (*a>*b)

   {

    t= *b;

     (3);

   }

   else      //字符串a,b当前字符相等

     {

     t= *a;

     a++;

     b++;

    }

    if((4))  //开始,可直接赋值

      *w=t;

    else if(t!=*w)

    //如果a,b中较小的当前字符与c中当前字符不相等,才赋值(5);

  }

   if(*a!=\'\0')  //如果字符串a还没有结束,则将a的剩余部分赋给C

   while(*a!='\0')

   if(*a!=*w)

   {

     *(++w)=*a;

     a++;

   }

   else

    (6);

   if(*6!='\0')     //如果字符串b还没有结束,则将b的剩余部分赋给c

   while(*b!='\0')

   if(*b! = *w)

   {

     *(++w)=*b;

     b++;

   }

   else

   b++;

    (7);

   }

 void strsort(char*s)  //将字符串S中的字符排序

 {

  int i,j,n;

  char t,*w;

  W=S;

  for(n=0;*w!='\0';n++)  //得到字符串长度n

  w++;

  for(i=0;i<n-1;i++)  //对字符串s进行排序,按字母先后顺序

  for(j=i+1;j<n;j++)

  if((8))

  {

   t=s[i];

   s[i]=s[j];

    (9);

  }

 }

 void main()

 {

   char s1[100],s2[100],s3[100];

   printf("\nPlease,input the first string:");

   scanf("%s",s1);

   printf("\nPlease input the second string:");

   scanf("%s",s2);

   strsort(s1);    //将字符串s1排序

   strsort(s2);    //将字符串s2排序

   printf("%s\n",s1);  

   printf("%s\n",s2);  

   s3[0]='\0';     //字符串s3的第一个字符先置'\0'结束标志

   (10)    //将s1和s2合并,按照字母顺序排列,

              //且要删去相同字符,存入s3中

   printf("%s",s3);

 }

1

阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。

 【程序说明】

 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如.管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。

 下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。

 【程序1】

 //普通雇员类

 class Employee

 {

   public:

   Employee(char*theName,float thePayRate);

   char * getName()const;

   float getPayRate()const;

   float pay(float hoursWorked)const:

   protected:

   char*name;  //雇员名称

   float payRate;  //薪水等级

 };

 Employee::Employee(char * theName,float thePayRate)

 {

   name=theName;

   payRate=thePayRate;

 }

 char*Employee::getName()const

 {

   return name;

 }

 float Employee::getPayRate()const

 }

   return payRate;

 }

 float Employee::pay(float hoursWorked)const

 {

   return hoursWorked * payRate;

 }

 //管理人员类

 Class Manager:public Employee

 {

   public:

   //isSalaried付薪方式:true付薪固定工资,false按小时付薪

   Manager(char * theName,float thePayRate,bool isSalaried);

   bool getSalaried()const;

   float pay(float hoursWorked)const;

   protected:

   bool Salaried;

 };

 Manager::Manager(Char*theName,float thePayRate,bool isSalaried)

 :Employee(theName,thePayRate)

 {

   salaried=isSalaried;

 }

 bool Manager::getSalaried() const

 {

   return Salaried;

 }

 float Manager::pay(float hoursWorked)const

 {

   if(salaried)

   return payRate;

 /*else*/

   return Employee::pay(hoursWorked);

 }

 //主管人员类

 class Supervisor:public Employee

 {

   public:

   Supervisor(Char*theName,float thePayRate,float theBouns):

   Employee(theName,thePayRate,(1)),bouns(theBouns){}

   float getBouns()const{return bouns;}

   float pay(float hoursWorked)const

   return (2) 

 }

 protected:

 float bouns;

 }

 #include" iostream.h"

 void main()

 {

   Employee e("Jack",50.00);

   Manager m("Tom",8000.00, true);

   Supervior s("Tanya",8000.00,8000.00);

   cout<<"Name:" <<e.getName()<<endl;

   cout<<"Pay:"<<e.pay(80)<<endl;  //设每月工作80小时

   tout<<"Nabe:" <<m.getName()<<end,;

   cout<<"Pay:" <<m.pay(40)<<endl;

   cout<<"Nabe:" <<s.getName()<<endl;

   cout<<"Pay:"<<s.pay(40)<<endl; //参数40在这里不起作用

 }

 【程序2】

 #include "employee.h"

 //普通雇员类

 class Employee

 {

 public:

 //构造函数

   Employee(String theName,float thePayRate):

   name(theNabe),payRate(thePayRate){}

 //取雇员姓名

   String getNabe() const{returnname;}

 //取雇员薪水等级

   float getPayRate()const{return payRate;}

 //计算雇员薪水

   virtual float pay(float hoursWorked)const {return (3);}

   protected:

   String name;