全国入门组 CSP-J 初赛模拟试题 (9)
一、单项选择题 (共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1) 关于CPU下面哪些说法是正确的? ()




查看答案
2) 在字长为16位的系统环境下,一个16位带附号整数的进制补码为1111111111101101其对应的十进制整数应该是( )




查看答案
3) 在计算机内部,用来传送、存储、加工处理的数据或指令(命令)都是以( )形式进行的。




查看答案
4) 排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪种排序算法不是稳定的? ( )




查看答案
5) 一棵6节点二叉树的中序遍历为DBAGECF,先序遍历为ABDCEGF,后序遍历为( )




查看答案
6) 应用快速排序的分治思想,可以实现一个求第K大数的程序。假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为()




查看答案
7) 若3个顶点的无权图G的邻接矩阵用数组存储为{{0,1,1),{1,0,1),{0,1,0)},假定在具体存储中顶点依次为:V1,V2,V3。关于该图,下面的说法哪个是错误的? ( )




查看答案
8) 2019年10月14 日是星期一,1978年10月14日是( )




查看答案
9) 表达式a*(b+c) d的后缀表达式是( )。




查看答案
10) 某算法计算时间表示为递推关系式:T(N)=N+T(N/2),该算法时间复杂度为()。




查看答案
11) 如果根结点的深度记为1,则一棵恰有201个叶子结点的二又树的深度不可能是( )。




查看答案
12) 对于序列“7,5,1,9,3,6,8,4",在不改变顺序的情况下,去掉( )会使逆序对的个数减少3。




查看答案
13) 某班有50名学生,每位学生发一张调查卡,上写a、b、c三本书的书名,将读过的书打V,结果统计数字如下:只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;读过a,b两本书的有4人;读过a、c两本书的有2人;读过b,c两本书的有3人,则读过a的人数是( )。




查看答案
14) 一家3三口人,恰有两个人生日在同一天的概率是() . (假设每年都是365天)




查看答案
15) 字符申"abeab"本质不同的子串(不包含空串)个数( )




查看答案
二、阅读程序 (程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题3分,共计40分)
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[4], b[4];
int i, j, tmp;
for(i=0; i<4; i++)
scanf("%d", &b[i]);
for(i=0; i<4; i++) {
a[i]= 0;
for(j=0; j<=i; j++) {
a[i] += b[i];
b[a[i]%4] += a[j];
}
}
tmp= 1;
for(i=0; i<4; i++) {
a[i]%= 10;
b[i]%= 10;
tmp *= a[i]+b[i];
}
printf("%d\n",tmp);
return 0;
}
16) 若输入的b数组都是奇数,程序运行到第15行时,b[2]没有发生变化。( )

查看答案
17) 若将第11行和第12行交换,程序的结果可能发生变化。( )

查看答案
18) 当程序运行到第15行时,此时a数组的值等于b数组的值。( )

查看答案
19) 若输入b数组都是偶数,当程序运行到第15行时,a数组中的值也全部为偶数。( )

查看答案
20) 该程序能输出的最大结果为( )。




查看答案
21) 若输入2 3 5 7,输出的结果为( )。




查看答案
#include <ctype.h>
#include <stdio.h>
void expand(char s1[], char s2[])
{
int i,j,a,b,c;
j=0;
for(i=0; (c=s1[1])!='\0'; i++)
if (c=='-')
{
a=s1[i-1];b=s1[i+1];
if (isalpha(a) && isalpha(b)||isdigit(a) && isdigit(b))
{
j--;
do
s2[j++]= a++;
while (tolower(a) <tolower(s1[i+1]));
}
else s2[j++]=c;
} else s2[j++]=c;
s2[j] = '\0';
}
main()
{
char s1[100],s2[300];
printf("inputs1:");
gets(s1);
expand(s1, s2);
printf("%s\n",s2 );
}
函数isalpha(a)用于判断字符a是否为字母,isigit(b)用于判断字符b是否为数字,如果是,返回1,否则返回0。
函数tlower(a)的功能是当字符a是大写字母,返回其小写字母,其余情况不变
规定:输入的字符串只包含大小写字母,数字和“-”,且保证“-”不会出现在首位和末位。
22) 若输入的字符串不包含“-”号,则输出的字符串和输入相同。( )

查看答案
23) 若输入的字符串包含“-”号,输出的字符串长度可能与输入的相同。( )

查看答案
24) 若存在一个字符,只存在于s2字符串中而不存在于sl字符串中,则s1字符串中一定存在“-”号。( )

查看答案
25) 若存在一个字符,只存在于s2字符串中而不存在于sl字符串中,则该字符一定不可能是大写字母。( )

查看答案
26) 若输入6个字符,最多输出( )个字符。




查看答案
27) 若输出500个字符,至少输入( )个字符。




查看答案
#include<iostream>
#include<cstring>
#include<cstdio>
#define N 500+10
using namespace std;
int a[N],n;
int main()
{
cin>> n;
for(int i=1; i<=n; ++i) cin>>a[i];
for(int i=1; i<=n; ++i)
{
int tmp= i;
for(int j=i+1; j<=n; ++j)
if(a[j]<a[tmp]) tmp=j;
swap(a[i],a[tmp]);
}
for(int i=1; i<=n; ++i) cout<<a[i]<<' ';
cout<< endl;
return 0;
}
28) 上述代码实现了对一个长度为n的序列进行排序。( )

查看答案
29) 去掉头文件“#include<cstdio>”后程序仍然正常编译运行。( )

查看答案
30) 去掉“using namespce std;”后程序仍然正常编译运行。( )

查看答案
31) 我们将上述算法称为( )




查看答案
32) 上述代码的时间复杂度为( )




查看答案
33) 若输入数据为:5 3 2 1 5 4 则if(a[j]<a[tmp])这句话中的条件会成立( )次(即后面的 tmp=j会被执行多少次)




查看答案
三、完善程序 (单选题,每题3分,共计30分)
(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3:数列为1,2,3,-5,0,7,8时,输出16和7。
#include <iostream>
using namespace std;
int a[101];
int n, i, ans, len, tmp, beg, end;
int main() {
cin>>>n;
for(i=1; i<=n; i++)
cin>>a[i];
tmp= 0;
ans=0;
len = 0;
beg=___(1)___;
for (i=1; i<=n; i++) {
if(tmp + a[i]> ans) {
ans= tmp + a[i];
len=i-beg;
} else if(___(2)___)&& i-beg>len) {
len=i-beg;
}
if (tmp+a[i]___(3)___) {
beg=___(4)___;
tmp= 0;
} else
___(5)___;
}
cout<< ans<<" "<< len << endl;
return 0;
}
34) ①处应填( )




查看答案
35) ②处应填( )




查看答案
36) ③处应填( )




查看答案
37) ④处应填( )




查看答案
38) ⑤处应填( )




查看答案
(棋盘覆盖问题)在一个$2^k \times 2^k $个方格组成的棋盘中恰有一个方格与其他方格不同(如图
中标记为-1的方格),称之为特殊方格。现用L形(占3个小方格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重叠,于是,用到的纸片数恰好是$(4^k-1)/3$。在下面给
出的覆盖方案例子中,k=2,相同的3个数字构成一个纸片。下面给出的程序使用分治法设计的,将棋盘一分为四,依次处理左上角、右上角 、左下角、右下角,递归进行。
请将程序补充完整。
例:小鹏STEM题库
-1为特殊方格的位置,其他数字表示L形方格放置的顺序
#include<bits/stdc++.h>
using namespace std ;
int board[65][65],tile;//tile 为纸片编号
void chessboard(int tr, int tc,int dr,int dc,int size)
{ /* dr,dc依次为特殊方格的行、列号 */
int t, s;
if(size==1)
return ;
tile++;
s= size/2;
if(___(1)___)
chessboard(tr,tc,dr,dc,s);
else{
bourd[tr+s-1][tc+s-1]=t;
___(2)___;
}
if(dr<tr+s&&dc<tc+s)
chessboard(tr,tc+s,dr,dc,s);
else{
bourd[tr+s-1][tc+s]=t;
___(3)___;
}
if(dr>=tr+s&&dc<tc+s)
chessboard(tr + s, te, dr, dc,s);
else{
board[tr+s][te+s-1]= t;
___(4)___;
}
if(dr>= tr+ s&& dc>= tc+s)
chessboard( tr + s, tc + s, dr, dc, s );
else{ board[tr+ s][tc+s]= t;
___(5)___; }
}

void prtl(int b[][65],int n)
{
int i, j;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
cout<< setw(3)<< b[i][j];
cout << endl;
}
}

int main(){
int size, dr, dc;
cout << "input size(4/8/16/64):"<<endl;
cin>> size;
cout<< "input the position of special block(x,y):"<< endl;
cin>> dr>> dc;
board[dr][dc]=-1;
tile++;
chesbord(1,1,dr,dc, size);
prl(board, size);
}
39) ①处应填( )




查看答案
40) ②处应填( )




查看答案
41) ③处应填( )




查看答案
42) ④处应填( )




查看答案
43) ⑤处应填( )




查看答案
增值服务权益

1. 试题参考答案和解析查看;
2. 试卷模拟测试;
3. 随机组题测试;
4. 试卷PDF文件下载;
5. 赠送等值学豆;

  订阅  
学员服务
教研服务

小鹏STEM教研服务系统是面向教师的一站式教研、教学和知识管理系统。
订阅服务后,所有题目均可无限制查看和服务。

  详情