#751. [CSPJ2609 初赛] 模拟题二
[CSPJ2609 初赛] 模拟题二
一、单项选择题(每题 2 分,共 30 分)
- 在 C++ 程序中用到的一个常量 在内存中占( )空间。
{{ select(1) }}
- 字节
- 字节
- 字节
- 字节
- 以下关于 CSP 与 NOIP 的描述正确的是( )。
{{ select(2) }}
- CSP 属于专业认证,只有计算机专业在校生才能参加
- CSP - J/CSP - S 是中国通信学会举办的程序设计竞赛
- CSP - J 初赛零分也可以直接报名参加 NOIP
- CSP - J 和 CSP - S 都是 CCF 牵头举办的程序设计赛事`
- 某单位安装一条电信宽带进行上网,运营商说下行速度是 Mbps。要下载大小为 GB的软件,最快大约需要( )秒。
{{ select(3) }}
- 大写字母
M的 ASCII 码整数值和空格的 ASCII 码整数值之和,是字母m的 ASCII 码整数值。空格的 ASCII 码整数值是( ) 。
{{ select(4) }}
- 在微型计算机中,( )的存取速度最快。
{{ select(5) }}
- RAM
- CD-ROM
- 高速缓存
- 寄存器
- 搜索算法中的 DFS 算法经常用到的数据结构是( )。
{{ select(6) }}
- 堆
- 栈
- 链表
- 队列
- 以下哪个说法是正确的?( )
{{ select(7) }}
- 花括号 “{” 和 “}” 只能作为 C++ 函数体的定界符
- 构成 C++ 程序的基本单位是函数,所有函数名都可以由用户命名
- 分号是 C++ 语句之间的分隔符,不是语句的一部分
- C++ 程序中的注释部分可以出现在程序中任意合适的地方
- 在下列排序算法中, STL 中的
sort()函数采用的主要算法是( )。
{{ select(8) }}
- 选择排序
- 快速排序
- 冒泡排序
- 拓扑排序
- 以下哪个说法是正确的?( )
{{ select(9) }}
- 第一台电子计算机 ENIAC 是基于集成电路的产物
- 计算机必须要同时有 IP 地址和域名才能接入互联网
- david@163.com 是一个正确的电子邮箱地址
- 手机上收到的短信,里面的链接可以随意点击打开
- 以下不能对二维数组 进行正确初始化的语句是( )。
{{ select(10) }}
int a[2][3]={{{1,2},{3,4},{5,6}}};int a[][3]={{{1,2},{0}}};int a[2][3]={0};int a[][3]={1,2,3,4,5,6};
- 现在有一个八进制数 ,其转换成的二进制数是( )。
{{ select(11) }}
- 设 A = true,B = false,C = false,D = true,以下逻辑运算表达式的值为假的是( )。
{{ select(12) }}
- $\left(\left( \mathrm{A}\land\mathrm{B}\right)\lor\mathrm{C}\right)\land\mathrm{D}$
- $\left( \mathrm{A} \lor \mathrm{B} \right) \land \left( \mathrm{C} \lor \mathrm{D} \right)$
- $\mathrm{A} \land \left( \left( \mathrm{B} \lor \mathrm{C} \right) \lor \mathrm{D} \right)$
- $\left( \mathrm{A} \land \left( \mathrm{B} \lor \mathrm{C} \right) \right) \lor \mathrm{D}$
- 二叉树的中序序列为 ABCEFGHD,后序序列为 ABFHGEDC,则其前序序列为 ( )。
{{ select(13) }}
- CBADEGHF
- CBADEGFH
- CBDAEGFH
- CBADGEFH
- 从班级中体育比较好的 人中选 人去参加运动会,其中甲、乙、丙最多同时选两人,不同的选法共有( )种。
{{ select(14) }}
- 以下哪个结构可以用来存储图?( )
{{ select(15) }}
- 栈
- 二叉树
- 邻接表
- 队列
二、阅读程序
(程序输入不超过数组或字符串定义的范围; 除特殊说明外,判断题每题 分,选择题每题 分,共计 分)
(1)
#include<iostream>
#include<cstring>
using namespace std;
char s1[1005],s2[1005];
int a[1005],b[1005],c[1005];
int main()
{
int la,lb,lc;
scanf("%s",s1);
scanf("%s",s2);
la = strlen(s1);
lb = strlen(s2);
lc = max(la,lb) + 1;
for(int i=0;i<la;++i)
a[la-i] = s1[i] - '0';
for(int i=0;i<lb;++i)
b[lb-i] = s2[i] - '0';
for(int i=1;i<=lc;i++)
{
c[i] += a[i] + b[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
if(c[lc]==0 && lc>0)
lc--;
for(int i=lc;i>0;i--)
printf("%d",c[i]);
return 0;
}
(1) 将第 行代码改为 #include<stdio.h> ,程序的运行结果不会改变。 ( )
{{ select(16) }}
- 正确
- 错误
(2) 将第 行代码改为 cin>>s1>>s2; ,程序的运行结果不会改变。 ( )
{{ select(17) }}
- 正确
- 错误
(3) 若输入两个都超过 位长的正整数,则程序一定会出错且无输出。 ( )
{{ select(18) }}
- 正确
- 错误
(4) 在输入 的情况下,将第 行代码中的 lc>0 去掉,程序的运行结果不会改变。 ( )
{{ select(19) }}
- 正确
- 错误
(5) 若输入数据为 ,则输出为( )。
{{ select(20) }}
(6) 若输入数据为 ,则输出为( )。
{{ select(21) }}
- 以上都不是
(2)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
int n, a[MAXN], b[MAXN];
void mergesort(int *a, int l, int r)
{
int i,j,cnt,mid;
if (l == r)
return;
mid = (l + r)/2;
mergesort(a, l, mid);
mergesort(a, mid + 1, r);
i = l, j = mid + 1, cnt = 0;
while (i <= mid && j <= r)
{
if (a[i] <= a[j])
b[++cnt] = a[i++];
else
b[++cnt] = a[j++];
}
while (i <= mid)
b[++cnt] = a[i++];
while (j <= r)
b[++cnt] = a[j++];
for (i = l; i <= r; i++)
a[i] = b[i - l + 1];
}
int main(void)
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
mergesort(a, 1, n);
for (int i = 1; i <= n; i++)
cout << a[i] << (i == n ? '\n' : ' ');
return 0;
}
(1) 该排序算法用到的是不稳定的排序算法。 ( )
{{ select(22) }}
- 正确
- 错误
(2) 将第 行改为 mid = l+r >> 1; ,程序的输出结果不变。 ( )
{{ select(23) }}
- 正确
- 错误
(3) 该排序算法用到了分治的思想。 ( )
{{ select(24) }}
- 正确
- 错误
(4) 第 行代码用到的三目运算符处理代码可以用等价的条件语句来写。 ( )
{{ select(25) }}
- 正确
- 错误
(5) 在最坏情况下,该算法的时间复杂度和下面哪个算法相当?( )
{{ select(26) }}
- 插入排序
- 选择排序
- 堆排序
- 快速排序
(6) 若输出 ,则输入可能为( )。
{{ select(27) }}
()
#include<bits/stdc++.h>
using namespace std;
int t,x[100],a[100];
void dfs(int d,int i,int n)
{
if(n==1)
{
for(int k=0;k<d;k++)
printf("%4d",a[k]);
printf("\n");
}
else
for(int k=i;k<t;k++)
if(n%x[k]==0)
{
a[d]=x[k];
dfs(d+1,k,n/x[k]);
}
}
int main()
{
int n;
cin>>n;
for(int i=n;i>1;i--)
if(n%i==0)
x[t++]=i;
dfs(0,0,n);
return 0;
}
(1) 该程序的作用是对 进行质因数分解并从小到大依次打印。 ( )
{{ select(28) }}
- 正确
- 错误
(2) 将第 行代码 printf("%4d",a[k]); 中的 去掉,程序输出不变。 ( )
{{ select(29) }}
- 正确
- 错误
(3) 第 行的作用是求出 的所有因子。 ( )
{{ select(30) }}
- 正确
- 错误
(4) 程序运行过程中,若输入 为 或者负数,程序一定会打印错误,崩溃退出。
{{ select(31) }}
- 正确
- 错误
(5) 若输入 ,则输出为( )。
{{ select(32) }}
-
6 3 2 -
72 36 2 -
6 2 3 -
72 2 36
(6) 若输入 ,那么输出结果可能是( )。
{{ select(33) }}
- 什么也不输出
(7) ( 分)若输入 ,则输出有( )行。
{{ select(34) }}
三、完善程序
单项选择题,每题 分,共 分。
(1) 扫雷游戏是一款十分经典的单机小游戏。在 行 列的雷区中有一些格子含有地雷(称为地雷格),其他格子不含地雷(称为非地雷格)。玩家翻开一个非地雷格时,该格子中将会出现一个数字,提示周围格子中有多少个是地雷格。玩家的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。请将程序补充完整。现在给出 行 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下这 个方向上与之直接相邻的格子。
输入格式:
第 行是用一个空格隔开的两个整数 和 ,分别表示雷区的行数和列数。接下来 行,每行 个字符,描述了雷区中的地雷分布情况。字符 * 表示相应格子是地雷格,字符?表示相应格子是非地雷格。相邻字符之间无分隔符。
输出格式:
输出文件包含 行,每行 个字符,描述整个雷区。用 * 表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
3 3
*??
???
???
*10
221
1*1
#include<bits/stdc++.h>
using namespace std;
const int dx[] = {1, 1, 1, 0, 0, -1, -1, -1};
const int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};
char g[101][101];
int main()
{
int n,m,cnt;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>g[i][j];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
if ( ① )
{
②;
for (int k = 0; ③ ; k++)
if ( ④ )
cnt++;
cout << cnt;
}
else
cout<<"*";
if( ⑤ )
cout<<endl;
}
return 0;
}
(1) ① 处应填( )
{{ select(35) }}
g[i][j] != '?'g[i][j] != '\0'g[i][j] != ' * 'g[i][j] == ' * '
(2) ② 处应填( )
{{ select(36) }}
cnt++cnt = 0cnt = 0++cnt = 0
(3) ③ 处应填( )
{{ select(37) }}
k < 8k < mk < nk < min(m,n)
(4) ④ 处应填( )
{{ select(38) }}
g[i + dy[k]][j + dx[k]] == ' \star 'g[i - dx[k]][j - dy[k]] == ' \star 'g[i + dx[k]][j + dy[k]] == ' \star 'g[i - dy[k]][j - dx[k]] == ' \star '
(5) ⑤ 处应填( )
{{ select(39) }}
j != mj != m - 1i != ni != n - 1
() 给你 根火柴棍,你可以拼出多少个形如 A+B=C 的等式? 等式中的 A 、 B 、 C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 )` 。用火柴棍拼数字 的拼法如图所示。
注意:
- 加号与等号各自需要两根火柴棍;
- 如果 A 不等于 B,则视 A+B=C 与 B+A=C 为不同的等式(A,B,C );
- 根火柴棍必须全部用上。
输入格式: 一个整数 。
输出格式: 一个整数,表示能拼成的不同等式的数目。
输入样例:
输出样例:
样例说明: 个等式为 、、、、、、、 、 。
#include<bits/stdc++.h>
using namespace std;
int hcb[10]={6,2,5,5,4,5,6,3,7,6};
int n;
int matches(int num)
{
int i,k=0;
for(i=num;i!=0;①)
② ;
if( ③ )
k+=hcb[0];
return k;
}
int main()
{
int i,j,count;
④;
cin>>n;
for(i=0;i<=1000;i++)
for(j=0;j<=1000;j++)
if( ⑤ )
count++;
cout<<count;
return 0;
}
(1) ① 处应填( )
{{ select(40) }}
i %= 10i /= 10i++i--
(2) ② 处应填( )
{{ select(41) }}
k + = hcb[i]k + = hcb[i / 10]k + = hcb[i / 10 % 10]k + = hcb[i % 10]
(3) ③ 处应填( )
{{ select(42) }}
num == 0num!=0num == nnum!=n
(4) ④ 处应填( )
{{ select(43) }}
count=1count=match(n)count=0count=n
(5) ⑤ 处应填( )
{{ select(44) }}
matches(i) + matches(j) + matches(i + j) + 6 == nmatches(i) + matches(j) + matches(i + j) + 3 == nmatches(i) + matches(j) + matches(i + j) + 4 == nmatches(i) + matches(j) + matches(i + j) + 5 == n