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

1(单选题):
操作系统通常由操作系统内核和许多配套软件、程序库等组成。下列相关叙述中,错误的是___.
    O内核主要是指提供任务管理、存储管理、文件管理和设备管理等功能的软件模块
    O在操作系统运行过程中,内核通常都驻留在内存中,它以CPU的最高优先级运行
    O应用程序接口(API)是操作系统必不可少的组成部分,属于操作系统内核范畴
    O相同内核的操作系统可以有多种不同的产品,例如Windows操作系统等


2(单选题):
下列有关通信中交换技术的叙述中,错误的是_____.
O电路交换的效率最低,因为在通信的全部时间内始终占用端到端的传输信道
O在分组交换中,需要将传输的数据划分为若干个数据块,并据此生成数据包进行传输
O分组交换机是实现分组交换方式的关键设备,其基本工作模式是“存储转发”
O分组交换技术因具有系统开销低、传输时延低等优点,目前被广泛使用

3(单选题):
半导体存储器芯片按其保存数据的机理等可以分为多种类型。目前存储卡、U盘和固态硬盘等主要采用_____.
    O静态随机存取存储器SRAM
    O动态随机存取存储器DRAM
    ONAND型Flash存储器
    o电可擦可编程只读存储器EEPROM)


4(单选题):
在比特的运算中,逻辑加运算1100∨O101的结果是____。
    01101
    00100
    01 01
    00011

5(单选题):
在音频信号的数字化过程中,人的说话声音频带较窄(仅为300~3400Hz),通常语音的取样频率为8kHz、量化位数为8位,这时未压缩的码率大约为____。
08kb/s
064kb/s
0300kb/s
01411kb/s


6(单选题):
对于智能手机等设备来说,传感器是一种重要的输入设备。高端智能手机通常配置了以下传感器,其中能感知手机横竖纵三个方向的位置变化,以实现自动调整屏幕以横向或纵向进行显示的是______。
    O三轴陀螺仪
    O环境光感应器
    O气压传感器
    O重力传感器

7(单选题):
当今时代,网络信息安全己成为全球性的重大安全问题。下列有关叙述中,错误的是____。
    O目前互联网上”木马”病毒泛滥成灾,有些通过邮件的附件进行传播,有些直接通过网页传播
    O漏洞是指—个系统存在的弱点或缺陷,漏洞的存在导致系统易被黑客入侵和病毒驻留
    O后门是绕过安全性控制而获取对系统访问权的方法,后门往往是系统设计人员或入侵者”留下的”
    O系统安装防火墙和入侵检测软件是提高安全性的有效手段,目前所有的这些软件都是免费的、开源的

8(单选题):
IC卡是“集成电路卡”或“芯片卡”的简称,国外称为chip card或smart card。下列有关IC卡的叙述中,错误的是_____。
    O可以分为存储器卡和CPU卡,前者除了有存储电路外,通常还有写入保护和加密电路
    O可以分为存储器卡和CPU卡,后者集成了中央处理器、程序和数据存储器
    O可以分为接触式IC卡和非接触式IC卡,相比较来说,前者易磨损、寿命要短一些
    O可以分为接触式IC卡和非接触式IC卡,随着技术进步和成本降低,后者逐渐被淘汰


9(单选题):
字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。目前在Windows中文版操作系统中,通常使用____来表示和处理文本,在数据文件需要保存到外存时会转换成操作系统所默认的本地编码(方案)。
OASCII
OUTF-8
OUTF-16
OGB 18030


10(单选题):
通俗地说,算法就是解决问题的方法和步骤。下列关于算法表示形式的叙述中,错误的是____。
O对于复杂的算法,采用文字说明表示算法时很难“系统”并”精确”地表达,且叙述冗长
O算法的流程图表示比文字描述简明,但当算法比较复杂时,也难以表达清楚
O算法可采用伪代码表示,这是一种介于自然语言和程序设计语言之间的文字和符号表达方法
o采用某种具体的程序设计语言描述算法,是最为高效、最为方便、也是最常用的方法


1(单选题):
派生类的对象对它的基类成员中的____是可以访问的。
    O公有继承的公有成员
    O公有继承的私有成员
    O保护继承的保护成员
    O私有继承的公有成员

2(单选题):
下列有关对象的叙述中,不正确的是_____。
O对象必须先说明后使用,其说明的—般形式是:“类名对象名;”
O类的说明是不分配存储空间的,只在程序运行时为对象分配存储空间
O同—类的不同对象,占有完全不同的内存空间,即它们没有共享的存储空间
O同—类不同对象的成员函数占有相同的内存空间,对象中存储的是这些成员函数在内存中的地址


3(单选题):
设x和y都是int型变量,下列语句中错误的是______。
    Ox=y++;
    Ox+=++y;
    O(X+y)++:
    o++x*=y;


4(单选题):
下列有关数组与指针的描述中,不正确的是____。
    o一个数组的数组名与指向这个数组的指针变量不同
    o一个—维字符数组可以当作字符串处理
    O数组的下标从1开始
    O对引用变量进行求地址运算时,其值将是其引用的变量的地址

5(单选题):
函数重找定义时,参数中的______必须不同。
    O参数个数
    O参数类型
    O参数顺序
    O以上任何—个
6(填空题 <3空> ) :
[程序]
#include <iostream>
using namespace std;
class A {
        int x;
    public:
        A(int i) {
            x=i;
        }
        virtual void print() {
            cout<<"x="<<x<<"  ";
        }
};
class B: public A {
        int y;
    public:
        B(int i, int j):A(i) {
            y=j;
        }
        void print() {
            A::print();
            cout<<"y="<<y<<endl;
        }
};
class C: public B {
 int z;
        A a;
    public:
        C(int i,int j,int k,int m): B(i,j),a(k),z(m){ }
        void print() {
            a.print();
            B::print();
            cout<<"z="<<z<<endl;
        }
};
int main() {
    A *p;
    B b(1,5);
    b.print();
    C c(2,3,4,8);
    p=&b;
    p->print();
    p=&c;
    p->print();
    return 0;
}
执行以上程序后,输出的第二行是_____,第三行是________,第四行是_______。
7 (填空题 <2空> ) :
[程序]
#include <iostream>
using namespace std;
char *nextWord(char **p) {
    static char word[80];
    while(**p==' ')
        (*p)++;
    char *pw=word;
    while(**p && **p!=' ') {
        *pw=*(*p);
        pw++;
        *(*p)++;
    }
    *pw='\0';
    return word;
}
int main() {
    char s[]="What's your name?",*ps=s;
    do {
        cout<<nextWord(&ps)<<endl;
    } while(*ps);
    return 0;
}
执行以上程序后,输出的第一行是_____,第二行是_______。
8(填空题 <3空> ) :
[程序]
#include <iostream>
using namespace std;
class Point {
    public:
        Point(int a=0, int b=0) {
            x=a;
            y=b;
            cout<<"Constructor:"<<x<<','<<y<<endl;
        }
        Point(const Point &p);
        ~Point() {
            cout<<"Destructor:"<<x<<','<<y<<endl;
        }
    private:
        int x,y;
};
Point::Point(const Point &p) {
    x=p.x;
    y=p.y;
    cout<<"Copy:"<<x<<','<<y<<endl;
}
int main() {
    Point m(2,4),a;
    Point n(m);
    return 0;
}
执行程序后,输出的第二行是______,第三行是_____,第四行是_______。
9(填空题 <2空> ) :
[程序]
#include <iostream>
using namespace std;
int f(int i) {
    return ++i;
}
int g(int &i) {
    return ++i;
}
int main() {
    int a,b;
    a=b=1;
    a+=f(g(a));
    b+=f(f(b));
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    return 0;
}
执行程序后,输出的第一行是________,第二行是________。

 

1(完善程序):

【题目】已知XYZ+YZZ=532,其中X,Y和Z为0-9之间的一位数字,以下程序的功能是分别求出满足条件的X,Y和Z的值。

程序输出为:

x=3,y=2,z=1

【程序】

#include <iostream>

using namespace std;

int main() {

    int x,y,z,i;

    for(x=1; x<=9; x++)

        for(y=1; y<=9; y++)

            for(z=0; __________; z++) {

                i=__________;

                if(__________)

                    __________;

            }

    return 0;

}

【要求】

l  打开T盘中myfa.cpp文件,根据题目要求及程序中语句之间的逻辑关系对程序进行完善。

l  完善后的源程序文件myfa.cpp必须保存在T盘的根目录下,供阅卷用。

 

 

2(改错题):

【题目】众数是指一组数据中出现次数最多的数值,有时在一组数中有多个众数。例如:数据 1 3 4 2 1 3 2 1 3 4中的众数为1和3。

以下程序的功能是:给定n个初始数据(n<1001),将这些数据从左到右依次编号,并假设第一个数据的编号为1,对这些数据进行如下两种操作命令(其中,a,b都是正整数):

0 a b:求出数据编号在闭区间[a, b]内的众数,如果有多个众数,则输出较小的那个数,此时a<b。

1 a b:将编号为a的数据值修改为b。

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

输入数据个数及指令个数:5  3

输入初始数据(5个):1  1  2  2  1

输入第1条指令:0  1  4

1与4之间的众数为:1

输入第2条指令:1  2  3

修改后的数据为:1 3 2 2 1

输入第3条指令:0  1  4

1与4之间的众数为:2

含有错误的源程序如下:

#include <iostream>

using namespace std;

int a[1001];

void work(int i,int j) {         // 寻找下标在区间[i, j]里的众数并输出

    int b[1001], k, maxn=0, tmp=1, r=0;

    for (k=i; k<=j; k++)

        b[k]=a[k];

 

    for(int i1=i; i1<j; i1++)      //从小到大排序

        for(int i2=i1+1; i2<=j; i2++)

            if(b[i1]<b[i2]) 

                swap(b[i1], b[i2]);

    for(k=i+1; k<=j; k++) {

        if(b[k]==b[k-1]) {

            if(tmp>maxn) {

                r=b[k-1];

                maxn=tmp;

            }

            tmp=1;

        } else

            tmp++;

    }

    if(tmp>maxn) {

        r=b[j];

        maxn=tmp;

    }

    cout<<r<<endl;

}

int main() {

    int n, m, i, j, flag, x, y;

    cout<<"输入数据个数及指令个数:";

    cin>>n>>m;

    cout<<"输入初始数据("<<n<<"个):";

    for(i=1; i<=n; i++)

        cin>>a[i];

    for(i=0; i<m; i++) {

        cout<<"输入第"<<i+1<<"条指令:";

        cin>>flag>>x>>y;

        if(flag) {

            cout<<x<<"与"<<y<<"之间的众数为:";

            work(x,y);

        } else {

            a[y]=x;

            cout<<"修改后的数据为";

            for(j=1; j<=n; j++)

                cout<<a[j]<<' ';

            cout<<endl;

        }

    }

    return 0;

}

【要求】

l  打开T盘中myfb.cpp文件,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

l  改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句。

l  改正后的源程序文件myfb.cpp必须保存在T盘的根目录下,供阅卷用。

 

 

3(编程题):

【题目】试定义一个类NUM,将一维整型数组中各元素的各位数字进行降序排列。例如:整数32524的各位数字降序排列后的整数为54322。具体要求如下:

(1)私有成员:

l int a[6]; 成员数组。

(2)公有成员:

l  NUM(int a1[], int n): 构造函数,用参数数组a1的前n个元素初始化成员数组a。

l  int f1(int n): 辅助函数,将整数n各位上的数字降序排列后返回。要求先将整数n各位上的数字提取并存放到某一数组中,然后调用函数f3()对该临时数组排序,再将这些数字重新组合成一个整数并返回。

l  void f2(): 将成员数组a中的各元素各位上的数字进行降序排列,要求多次调用成员函数f1()实现。

l  void f3(int t[], int n): 辅助函数,将数组t的前n个元素降序排序。

l  void print(): 辅助函数,打印成员数组a。

(3)在主函数中对类NUM进行测试,要求输出原始数组及处理后的数组。

输出示例:

原始数组:

1344    47895   59078   5630    623     5351

处理后的数组:

4431    98754   98750   6530    632     5531

【要求】

打开T盘中myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。