#2022. CSP-J 2021 第一轮(初赛)模拟
CSP-J 2021 第一轮(初赛)模拟
总分100分,测试时间2小时
一、选择题和填空题
- 十进制数114的相反数的8位二进制补码是: {{ select(1) }}
- 10001110
- 10001101
- 01110010
- 01110011
- A班有5名风纪委员,B班有4名风纪委员,C班有3名风纪委员。现在需要这些同学中选取6名风纪委员巡逻,如果只关注各班派出的风纪委员人数,有几种不同的方案? {{ select(2) }}
- 9
- 12
- 15
- 18
- 以下哪种排序算法的时间复杂度是? {{ select(3) }}
- 计数排序
- 插入排序
- 希尔排序
- 归并排序
- 已知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
- 在内存储器中每个存储单元都被赋予一个唯一的序号,称为()。 {{ select(5) }}
- 地址
- 序号
- 下标
- 编号
- 编译器的主要功能是( )。 {{ select(6) }}
- 将源程序翻译成机器指令代码
- 将源程序重新组合
- 将低级语言翻译成高级语言
- 将一种高级语言翻译成另一种高级语言
- 现有一张分辨率为 2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( ) {{ select(7) }}
- 16MB
- 4MB
- 8MB
- 2MB
- 操作系统的功能是( ) {{ select(8) }}
- 负责外设与主机之间的信息交换
- 控制和管理计算机系统的各种硬件和软件资源的使用
- 负责诊断机器的故障
- 将源程序编译成目标程序
- 小明想通过走楼梯来锻炼身体,假设从第 1 层走到第 2 层消耗 10 卡热量, 接着从第 2 层走到第 3 层消耗 20 卡热量,再从第 3 层走到第 4 层消耗 30 卡热量,依此类推,从第 k 层走到第 k+1 层消耗 10k 卡热量 (k>l)?如果小明想从 1 层开始,通过连续向上爬楼梯消耗 1000 卡热量,至少要爬到第几层楼? ( )。 {{ select(9) }}
- 14
- 16
- 15
- 13
- 在数据压缩编码中的哈夫曼编码方法,在本质上是一种( )的策略 {{ 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) }}
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) }}
- 以上答案都不对
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) }}
28, 设某算法的时间复杂度函数的递推方程是(n为正整数)及T(1)=1, 该算法的时间复杂度是( ) {{ select(28) }}
二、阅读程序,完成选择题
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