江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2011年春江苏计算机二级VC++上机真题1

   2011年春江苏计算机 二级Visual C++上机试卷

    (本试卷完成时间为70分钟)

  一、改错题(20)

  【题目】

  以下程序的功能是:判断一个已排序的整型数组中是否存在元素值与其下标值相等(下标从0开始)的元素。如果存在,则输出其中一个该类元素的值(可能存在多个满足条件的元素)

    正确程序的输出如下:

    3个元素值与其下标值相等

    含有错误的源程序如下:

  #include <iostream.h>   

  int index_search(int x[n],int n)

  {

    int first=0;

    int last=n-1;

    int middle,index;

    index=-1;

    while(first<=last){

         middle=(first+last)/2;

         if(x[middle]=middle){

           index=middle;  

           break;

         }

         else if(x[middle]>middle)

            last=middle-1;

         else

            first=middle+1;

     }

      return index;

  }

  void main()

  {

    int a[]={-1,0,1,3,8};

    int result=index_search(a,sizeof(a));

    if(result==-1)

      cout<<""<<result<<"个元素值与其下标值相等"<<endl;

    else

      cout<<"不存在下标值等于元素值的元素"<<endl;

  }

    【要求】

    1.把上述程序录入到文件myfa.cpp,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。程序中的注解可以不输入。

    2.改错时,可以修改语句中的-部分内容,增加少量的变量说明、函数原型说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句。

    3.改正后的源程序文件myra.cpp必须放在T盘根目录下,供阅卷用。

 二、编程题(20)

    【题目】

    试定义一个时间类time,具体要求如下:

    (1)私有数据成员。

    int h,m,s:分别表示时、分和秒。

    char *str_t:存放时间的字符串,格式为"hh:mm:ss","::"

    (2)公有成员函数。

    time(int hh=0,int mm=0,int ss=0):构造函数,利用参数hhmmss分别初始化成员hms,并为字符串str_t分配9个字节的动态存储空间。要检查参数hhmmss的合法性,0hh<24,0mm<60,0ss<60,如果不合法,则采用相应的缺省参数值。

    ~time():析构函数,撤销str_t所占用的动态存储空间。

    void convert():利用全局函数itoa()将成员hms转换为字符串"hh:mm:ss"的形式,并存储在str_t中。

    void set_t(int hh,int mm,int ss):利用参数hhmmss分别设置成员hms的值,同时调用成员函数convert()设置成员str_t。注意检查参数的合法性。

    void print():输出字符串str_t,按输出示例中的格式输出时间。

    (3)char *itoa(int n):全局函数,将整数n转换为字符串形式并返回。只考虑n至多为两位数的情形:n为一位数时,n=2,n转换为"02"的形式;n为两位数时,n=59,n转换为"59"的形式。

    (4)在主函数中对该类进行测试。

    输出示例:

    00:00:00

    12:05:30

    【要求】

    源程序文件名必须为myfb.cpp,并放在T盘根目录下,供阅卷用。

    参考答案

  一、改错题

    int index_search(int x[n],int n)    改为int x[]int *x

    if(x[middle]=middle){               改为x[middle]==middle

    int result=index_search(a,sizeof(a));    改为sizeof(a)/sizeof(int)5

    if(result==-1)            改为result!=-1result>=0result

 

二、编程题

    #inelude <iostream.h>

    #include <string.h>

    class time{

       int h,m,s;

       char *str_t;

    public:    -

       time(int hh=0,int mm=0,int ss=0)

        :h(hh>=0 && hh<24? hh:0),m(mm>=0 && mm<60? mm:0),s(ss>=0 &&ss<60?

          ss:0),str_t(new char[9])

       {    *str_t='\0';    }

       ~time()

      {delete []str_t;    }

      void set_t(int,int,int);

      void convert();

      void print() const

      {cout<<str_t<<endl;}

    };

    char *itoa(int n){

      char *tmp=new char[3];

      if(n<10){

       *tmp='0';

       *(tmp+1)=n+'0';

      }   

      else{

       *tmp=n/10+'0';

       *(tmp+1)=n%10+'0';

      }

      *(tmp+2)='\0';

      return tmp;

    }

    void time::set_t(int hh,int mm,int ss)

    {

     h=(hh>=0 && hh<24? hh:0),m=(mm>=0 && mm<60? mm:0),s=(ss>=0 && ss<

    60? ss:0);

     *str_t='\0':

     convert();

    }

    void time::convert()

    {

      char *tmp;

      tmp=itoa(h);

      strcat(str t,tmp);

      strcat(str_t,":");

      tmp=itoa(m);

      strcat(str_t,tmp);

      strcat(str_t,":");

      tmp=itoa(s);

      strcat(str_t,tmp);

      delete []tmp;

   }

   void main()

   {

    time t1;

    t1.convert();

    t1.print();

    t1.set_t(11,5,30);

    t1.print();

   }