江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2007年春季vc++考试试题

第二部分       Visual C++程序设计
21.设有变量说明:”short int a=0,b=0;”则表达式sizeof(‘a’+’b’)的值是(       )
A. 1      B. 2         C.4         D.8
22.下列关于while和do … while循环语句的叙述中正确的是(   )
A. do …while 的循环体至少执行一次
B. while的循环体至少执行一次
C.do… while的循环体不能是复合语句
D.do … while 允许从循环体外跳转到循环体内
23.设有函数原型说明,
   void test(int a, int b=7, char *c=”#”)
下面的函数调用中存在语法错误的是(     )
A.test(3)     B. test(3,8.2)       C. test(6,”*”)       D. test(0,0,”*”)
24.执行以下程序时,输入一行字符串为:
             Thank you very much!
程序的输出结果为(         )
            #include
            void main(void)
            {
                char line[100];
                cin>>line;cout<            }
A.T                     B.Thank
C. Thank  you very much!  D.Thank you
25.下列关于运算符重载的叙述中正确的是(         )
A. 运算符重载可以改变操作数的个数
B.运算符重载可以改变运算符的优先级
C.运算符重载可以改变运算符的结合性
D.运算符的重载不能改变操作数的个数,也不能改变运算符的优先级和结合性
26.定义以下的类:
   class X{
       int a;
       public: X(int x=0){ a=x;}
} ;
   class Y : public X{
int b;
public:Y(int x=0,int y=0):X(y){b=x;}
};
在下列选项的说明语句中,存在语法错误的是(     )
A. X *pa=new Y(1,2)           B. X a1= Y(1,3);
C. X b2(2,3); Y &a2=b2;        C. Y b3(10); X a3(b3);
27.设有以下语句:
        int a=5; int arr[a];
        const int b=5; int x[b];
        int c=5; int *p=new int[c];
        const int d=5; int *p1= new int[d];
其中存在语法错误的是(          )
(A).第一行           (B)第二行         (C)第三行         (D) 第四行


28.设有说明语句:
float a[3][3]={1,2,3,4,5}, *b[3]={0}, (*c)[3]=a, **d=0;
以下选项中语法正确的语句是(       )
A. a[0]=b[0];   B.b[0]=c[0];         C. c[0]=d[0];           D.d[0]=a[0][0];
29.下列关于虚函数的描述中正确的是(       )
(A).虚函数可以是一个static类型的成员函数
(B).虚函数可以是一个非成员函数
(C).虚函数实现静态多态性
(D).基类中采用virtual说明一个虚函数后,派生类中定义相同原型的虚函数时,可不必加virtual说明
30.设变量a、b是整型变量,下列switch语句中正确的是(       )
A.switch(a)                                B. switch(a+b)                          
{                                          {
      case  a: a++; break                         case 1: b=a++;break;
      case  b: b++;break                         case 1: a=++b;
  }                                        }
C. switch(a*a)                              D. switch(a/10+b)
 {                                          {
   case 10,12 :++a;                              case 3: b=a/10;break;
   case 14,16: ++b;                              default: a+=b;
}                                           }


二:填空题:
1.对于switch(e),表达式e只能是整型、(       )或枚举型表达式
2.面向对象程序设计的三大特性是封状性,继承性和(          )
3.执行以下语句后,a的值为 (         )
     int  a=0, m=3, n=10;
     a=(m++,m+n);
4.在c++中,标识符是以字母或(          )开头的,由字母、数字和(          )组成的字符序列
5.在C++中,类的每一个非静态成员函数都有一个(        )指针,该指针指向正在调用成员函数的对象
阅读程序题
6.[程序](2分)
   # include
  
   int fun(int x,int y)
   {
     x=x+y; y=x+y;
     cout<<”x=”<     return x+y;
   }

   void main(void)
   {
      int x=5, y=8, z=fun(x,y);
      cout<<”x=”<      cout<<”z=”<   }
   程序输出的第二行是(        ),第三行是(         )
7.[程序] (3分)
   # include
  
   int f(int m, int &n)
   {
      static int a=1; int c=2;
      m+=++a;  n+=++c;
      return m+n;
   }

  void main(void)
  {
   int a=1, b=2;
   cout<   cout<  }
程序输出的第一行是(      ),第二行是(         ),第三行是(                 )
8.[程序]
  # include

  void findmax(int *a, int n, int i, int *pk)
  {
     if(i     {
        if(a[i]>a[*pk])  *pk=i;
        findmax(a,n,i+1,pk);
     }
  }

void main(void)
{
   int a[10]={34,32,23,12,67,54,44,60,33,24},  index =0;
   findmax(a,10,0,&index);
   cout<   cout<<”Its’ index is:”<}
程序输出的第一行是(         ),第二行是(          )
9.[程序]
  #include
  int a=100;
  int fun(int *a, int &b,int c)
  { 
   static int e;
   *a+=e++;  b++;
   c+=::a++;  e=*a+b+c;
   return e;
  }

void main(void)
{
  int a=10, b=1; c=1;
  cout<  cout<<::a+a+b+c<<’\n’;
}

程序输出的第一行是(          ),第二行是(               )  第三行是(        )
10.[程序]
  #include
  #include

class Base{
     char str[20];
     public:
     Base(char *s=”Base default”)
     {
         strcpy(str,s); 
         cout<     }
};

class Inh1:public virtual Base{
   char str1[20];
   public:
   Inh1(char *s1, char *s2): Base(s1)
   {
     strcpy(str1,s2);
     cout<   }    
};

class Inh2: public virtual Base{
   char str2[20];
   public:
       Inh2(char *s1, char *s2): Base(s1)
       {
            strcpy(str2,s2);
            cout<       }
};

class Inh3: public Inh1, public Inh2
 {
char str3[20];
public:
   Inh3(char *s1, char *s2, char *s3, char *s4): Inh1(s1,s2),Inh2(s1,s3)
   {
        strcpy(str3,s4);
        cout<   }
 };

void main(void)
{
   Inh3 a(“class Base,”class Inh1”,”class Inh2”,”class Inh3”);
}
程序输出的第二行是(         ),第三行是(          ),第四行是(                    )
完善程序题
11.下面程序的功能是:将二维数组a中的每个元素向右移一列,最后一列移到最左边,并按矩阵形式输出数组a.例如:
         数组移动前为:
         1       2         3
         4       5         6
         7       8         9
        移动后为:
        3      1        2
        6      4        5
        9      7        8
[程序]
       #include
       #define ROW 3
       #define COL 3
       void fun(         )
       {
         int i,j, t;
         for(i=0; i         {
            t=*(*(p+i)+ROW-1);
            for(j=COL-1;j>0;j--)
                 *(*(p+i)+j)=(     )
(         )=t;
    }
       }

      void main(void)
      {
         int a[ROW][COL]={1,2,3,4,5,6,7,8,9}; int i,j;
         fun(a);
         for(                   )
         {
            for(j=0;j            cout<<’\n’;
         }
      }
 12.以下程序的功能是:从一个字符串str中删除或添加一个指定的字符,若指定的字符c出现在字符串str中,则从str中删除第1个值为c的字符,否则把字符c添加到str的尾部,在程序中,函数dele()从字符串中删除第一个字符,函数add()添加一个字符到字符串尾部,函数search()用于查找指定的字符是否在字符串中,若在,则返回所在位置,否则返回0.

#include

char *search(char *s, char ch)
{
   while(*s)
     if(*s++==ch)   ruturn (       )
   return 0;
}

void dele(char *s , char ch)
{
   char *p1=search(s,ch), *p2=p1+1;
   while(*p2)  *p1++=*p2++;
   *p1=’\0’;
}

void add(char *s, char ch)
{
   while(*s)  s++;
   (        )=ch;  *s=’\0’;
}

void main(void)
{
  char str[80]=”abc12123”, c;
  cout<  cin>>c;
  void(         );  if(search(str,c)) fp=dele;
  else  fp=add;
  fp(        );
  cout<}
13.下面程序中,主函数建立一条单向链表,链表上的一个结点为一个学生的记录(由学号和成绩组成),在主函数中产生若干名学生的记录,并放在链表中,函数fun()的功能是:先求出链表上所有学生的平均成绩,并通过形参aver带回,然后将高于或等于平均成绩的学生记录放在h所指向的新链表中,最后返回新链表的头接点指针h
      # include
      #include
      struct student
      {
         char no[10]; float grade;
         student *next;
      }

     student *fun(student *head, float &aver)
     {
        student *h, *p, *p1;
        float sum=0; int n=0;
        aver=0; h=null; p=head;
        while(p!=null)
        {
            (            );
            n++;
            p=p->next;
        }
        aver=sum/n; p=head;
        while(p!=null)
        {
           if(p->grade>=aver)
          {
             p1=new student;(           );
             p1->grade=p->grade; p1->next=h; h=p1;
          }
          (              );
        }
        return h;
     }

     void main(void)
     {
          student *head, *p, *h;
          char no[10]; float aver;
          head=null;
          cout<<”输入学号”; cin>>no;
          while(*no !=’#’)
          {
             p=new student; strcpy(p->no,no);
             cout<<”输入成绩”;cin>>p->grade;
             (             ); head=p;
             cout<<”输入学号(首字符#表示结束输入):”; cin>>no;
          }
          p=head;
          while(p!=null){
               cout<no<<’\t’<grade<<’\t’<<’\n’;
               p=p->next;
          }
          h=fun(head,aver); cout<          p=h;
        while(p!=null)
           {
             cout<no<<’\t’<grade<<’\t’<<’\n’;
             p=p->next;
          }
        p=head;
        while(p!=null)
          {
            head=head->next;  delete p;    p=head;
         }
        p=h;
        while(p!=null)
        {
           h=h->next; delete p; p=h;
        }
     }