软件水平考试(初级)程序员下午(应用技术)模拟试卷36

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

阅读以下说明、Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

  【说明】

  IC卡和200卡都是从电话卡派生的。下面的程序将电话卡定义为抽象类。其中 balance为双精度变量,代表电话卡中的余额;cardNumber是长整型变量,代表电话卡的卡号;password是整型变量,代表电话卡的密码;connectNumber是字符串变量,代表电话卡的接入号码;connected是布尔变量,代表电话是否接通。

 performDial()实现各种电话接通后的扣除费用的操作。其中200卡每次通话扣除0.5元的通话费用和附加费用;IC卡每次通话扣除0.9元的通话费。TimeLeft()方法用于测试电话卡余额还可以拨打电话的次数。performConnection()用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。

 【程序】

 abstract class PhoneCard

 {

   doubte balace;

    (1) perfermDial();

   double getBalance()

   { return balance; }

   double TimeLeft()

   {

     double current=balance;

     int times=0;

     do

     {

        (2) 

       times++;

     }white(balance>=0);

 balance=current;

 return times-1;

   }

 }

 abstract class Number_PhoneCard extends PhoneCard

 {

   long cardNumber:

   int password;

   String connectNumber;

   Boolean connected;

   Boolean performConnection(long cn, int pw)

 {

   if(cn==cardNumber && (3) )

   {

     connected=true;

     return true;

   }

   else return false;

}  

}

 class IC Card (4) 

 {

   boolean performDial()

   {

     if(balance>0.9)

     {

       balance-=0.9;

       return true;

     }

     else return false;

 }

 }

 class D200_Card (4) 

 {

   static double additoryFee;

   static{ additoryFee=0.1; }

   boolean performDial()

   {

     if(balance>(0,5+additeryFee))

     {

        (5) 

       return true;

     }

     else return false;

   }

 }

1

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

 【说明】

 魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。

 奇数阶魔方阵的生成方法如下:

 (1)第一个位置在第一行正中。

 (2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。

 (3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:

             8  1  6

             3  5  7

             4  9  2

 了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。

 【程序】

  #include <stdio.h>

 #define MAX 15

 void main()

 {

   int n;

   int m=1;

   int i,j;

   int a[MAX][MAX];

   printf("Please input the rank of matrix:");

   scanf("%d",&n);

   i=0;

    (1) 

   while((2))

      a[i][j]=m;

      m++;

      i--;

      j++;

      if((m-1)%n==0 && m>1)

      {

          (3) 

         j=j-1;

      }

      if(j>(n-1))   //超出上界

         (4) 

      if(j>(n-1))

          (5) 

   }

   for(i=0;i<n;i++)       //输出魔方阵

    for(j=0;j<n;j++)

   {

     if(a[i][j]/10==0)

       printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐

     else

       printf("%d ",a[i][j]);

     if(j==(n-1))

       printf("\n");

   }

 }

1

阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。

 【说明】

 本程序用于评选优秀教师和学生。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。其类结构如下图所示:

  

 【程序】

 #include <iostream.h>

 #include <stdio. h>

 class base

 {

 protected:

   char name[8];

 public:

  void getname(){cout<<"name:"; cin>>name;}

  void printname(){cout<<"name:"<<name<<endl;}

   (1) 

 };

 class student: (2) 

 {

   int num;

 public: 

   void getnum()

   {cout<<"score:"; cin>>num;}

   bool isgood()

   {return (3) }

 };

 class teacher: (2) 

 {

   int num;

 public:

   void getnum()

   {cout<<"paper:"; cin>>num;}

   bool isgood()

   {return (num>3)?true:false;}

 void main()

 {

   base *p[50];

   student *pstud;

   teacher *ptech;

   char ch;

   int count=0;

   do{

      cout<<"input teacher(t) or student(s):";

      cin>>ch;

      if(ch=='s')

      {

         pstud=new student;

         pstud->getname();

         pstud->getnum();

         p[count++]=pstud;

      }

      else if(ch=='t')

      {

         (4) 

         ptech->getname();

         ptech->getnum();

         p[count++]=ptech;

      }

     else

       cout<<"input is wrong"<<endl;

     cout<<"continue to iput(y/n)?";

     cin>>ch;

   }while(ch=='y');

   for(int i=0;i<count;i++)

     if((5))

       p[i]->printname();

 }

1

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

 【说明】

 以字符流形式读入一个文件,从文件中检索出6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或'\t'、'\n'结束的字符串。其中6种关键字在程序中已经给出。

 【程序】

 #include <stdio.h>

 #include <stdlib.h>

 FILE *cp;

    char fname[20], buf[100];

 int NUM;

 struct key

 {  char word[10];

    int count;

 }keyword[]={ "if", 0, "char", 0, "int", 0,

     "else", 0, "while", 0, "return", 0};

 char *getword (FILE *fp)

 {  int i=0;

    char c;

    while((c=getc(fp))!= EOF &&(1));

    if(c==EOF)

      return (NULL);

    else

      buf[i++]=c;

    while((c=fgetc(fp))!=EOF && c!="&& c!='\t' && c!='\n' )

        buf[i++]=c;

     buf[i]='\0';

     return(buf);

 }

 void lookup(char *p)

 {  int i;

    char *q, *s;

    for(i=0; i<NUM; i++)

    { q=(2);

      s=p;

      while(*s && (*s==*q))

      { (3))

      if((4))

      {  keyword[i].count++;

        break;

      }

   }

   return;

 }

 void main()

 {  int i;

    char *word;

    printf("lnput file name:");

    scanf("%s", fname);

    if((cp=fopen(fname, "r"))==NULL)

    {  printf("File open error: %s\n", fname);

      exit(0);

    }

    NUM=sizeof(keyword)/sizeof(struct key);

    while((5))

      lookup(word);

 fclose(cp);

 for(i=0;i<NUM;i++)

   printf("keyword:%-20s count=%d\n",keyword[i].word,keyword[i].count);

 }