XXXX大学课程考试试卷(学生考试用)
                                         
课程名称:      VC++程序设计    学分:  4  教学大纲编号:  06000702   
试卷编号: 0600070210 A  考试方式:  闭卷  满分分值: 100 考试时间:  120  分钟
组卷日期: 2010 1 15   组卷教师(签字) XXXXXX 审定人(签字)       
C. 枚举常量MINUS的值为6        D.枚举常量PRINT的值为10
9. int a[5],*p;  错误的语句是:  9 
A.p=p+1;      B.a=a+1;        C.p=a;      D.p=a+2;
10.有如下的定义语句:typedef char * PCHAR;下列语句正确的是  10   
A.PCHAR *p="abcd";  B.PCHAR *p='a';  C.PCHAR p='a';    D.PCHAR p="Hello";
11. char c='b';则表达式'A'<=c<='Z'&&++c的值及变量c的值分别为  11 
A.1  'b'        B.0  'b'      C.1  'c'      D.0  'c' 
12.下列程序的输出结果为  12   
char a[20]="welcome",b[5]="well";
strcpy(a,b);  cout<<a<<endl;
A.Wellome        B.well        C.wel      D.welcomewell
13. 下列程序的输出结果为  13   
#include<iostream.h>
int f(int a, double b)
{  return a+b;}
double f(double b,int a)
{  return a*b;}
void main()
{  int x=2;
  double y=3.0;
  cout<<f(x,y)<<endl;
}
A.5        B.6      C.程序不能运行        D.以上答案都不对
14.已知函数f的原型是void f(int *a , int &i),变量v1,v2的定义为int v1,v2[10];
则下面调用正确的语句是  14 
A.f(v2[10],&v1);  B.f(v2,&v1);    C.f(v2[10],v1);  D.f(v2,v1);
15.若有如下的说明和语句:int a[7][8],*p=a[0];
现要使指针p指向a[4][6],以下正确的答案是  15   
A.p+=3*8+6    B.p+=4*8+6    C.p+=(3*8+6)*sizeof(int)  D.p+=(4*8+6)*sizeof(int)
16.设有结构类型定义及变量声明如下:
struct product{
    int code;
    float price;
}y[3]={{200,100},{201, 200},{202, 300}},*p=y;
以下结果不是输出201的是  16   
A.cout<<++p->code;  B.cout<<(*++p).code;  C.cout<<(++p)->code;  D.cout<<p->code++;
17.假定MyClass为一个类,则执行MyClass a,b(2),c[2],*p; 语句时自动调用该类构造函数 17  次。
A.2          B.3          C.4          D.5
18.在一个派生类的成员函数中,试图调用基类的成员函数void f(); 但无法通过编译,这说明  18 
A.f()是基类的私有成员            B.f()是基类的保护成员
C.派生类的继承方式为私有    D.派生类的继承方式为保护
一、 选择题(每题1分,共20)
1.下面可以用作C++标识符的是  1 
A.2010var        B.private        C.test-2010        D._123
2.有如下程序段:
int i=1;
while(1){
  i++;
  if(i==10)  break;
  if(i%2==0)  cout<<'*';
}
执行这个程序段输出字符*的个数是  2 
A.10        B.3        C.4          D.5
3.下列关于C++函数的叙述中,正确的是  3 
A.每个函数至少要具有一个参数        B.每个函数都必须返回一个值
C.函数在被调用之前必须先声明        D.函数不能自己调用自己
4.有函数定义如下:
int fib(int n)
{  if(n==0)        return 1;
  else if(n==1)    return 2;
  else    return  fib(n-1)+fib(n-2);
}
若有语句:int n=fib(2);  则函数fib被调用的次数一共是  4 
A.1        B.2    C.3    D.4
5.以下对二维数组的说明中,存在语法错误的是  5 
A.int a[][3]={3,2,1,1,2,3};    B.int a[][3]={{3,2,1},{1,2,3}};
C.int a[2][3]={1};          D.int a[2][ ]={{3,2,l},{1,2,3}};
6.若有以下宏定义:
    #define N 2
    #define Y(n)  ((N+1)*n)
则执行语句z=2*(N十Y(5)); 后的结果是  6 
A.语句有错误        B.z=34        C.z=70        D.z无定值
7.若有变量定义:int a=3,b=5,c;  则执行语句:c=a>b?++a: ++b; 变量c的值为  7 
A.3      B.4              C.5          D.6
8.已知枚举类型定义语句为:
enum Token { NAME, NUMBER, PLUS = 5, MINUS, PRINT = 10 };
则下列叙述中错误的是  8 
A. 枚举常量NAME的值为1        B. 枚举常量NUMBER的值为1
    1        4 
课程名称:    VC++程序设计      学分:  4  试卷编号:  0600070210 A   
2.下面程序的输出结果是  2 
#include<iostream.h>
int fun(int x)
{    int s=0;
    for(int i=2;i<=x;i++)
        if(x%i==0)  {    x/=i;  s+=i;    }
    return s;
}
void main(void)
{    for(int i=10;i<20;i++)
        if(i==fun(i))  cout<<i<<'\t';
}
3. 下面程序的输出结果是  3 
#include<iostream.h>
int f(int i)
{    static int k=1;
    for(;i>0;i--)
        k+=i;
    return k;
}
void main()
{    int i;
    for(i=0;i<3;i++)
        cout<<f(i);
}
4. 以下程序的执行结果是  4 
#include<iostream.h>
void fun( int &x, int y )
{    x=x+y;
    y=x-y ;
}
void main( )
{    int a=10,b=20 ;
    fun(a,b);
    cout<<a<<'\t'<<b<<'\n' ;
}
5. 下面程序的输出结果为  5 
结构体数组不能作为参数传递给函数
#include<iostream.h>
#include<string.h>
void main()
{    char *a[5]={"student","worker","cadre","soldier","peasant"};
    char *p1,*p2;
    p1=p2=a[0];
    for(int i=0; i<5; i++)
    {    if(strcmp(a[i],p1)>0)  p1=a[i];
        if(strcmp(a[i], p2)<0)  p2=a[i];
    }
    cout<<p1<<'  '<<p2<<endl;
}
19.设有类T的定义为
class T{
    int x;
public:
    T(int a){x=a;}
};
若程序中有以下四条说明语句,则说明正确的是  19 
T a;      //(1)
T b(4);    //(2)
T c=b;    //(3)
T d(b);    //(4)
A.(1),(2),(3),(4)    B.(1), (2) ,(3)    C.(2),(3)      D.(2),(3),(4)
20.要利用C++流进行文件操作,必须在程序中包含的头文件是  20 
A.iostream.h        B.fstream.h        C.strstream.h    D.iomanip.h
二、基本概念填空题(每题2分,共20)
1. C++程序的源程序文件的扩展名为   1   
2. C++函数的参数传递方式有三种:值传递、  2  和引用传递。
3. C++中编译预处理包括:宏、  3  条件编译
4. 若有定义char *p="0123456789"; 则strlen(p)的结果为  4 
5. 若有定义char p[100]; 则sizeof(p)的结果是  5 
6. 若有说明语句:float a[]={10,20,30,40,50}; int b=&a[4]-&a[0]; 则执行语句后,b的值为  6 
7. 假定指针p所指向的变量x的值为25,p+1所指向的变量y的值为46,则执行(*p)++; 语句后,p所指向的变量的值为  7 
8. C++中表达式"I am a student"的值为该字符串的  8 
9.面向对象思想主要特征是封装性、  9  和多态性。
10.类继承中,缺省的继承方式是   10 
三、阅读程序填空题(每小题3分,共30)
1. 写出下面程序的输出结果是  1 
#include<iostream.h>
int a=2;
void main()
{    int b=2,c=3;
    ++a;
    c+=++b;
    if(++a||++b||++c)
        cout<<"first:"<<a<<' '<<b<<' '<<c<<endl;
    {    int a=3,c;
        c=b*3;
        a+=c;
        cout<<"second:" <<a<<' '<<b<<' '<<c<<endl;
    }
    a+=c;
    cout<<"third:" <<a<<' '<<b<<' '<<c<<endl;
}
    2        4 
课程名称:    VC++程序设计      学分:  4  试卷编号:  0600070210 A 
9. 下列程序的输出结果是  9 
#include<iostream.h>
class A{
public:
    virtual void func1(){cout<<"A1";}
    void func2(){cout<<"A2";}
};
class B: public A{
public:
    void func1(){cout<<"B1";}
    void func2(){cout<<"B2";}
};
void main()
{    A *p=new B;
    p->func1();
    p->func2();
}
10. 下列程序的输出结果是  10 
#include<iostream.h>
#include<string.h>
class X{
    char *a;
public:
    X(char *aa="abc")
    {    a=new char[strlen(aa)+1];
        strcpy(a,aa);
    }
    ~X() { cout<<a<<"被释放"<<endl;  delete[]a; }
    char *Geta()  {  return a ;  }
};
void main(void)
{    char *p1="1234";
    X s1,s2(p1);
    cout<<s1.Geta()<<s2.Geta()<<endl;
}
四、程序完善题(每空2分,共20)
1.以下程序实现用牛顿迭代法求的一个实根。其中,,迭代公式为:的初值为0,当时迭代结束。
#include<iostream.h>
#include<math.h>
double f(double x)
{    return    x*x+4*x-5;    }
double df(double x)  // f(x)的导数
{    return 2*x+4;    }
double Newton(  1  )
{    double    x1=x0;
    do{
          2  ;
        x1=  3  ;
    }while(fabs(f(x1))>1e-5);
    return    x1;
}
6. 程序的输出结果为  6 
#include<iostream.h>
void SB(char ch)
{    switch(ch)
    {    case 'A' :
        case 'a':    cout<<"well!"; break;
        case 'B':
        case 'b':    cout<<"good!"; break;
        case 'C':
        case 'c':    cout<<"pass!"; break;
        default:    cout<<"bad!"; break;
    }
    cout<<endl;
}
void main()
{    char a1='b', a2='c', a3='f';
    SB(a1); SB(a2); SB(a3); SB('A');
    cout<<endl;
}
7. 下列程序的输出结果为  7 
#include<iostream.h>
int f(int x[],int n)
{    if(n==1) x[n]=3;
    else x[n]=n+f(x,n-1);
    return x[n];
}
void main(void)
{    int b[5]={3,4,5,6,0};
    f(b,3);
    for(int i=0;i<5;i++)  cout<<b[i]<<'\t';
    cout<<endl;
}
8. 下列程序的输出结果为  8 
#include<iostream.h>
class A
{    int a;
public:
    A(int a1=0){a=a1;}
    ~A(){cout<<"Run destructor A"<<a<<endl;}
};
class B:public A
{    int b;
public:
    B(int a1=0,int b1=0):A(a1){b=b1;}
    ~B(){cout<<"Run destructor B"<<b<<endl;}
};
void main()
{    B m(3), n(4,5); }
  3        4 
课程名称:    VC++程序设计    学分:  4  试卷编号:  0600070210 A 
node *change(node *pa,int x)
{    node *pl,*p2,*p;
    pl=p2=pa;
    p=new node;      //生成新结点
    p->data=x;
    while(p2->data<x&&p2->next!=0) //寻x应插入的位置
    {    pl=p2;
          8  ;
    }
    if(p2->next!=0)
    {    if(p2==pa)//如果插入的位置是头结点之前
            pa=p;
        else
            pl->next =p;
        p->next=p2;
        while(p2!=0) //通过循环,将插入结点之后所有数据域小于x的结点作为新的头结点
        {    if(p2->data<x)
            {      9  ;
                p2->next=pa;
                pa=p2;
                p2=pl->next;
            }
            else
            {    pl= p2;
                p2=p2->next;
            }
        }
    }   
  else//如果链表中所有结点数据域均小于x,则在链尾插入以x为数据域的新结点
    {    p2->next=p;
          10  ;
    }
    return pa;
}
五、编程题(10分)
试定义一个类ARRAY,实现对一维整型数组的排序。排序的规则如下:将一维数组中各元素按其各位的数字之和从小到大排序。具体要求如下:
(1)私有数据成员:
int a[100]; 待排序的数组;
int n; 数组中元素的个数;
(2)公有成员函数
ARRAY(int t[], int m); 构造函数,利用参数t初始化成员a,参数m为数组t中元素的个数,用参数m初始化成员n;
int sum(int x); 求整数x的各位数字之和,并返回该值,此函数供成员函数fun()调用;
void fun(); 按要求对数组a的元素排序;
void print(); 输出数组a的所有元素。
(3)在主函数中对该类进行测试。
要求输出的结果如下:
排序前的数组为:297, 735, 624, 158, 312, 900
排序后的数组为:312, 900, 624, 158, 735, 297
void main()
{    cout<<Newton(0.0)<<endl;    }
2.以下程序功能是将两个无序的字符串合并成一个按照ASCII码从小到大顺序排列的字符串。
例:有两个字符串:"hgfdr"和"nmbfqa",则合并后的字符串为"abdffghmnqr"。
#include <iostream.h>
#include <string.h>
void chsort(char s[],int n)
{    int i,j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
            if(  4  )
            {    char t;
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
}
void merge(char *pa,char *pb,char *pc)
{    while(*pa&&*pb)
        *pc++=(*pa<*pb)?*pa++:  5  ;
    if(*pa) while(  6  );
    else  while(  7  );
}
void main(void)
{    char a[50]="hgfdr",b[50]="nmbfqa",c[100];
    chsort(a,strlen(a));
    chsort(b,strlen(b));
    merge(a,b,c);
    cout<<a<<endl<<b<<endl<<c<<endl;
}
3.下列程序中的函数change(node *pa,int x)的功能是:调整pa指向的链表中结点的位置。根据参数x的值,使链表中各结点数据域小于x的结点放在链表的前半部,大于等于x的结点放在链表的后半部,并将x插入这两部分结点之间。
算法提示:首先将数据域为x的结点插入到链表中的适当位置,然后将该插入点后的链表结点中所有数据域小于x的各个结点从原链表中断开,并插入到链表的头部,作为链表的新的头结点。
例如,原链表上各结点的数据依次为: 4, 2, 8, 9, 6, 10
若:x=7,经插入新结点后,新链表的各结点数据依次为: 6,4,2,7,8,9,10
#include<iostream.h>
struct node
{    int data;
    node *next;
};
  4        4 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。