#2022. CSP-J 2021 第一轮(初赛)模拟

CSP-J 2021 第一轮(初赛)模拟

总分100分,测试时间2小时

一、选择题和填空题

  1. 十进制数114的相反数的8位二进制补码是: {{ select(1) }}
  • 10001110
  • 10001101
  • 01110010
  • 01110011
  1. A班有5名风纪委员,B班有4名风纪委员,C班有3名风纪委员。现在需要这些同学中选取6名风纪委员巡逻,如果只关注各班派出的风纪委员人数,有几种不同的方案? {{ select(2) }}
  • 9
  • 12
  • 15
  • 18
  1. 以下哪种排序算法的时间复杂度是O(n2)O(n^2)? {{ select(3) }}
  • 计数排序
  • 插入排序
  • 希尔排序
  • 归并排序
  1. 已知rand()可以生成一个0到32767的随机整数,如果希望得到一个范围在[a,b)的随机整数,a和b均是不超过100的正整数且a<b,那么可行的表达式是什么? {{ select(4) }}
  • (rand()%(b-a))+a
  • (rand()%(b-a+1))+a
  • (rand()%(b-a))+a+1
  • (rand()%(b-a+1))+a+1
  1. 在内存储器中每个存储单元都被赋予一个唯一的序号,称为()。 {{ select(5) }}
  • 地址
  • 序号
  • 下标
  • 编号
  1. 编译器的主要功能是( )。 {{ select(6) }}
  • 将源程序翻译成机器指令代码
  • 将源程序重新组合
  • 将低级语言翻译成高级语言
  • 将一种高级语言翻译成另一种高级语言
  1. 现有一张分辨率为 2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( ) {{ select(7) }}
  • 16MB
  • 4MB
  • 8MB
  • 2MB
  1. 操作系统的功能是( ) {{ select(8) }}
  • 负责外设与主机之间的信息交换
  • 控制和管理计算机系统的各种硬件和软件资源的使用
  • 负责诊断机器的故障
  • 将源程序编译成目标程序
  1. 小明想通过走楼梯来锻炼身体,假设从第 1 层走到第 2 层消耗 10 卡热量, 接着从第 2 层走到第 3 层消耗 20 卡热量,再从第 3 层走到第 4 层消耗 30 卡热量,依此类推,从第 k 层走到第 k+1 层消耗 10k 卡热量 (k>l)?如果小明想从 1 层开始,通过连续向上爬楼梯消耗 1000 卡热量,至少要爬到第几层楼? ( )。 {{ select(9) }}
  • 14
  • 16
  • 15
  • 13
  1. 在数据压缩编码中的哈夫曼编码方法,在本质上是一种( )的策略 {{ select(10) }}
  • 枚举
  • 贪心
  • 递归
  • 动态规划

11.一台电脑不能启动,出现boot失败,最有可能的问题是() {{ select(11) }}

  • 软件问题
  • 操作系统问题
  • 电源问题
  • 硬盘问题

12.一个大型学校的网络结构中,隔离病毒最好的方式() {{ select(12) }}

  • VLAN
  • 安装杀毒软件
  • 培训教师
  • 使用沙箱隔离

13.在 Linux 系统终端中,用于列出当前目录下所含的文件和子目录的命令为( ) {{ select(13) }}

  • ls
  • cd
  • cp
  • all

14.中国的国家顶级域名是() {{ select(14) }}

  • .cn
  • .ch
  • .chn
  • .china

15.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0) s = a; for (b = 1; b <= c; b++) s = s - 1; 则与上述程序段功能等价的赋值语句是() {{ select(15) }}

  • s = a - c;
  • s = a - b;
  • s = s - c;
  • s = b - c;

16.BIOS(基本输入输出系统)是一组固化在计算机( )上一个ROM芯片上的程序 {{ select(16) }}

  • 主板;
  • 内存;
  • CPU;
  • 主机;
  • 机箱;

17.计算机软 保护法是用来保护软件( ) {{ select(17) }}

  • 编写权;
  • 复制权;
  • 使用权;
  • 著作权;

18.一位艺术史学家有20000幅1024*768的真彩色图象,如果将这些图象以位图形式保存在CD光盘上(一张CD光盘的容量按600M计算),大约需要( )张CD光盘。

{{ input(18) }}

19, 一个C++的源程序中,有关主函数的说法正确的是 {{ select(19) }}

  • 可以有多个主函数
  • 必须有一个主函数
  • 必须有主函数和其他函数
  • 可以没有主函数

20, 下列四个不同进制的数字中, 与其他三项数值不同的是 {{ select(20) }}

  • (42.8)16(42.8)_{16}
  • (66.5)10(66.5)_{10}
  • (102.4)8(102.4)_8
  • (1000011.1)2(1000011.1)_2

21, 在上面的条件语句中(其中S1和S2代表C++语言的语句), 只有一个在功能上与其他三个语句不等价, 它是 {{ select(21) }}

  • if(n) s1; else s2;
  • if(n==0) s1; else s2;
  • if(n==0) s2; else s1;
  • if(n!=0) s1; else s2;

22, 从1到2022这2022个数字中, 共有( )个包含数字2的数. {{ select(22) }}

  • 565
  • 629
  • 630
  • 566

23, 若定义 int a=2, b=2, 下列表达式中值不为4的是 {{ select(23) }}

  • a*(++b)
  • a*(b++)
  • a+b
  • a*b

24, 若有如下程序段, 其中s, n, i均为已定义的长整型变量

s = 0;
for(i=1; i<=n; i++)
{
    s=s*2+1;
}

当n为50的时候, s的值是( ) {{ select(24) }}

  • 24912^{49}-1
  • 25012^{50}-1
  • 25112^{51}-1
  • 以上答案都不对

25, 对于入栈顺序为a, b, c, d, e, f的序列, 下列( )是不合法的出栈序列. {{ select(25) }}

  • a, b, c, d, e, f
  • a, c, e, b, d, f
  • e, d, c, f, b, a
  • b, a, d, c, f, e

26, ( )的平均时间复杂度为O(nlogn), 其中n是待排序的元素个数. {{ select(26) }}

  • 插入排序
  • 冒泡排序
  • 快速排序
  • 基数排序

27, 若二维数组a有n列, 则ai前的元素个数为 {{ select(27) }}

  • in+ji*n+j
  • in+j1i*n+j-1
  • jn+ij*n+i
  • in+j+1i*n+j+1

28, 设某算法的时间复杂度函数的递推方程是T(n)=T(n1)+n2T(n) = T(n-1) + n^2(n为正整数)及T(1)=1, 该算法的时间复杂度是( ) {{ select(28) }}

  • O(2n)O(2^n)
  • O(n2logn)O(n^2logn)
  • O(n2)O(n^2)
  • O(n3)O(n^3)

二、阅读程序,完成选择题

29, 阅读以下程序,

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        string str;
        int cnta = 0;
        int cntn = 0;
        getline(cin, str);
        for(int i=0; i<str.size(); i++)
        {
        	if(str[i] >= 'a' && str[i] <= 'z')
            {
            	cnta++;
            }
            if(str[i] >= 'A' && str[i] <= 'Z')
            {
            	cnta++;
            }
            if(str[i] >= '0' && str[i] <= '9')
            {
                cntn++;
            }
        }
        cout << cnta << " " << cntn << endl;
    }

执行以下程序后, 下列选项中说法错误的是( ) {{ select(29) }}

  • cnta的值为字符串str中大小写字母的个数
  • cntn的值为字符串str中'0'-'9'的个数
  • cnta+cntn的值一定等于字符串str的字符个数
  • 字符串str中可能存在空格

30, 阅读以下程序

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        int t[256];
        string s;
        int i;
        cin >> s;
        for(i=0; i<256; i++)
        {
        	t[i] = 0;
        }
        for(i=0; i<s.size(); i++)
        {
        	t[s[i]]++;
        }
        for(i=0; i<s.size(); i++)
        {
        	if(t[s[i]] == 1)
            {
                cout << s[i] << endl;
                return 0;
            }
        }
        cout << "no" << endl;
        return 0;
    }

执行以下程序后, 下列选项中说法正确的是( ) {{ select(30) }}

  • 该程序会输出字符串s中所有仅出现了一次的字符的出现次数
  • 如果字符串s中存在多个仅出现一次的字符, 则会输出"no"
  • 该程序会输出字符串s中所有仅出现了一次的字符
  • 如果字符串s中所有字符的出现次数都多于1次, 则会输出"no"

31, 阅读以下程序

    #include <iostream>
    using namespace std;
    int f(int n)
    {
        cout << n;
        if(n<=2)
        {
        	return 1;
        }
        int sum = 0;
        sum += f(n/2);
        sum += f(n/2-1);
        return sum;
    }
    int main()
    {
        cout << f(6) << endl;
        return 0;
    }

,执行以下程序后,结果为( ) {{ select(31) }}

  • 633
  • 631023
  • 623013
  • 632103

32, 阅读以下程序, 执行以下程序后, 第一行输入n, m(m<=n) 第二行输入n个数 如果输入的n个数data[i]都相同

    #include <iostream>
    using namespace std;
    int data[105];
    int main()
    {
        int n, m;
        cin >> n >> m;
        for(int i=1; i<=n; i++)
        {
        	cin >> data[i];
        }
        for(int i=1; i<=n; i++)
        {
            int cnt = 0;
            for(int j=1; j<=n; j++)
            {
                if(data[i] < data[j] || (data[i]==data[j] && j < i))
                {
                    cnt++;
                }
            }
            if(cnt == m)
            {
                cout << i << endl;
            }
        }
        return 0;
    }

程序输出的值为( ) {{ select(32) }}

  • m+1
  • m
  • 1
  • 0

33, 阅读以下程序, 执行以下程序后, 第一行输入n, m(m<=n) 第二行输入n个数 如果输入的n个数data[i]为升序且各不相同

    #include <iostream>
    using namespace std;
    int data[105];
    int main()
    {
        int n, m;
        cin >> n >> m;
        for(int i=1; i<=n; i++)
        {
        	cin >> data[i];
        }
        for(int i=1; i<=n; i++)
        {
            int cnt = 0;
            for(int j=1; j<=n; j++)
            {
            	if(data[i] < data[j] || (data[i]==data[j] && j < i))
                {
                	cnt++;
                }
            }
            if(cnt == m)
            {
            	cout << i << endl;
            }
        }
        return 0;
    }

则程序输出的值为( ) {{ select(33) }}

  • n-m+1
  • n-m-1
  • n-m
  • m+1