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

                二级    Visual C++上机试卷

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

 一、改错题(20)

    【题目】

    以下程序中,函数fun(int m, int fac[], int &p)的功能是:计算参数m(m>2)的所有因子,将这些因子按从小到大的顺序依次存放在数组fac,将因子个数存放在参数p,并返回所有因子之和。

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

    输入一个整数:24

    24的所有因子之和为:60

    24的各因子为:1 2 3 4 6 8 12 24

    含有错误的源程序如下:

  1    #include<iostream.h>

  2    #include<math.h>

  3    int fun(int,int[],int);

  4    void main(void) 

  5    {

  6      int n,f[100],p;

  7      cout<<"输入一个整数:";

  8      cin>>n;

  9      cout<<n<<"的所有因子之和为:"<<fun(n,f,p)<<endl;

  10     cout<<n<<"的各因子为:";

  11     for(int i=0;i<p;i++)

  12       cout<<f[i]<<' ';

  13     cout<<endl;

  14    }

  15    int fun(int m,int fac[],int &p)

  16    {

  17     int i,s;

  18     fac[0]=p=1;

  19     for(s=1,i=2;i<=sqrt(m);i++){

  20       if(m%i=0){

  21         fac[p++]=i;

  22         s+=i;

  23       }

  24     }

  25     fac[p]=m;  

  26     s+=m;  

  27     return fac;  

  28     }

   

    【要求】

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

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

  序中的注解可以不输入。 

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

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

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

 二、编程题(20)

   【题目】 

  试定义一个类STR,实现两个字符串的交集。具体要求如下:

  (1)私有数据成员。

  char s1[50],s2[50],s0[50]:字符串s0用于存放字符串s1和字符串s2的交集。

  (2)公有成员函数。

  STR(char *p1,char *p2):构造函数,分别用参数p1p2初始化成员数组s1s2

  int isin(char *p,char c):判断字符c是否出现在字符串p,如果是,则返回值为1,

否则返回值为0

  void   fun():求成员数组s1s2的交集,并将结果存放在成员数组s0中。提示:利用

函数isin(char *,char)依次判断一个字符串中的每个字符是否包含于另一个字符串中,如果

包含,且该字符不包含于成员数组s0,则将该字符加入到成员数组s0中。

  void print():按输出示例的格式输出所有数据成员。

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

    输出示例:

    字符串1:abcdef123abc12

    字符串2:acef123ace124

    两个字符串的交集:acef123

    【要求】  

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

    参考答案

    一、改错题

    3  int fun(int,int[],int);    改为int &

    19  for(s=1,i=2;i<=sqrt(m);i++){  改为i<=m/2i<m

    20  if(m%i=0){    改为m%i==0

    27  return fac;    改为return s

    二、编程题

    #include<iostream.h>

    #include<string.h>

    class STR{

          char s1[50],s2[50],s0[50];

    public:  

          STR(char *p1.char *p2)

          {

            strcpy(s1,p1);

            strcpy(s2,p2);

            s0[0]='\0';

}

          int isin(char *p,char c)

          {char *p0=p;

           while(*p0)

             if(*p0++==c)  return 1;

           return 0;

          }

         void fun()

         {

           for(char *p1=s1,*p0=s0;*p1;p1++)

           {

             if(isin(s2,*p1)&&(!isin(s0,*p1)))

            {

              *p0++=*p1;

            }

            *p0='\0';

         }

        }

      void print()

      {  cout<<"字符串1:"<<sl<<endl;  

         cout<<"字符串2:"<<s2<<endl;

         cout<<"两个字符串的交集:"<<s0<<endl;

      }

   };

   void main()

   {  char str1[]="abcdef123abc12",str2[]="acef123ace124";

      STR test(str1,str2);

      test.fun();test.print();

   }