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

    2008()上机试卷【01)

    (本试卷上机时间为70分钟)

一、改错题(20)

【题目】

    以下程序的功能是:将一个字符串中介于两个不同子串之间的字符逆序处理。如果一

个子串在字符串中出现多次,则以第一次出现的位置为准;如果某一个子串不在字符串中出

,则将另一个子串之后的所有字符逆序处理。

    例如,将字符串"mmabcl23456000dd"中介于字符串"000"与字符串"abe"之间的

字符逆序后变为"mmabe654321000dd"

    又如,将字符串"mmabcl23456000dd"中介于字符串"012"(在原字符串中不存在)

字符串"abc"之间的字符逆序后变为"mmabcdd000654321"

  含错误的源程序如下:

    #include <iostream.h>

    #include <string.h>

 

    int at(char *s1,char *s2)    //s2s1中第一次出现的位置(序号从0开始)

    {  for(int i=0;s1[i];i++){

          for(int j=0;s2[j];j++){

              if(s1[i+j])break;

              if(s1[i+j]!=s2[j])break;

           }

          if(!s2[j])

             return j;

       }

       return strlen(s1);

    }

 

    void invert(char str[],int n1,int n2)

    {   char *p1=str+n1, *p2=str+n2-1;

        while( *p1<*p2){

           char t=*p1;

           *p1=*p2;

           *p2=t;

           p1++;

           p2--;

       }   

    }

   

    char *process(char:l:S,char *s1,char:lc s2)

      //s中介于s1s2之间的子串逆序

    {  int n1=at(s,s1),n2=at(s,s2);

       int max,min;

       if(nl>n2)  

        max=n1,min=n2+strlen(s2)

       else   

        max=n2,min=n1+strlen(s1);

       invert(s,min,max); 

       return *s;   

    }

    void main()   

    {  char p[]="mmabc123456000dd",*p1="000",*p2="abe";

       cout<<p<<endl;

       cout<<p1<<endl;   

       cout<<p2<<endl;

       cout<<process(p,p1,p2)<<endl;  }

    }   

【要求】  

    1.把上述程序录入到文件myfa.cpp,根据题目要求及程序中语句之间的逻辑关系

对程序中的错误进行修改。程序中的注解可以不输入。

    2.改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或

编译预处理命令,但不能增加其他语句,也不能删去整条语句。

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

二、编程题(20)

【题目】  

  试定义一个类LARRAY,将一维数组a中的数据线性变换成指定的数值范围内的数据,

并存放到一维数组b中。假设一维数组a中元素的最大值为max,最小值为min。当指定b中数

据的取值范围为[new_min,new_max],将数组a中的元素a[j]线性变换为数组b中的元

b[j]的变换公式为:   

    b[j]=new min+(a[j]-min)×

  具体要求如下:

  (1)私有数据成员。

  double a[10],b[10]:a存放原始数据,b存放线性变换后的数据。

  double new_max,new_min:分别为线性变换结果的上、下限。

  (2)公有成员函数。

  LARRAY(double a1[],double x,double y):构造函数,a1初始化数组a;数组b

的元素都初始化为0;xy分别初始化new_minnew_max

  double getMax():返回数组a中值最大的元素值。

  double getMin():返回数组a中值最小的元素值。

  void fun():按给定的变换公式求出数组b的每一个元素值,要求利用函数getMax()

getMin()  

  void print():输出数组b的所有元素。

 (3)在主函数中完成对该类的测试。

    输入/输出示例(下划线部分为键盘输入):

    请输入10个数:0  1  2  3  4  5  6  7  8  9

    请输入变换后数据的下限和上限:0  1

    变换后的数据为:0 0.111111 0.222222 0.333333 0.444444 0.555556

    0.666667 0.777778 0.888889  1

【要求】

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