#CSP0018. CSP-S 2026 初赛模拟试卷 二
CSP-S 2026 初赛模拟试卷 二
- 大多数计算机病毒主要造成计算机()的损坏。 {{ select(1) }}
- 软件和数据
- 硬件和数据
- 硬件、软件和数据
- 硬件和软件
- 假设有253块月饼,把它们装到15个盒子里面,那么数量最多的一盒至少装()块月饼。 {{ select(2) }}
- 16
- 23
- 15
- 17
- ASCII码是由美国国家标准委员会指定的一种包括数字、字母、通用字符和控制符号在内的字符编码集,它是一种()位二进制码。 {{ select(3) }}
- 8
- 7
- 4
- 32
- 计算机的硬件主要包括控制器、()存储器、输入设备、输出设备。 {{ select(4) }}
- 运算器
- 操作系统
- 计算机语言
- 磁盘
- 字符'a'的ASCII码是97,下面程序的输出结果是()。
char c = 'a' + 4;
cout << (int)c << ' ' << c + 3 << endl;
{{ select(5) }}
- e, h
- 101, 104
- e, 104
- 101, h
- 操作系统是对()进行管理的软件。 {{ select(6) }}
- 计算机资源
- 软件
- 硬件
- 应用程序
- 以下选项中,()不是操作系统。 {{ select(7) }}
- Linux
- Windows CE
- Solaris
- Celeron
- 以下关于 语言注释的说法中正确的是()。 {{ select(8) }}
- 写 程序时必须书写注释,否则会对程序的功能造成影响
- 语言的注释将参与编译器编译,并形成指令
- 可以采用“/\\/”的形式书写多行注释,其中的注释内容可以是任何字符
- “//注释”表示从//开始直到本行末尾的所有字符均是注释内容
- 要使用putchar函数实现向显示器输出字符'A',可使用()。 {{ select(9) }}
- putchar(65)
- putchar(A)
- putchar('\65')
- putchar("A")
- 两个指针类型变量()。 {{ select(10) }}
- 可在一定条件下相加
- 如同时指向一个变量,则此后就不能再指向其他变量了
- 任何时候都不能相减
- 可在一定条件下进行相等或不平等的比较运算
- 下列属于B类IP地址的是()。 {{ select(11) }}
- 27.33.119.2
- 134.300.12.4
- 133.201.189.32
- 192.97.32.121
- 现有变量 ,取值范围均为 ,假设每个值出现的概率相同,则 的值能被3整除的概率是( )。(这里 为按位异或运算符。) {{ select(12) }}
- 3/8
- 1/2
- 1/4
- 1/8
- 假设以S和X分别表示进栈和出栈操作,对输入序列a,b,c,d,e进行一系列栈操作
SSXSXSSXXX之后,得到的输出序列为( )。 {{ select(13) }}
- baced
- bceda
- cbaed
- edcba
- 某递归算法的执行时间的递推关系如下:当 时 ,当 时 。则该算法的时间复杂度为( )。 {{ select(14) }}
- 一棵完全二叉树中有501个叶节点,则整棵树至少有( )个节点。 {{ select(15) }}
- 501
- 502
- 1001
- 1002
阅读程序(1):
#include <iostream>
using namespace std;
const int maxn = 100001;
int N,M,K,x[maxn],y[maxn],d[maxn],c[maxn];
int *a[maxn];
int main() {
cin >> N >> M >> K;
for (int i=0; i<K; ++i) {
//表示第x[i]行第y[i]列值为d[i]
cin >> x[i] >> y[i] >> d[i];
c[y[i]]++;
}
for (int i=1; i<=M; ++i) a[i] = new int[c[i]];
for (int i=0; i<K; ++i) {
*a[y[i]] = d[i];
a[y[i]]++;
}
for (int i=1; i<=M; ++i) {
a[i] = a[i] - c[i];
for (int j=0; j<c[i]; ++j, ++a[i])
cout << *a[i] << " ";
}
return 0;
}
- 程序定义了一个指针数组a,a[i]表示第i列的指针。 {{ select(16) }}
- 正确
- 错误
- 将
*a[y[i]] = d[i]改成a[y[i]][0] = d[i]不影响运算结果。 {{ select(17) }}
- 正确
- 错误
- 第12行中,数组c用来统计每行中的数据个数。 {{ select(18) }}
- 正确
- 错误
- 在本程序中,采用动态数组以优化空间的利用,每一列数组长度可能不同。 {{ select(19) }}
- 正确
- 错误
- 该程序的时间复杂度为( )。 {{ select(20) }}
- 该程序的空间复杂度为( )。 {{ select(21) }}
阅读程序(2):
#include <iostream>
#include <iomanip>
using namespace std;
int m[101][101];
int main() {
int a;
cin >> a;
int c = a * a, i = 1, k = (a+1)/2;
for (int j=1; j<=c; j++) {
m[i][k] = j;
if (j % a == 0) {
if (i == a) i = 1; else i++;
} else {
if (i == 1) i = a; else i--;
if (k == a) k = 1; else k++;
}
}
for (int i=1; i<=a; i++) {
for (int j=1; j<=a; j++)
cout << setw(5) << m[i][j];
cout << endl;
}
return 0;
}
- 从程序可以看出,i 为被填数,j 和 k 为填数位置。 {{ select(22) }}
- 正确
- 错误
- 填数结束后,数组 m 中的元素互不相同。 {{ select(23) }}
- 正确
- 错误
- 当
j % a == 0且i != a时,下一步填入的是( )。 {{ select(24) }}
m[i][k]m[i+1][k]m[k+1][i]m[k+1][i+1]
- 当
j % a != 0、i != 1且k == a时,下一步填入的是( )。 {{ select(25) }}
m[a][i]m[i-1][i]m[a][k+1]m[i-1][k+1]
- (4 分)填数后,每行每列及对角线的和均为( )。 {{ select(26) }}
阅读程序(3):
#include <iostream>
using namespace std;
int a[101], d[101];
int main() {
int n = 5;
a[1] = d[1] = 1;
for (int i=1; i<=n; ++i) {
int s = i+1, x = 0;
for (int j=1; j<=n+1-i; ++j) {
int k = s + x;
x++;
a[j+1] = a[j] + k;
cout << a[j] << ' ';
}
cout << "..." << endl;
a[i] = d[i+1] = d[i] + i;
}
return 0;
}
- 该题由两重循环构成,外循环 i 控制列的变化,内循环 j 控制行的变化。 {{ select(27) }}
- 正确
- 错误
- 代码运行结果如下。
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
{{ select(28) }}
- 正确
- 错误
- (4分)程序在输出时,第i行为()个
a[j]数组的值。 {{ select(29) }}
- (4分)本题代码的运算结果是输出()行。 {{ select(30) }}
- 4
- 5
- 6
- 7
完善程序(1):
#include <cstdio>
#include <memory>
#include <cmath>
#define LEN 125
void Multiply(int *a, int *b) {
int i, j, nCarry, nTmp, c[LEN];
memset(c, 0, sizeof(int) * LEN);
for (i = 0; i < LEN; i++) {
nCarry = 0;
for (j = 0; ①; j++) {
nTmp = c[i + j] + a[j] * b[i] + nCarry;
c[i + j] = nTmp % 10000;
nCarry = nTmp / 10000;
}
}
memcpy(a, c, LEN * sizeof(int));
}
int main() {
int i, p, anPow[LEN], aResult[LEN];
scanf("%d", &p);
printf("%d\n", (int)(p * log10(2)) + 1);
anPow[0] = 2;
aResult[0] = 1;
for (i = 1; i < LEN; i++) {
anPow[i] = 0;
aResult[i] = 0;
}
while (②) {
if (③) {
Multiply(aResult, anPow);
}
p >>= 1;
Multiply(anPow, anPow);
}
aResult[0]--;
for (i = LEN - 1; i >= 0; i--) {
if (④)
printf("%02d\n%02d", aResult[i] / 100, aResult[i] % 100);
else {
printf("%04d", aResult[i]);
if (i % 25 == 0) printf("\n");
}
}
return 0;
}
- ①处应填( )。 {{ select(31) }}
j < LENj < LEN - i - 1i < LEN - ij < 1
- ②处应填( )。 {{ select(32) }}
p > 0p == 0p < 0p >= 0
- ③处应填( )。 {{ select(33) }}
p & 1pp || 1p = 0
- ④处应填( )。 {{ select(34) }}
i != 0i > 0i % 10 == 0i % 25 == 12
完善程序(2):
#include <cstdio>
#include <cstdlib>
#include <memory>
#include <algorithm>
int f[30][1000], Path[300][1000];
int P[300], D[300], Answer[30];
int main() {
int i, j, k, t1, t2, n, m, nMinPD;
int nCaseNo = 0;
scanf("%d%d", &n, &m);
while (n + m) {
nCaseNo++;
for (i = 1; i <= n; i++) scanf("%d%d", &P[i], &D[i]);
memset(f, -1, sizeof(f));
memset(Path, 0, sizeof(Path));
nMinPD = ①;
②;
for (j = 0; j < m; j++) {
for (k = 0; ③; k++)
if (④) {
for (i = 1; i <= n; i++)
if (⑤) {
t1 = j; t2 = k;
while (t1 > 0 && Path[t1][t2] != i) {
t2 = P[Path[t1][t2]] - D[Path[t1][t2]];
t1--;
}
if (t1 == 0) {
f[j+1][k + P[i] - D[i]] = f[j][k] + P[i] + D[i];
Path[j+1][k + P[i] - D[i]] = i;
}
}
}
}
i = nMinPD; j = 0;
while (f[m][i+j] < 0 && f[m][i-j] < 0) j++;
if (f[m][i+j] > f[m][i-j]) k = i + j;
else k = i - j;
printf("Jury_#_%d\n", nCaseNo);
printf("Best_jury_has_value_%d_for_prosecution_and_value_%d_for_defence:\n",
(k - nMinPD + f[m][k]) / 2,
(f[m][k] - k + nMinPD) / 2);
for (i = 1; i <= m; i++) {
⑥;
k = P[Answer[j]] - D[Answer[j]];
}
std::sort(Answer + 1, Answer + m + 1);
for (i = 1; i <= m; i++) printf("%d", Answer[i]);
printf("\n\n");
scanf("%d%d", &n, &m);
}
return 0;
}
- ①处应填( )。 {{ select(35) }}
nMinPD = m * 20nMinPD = mnMinPD = m * 200nMinPD = m * n
- ②处应填( )。 {{ select(36) }}
f[0][nMinPD] = 1f[0][nMinPD] = 0f[0][nMinPD] > 0f[0][nMinPD] > 1
- ③处应填( )。 {{ select(37) }}
k < nMinPD * 2k < nMinPDk <= nMinPD * 2k <= nMinPD
- ④处应填( )。 {{ select(38) }}
f[j][k] > 1f[j][k] >= 1f[j][k] >= 0f[j][k] > 0
- ⑤处应填( )。 {{ select(39) }}
f[j][k] + P[i] + D[i] > f[j+1][k+P[i]-D[i]]f[j][k] + P[i] + D[i] > f[j+1][k+P[i]]f[j][k] + P[i] > f[j+1][k+P[i]]f[j][k] + P[i] > f[j+1][k+P[i]-D[i]]
- ⑥处应填( )。 {{ select(40) }}
Answer[j] = Path[m-j][k]Answer[j] = Path[m-j][k+1]Answer[j] = Path[m-j+1][k+1]Answer[j] = Path[m-j+1][k]