江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2012秋江苏计算机二级C++上机试卷第1套

2012秋江苏省高校计算机等级考试

二级  C++上机试卷

一、改错题(20)

  【题目】

  以下程序的功能是:将一个整数转换成相应的字符串,例如,将整数1024转换成字符串1024”,将负整数-512转换成字符串-512”

  正确程序的输入/输出结果如下(下划线部分为键盘输入)

  请输入一个整数:123

   123

请输入一个负整数:-123

  -123

含有错误的源程序如下:

#include <iostream.h>

#include <math.h>

 

#define N 20;

char *itoa(int x, char s[])  //将整数x转换为字符串形式,结果存入数组s

{

  int i=0,j=0;

  char c,tmp;

  if(x<0){

     s[0]=’-‘;

       i=j=1;

      x=x*(-1);

  }

  if(x==0){

    s[0]=”0”;

      s[1]='\0';

  }

  else{

    while(x)

     {

      c=x%10;

        x/=10;

       s[i++]=c;

     }

     s[i+1]='\0';

     for(int k=j;k<(j+i)/2;k++) //交换数组s中数字的先后顺序

            tmp=s[k],s[k]=s[i+j-k-1],s[i+j-k-1]=tmp;

  }

  return s;

 

}

 

void main()

{

  int x;

  char s[N];

  cout<<"请输入一个整数";

  cin>>x;

  cout<<itoa(x,s)<<endl;

}

  【要求】

    1.打开T盘中myfa.txt文件,将其文本拷贝到文件myfa.cpp(或将上述程序录入到文

  myfa.cpp),根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。程

  序中的注解可以不输入。 

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

      处理命令,但不能增加其他语句,也不能删除整条语句。

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

 

二、编程题(20)

【题目】

 试定义一个类Array,实现由一个数组派生出另一个数组,派生规则如下:新数组的元素取值为原数组中相同位置元素的左、右两个相邻元素前后拼接后形成的整数(左邻元素在前,右临元素在后)。规定最左()列元素的左()临元素为该元素所在行的最右()侧的元素,具体要求如下:

 (1)私有数据成员

     int  a[3][4]:原数组

     int  b[3][4]:派生数组

(2)公有成员函数

  Array(int t[][4],int n):构造函数,利用参数t的前n行元素初始化数据成员a

  int nn(int t1,int t2):返回t1t2拼接后形成的整数(t1在前,t2在后)

  void fun() :按题意生成新数组,并将结果存放到数据成员b

  void print():按矩阵形式输出成员数组

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

  输出示例:

  原数组:

  41  67  34   0

  69  24  78   58

  62  64  5    45

派生数组

  67   4134   670  3441

5824   6978   2458  7869

4564   625    6445  562

 

【要求】

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

 

一、改错题

  #define N 20;             修改为#define N 20\

  s[0]=”0”;                修改为    s[0]=’0’;

  c=x%10;                修改为     c=x%10+’0’;

  s[i+1]='\0';              修改为           s[i]='\0';

 

二、编程题

#include <iostream.h>

#include <stdlib.h>

class Array{

   int a[3][4],b[3][4];

public:

     Array(int t[][4],int n)

     {

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

                   for(int j=0;j<4;j++)

                          a[i][j]=t[i][j];

     }

     int nn(int t1,int t2)

     {

       if(t2==0)

               return t1*10;

        int n=1,t=t2;

        while(t){

         n=n*10;

             t=t/10;

        }

        return t1*n+t2;

     }

 

     void fun()

     {for(int i=0;i<3;i++)

     for (int j=0;j<4;j++){

       int u=j-1,d=j+1;

        u=u<0?3:u;

        d=d>3?0:d;

        b[i][j]=nn(a[i][u],a[i][d]);

     }

     }

     void print()

     {

            cout<<"原有数组"<<endl;

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

           for (int j=0;j<4;j++)

                     cout<<a[i][j]<<'\t';

              cout<<endl;

              cout<<"派生数组"<<endl;

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

           for (int j=0;j<4;j++)

                     cout<<b[i][j]<<'\t';

 

     }

 

};

 

void main()

{

  int t[3][4];

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

       for (int j=0;j<4;j++)

          t[i][j]=rand()%100;

  Array test(t,4);

  test.fun();

  test.print();

}