#4449. 普及组 CSP-J 第3套初赛模拟试题
普及组 CSP-J 第3套初赛模拟试题
一.单项选择题
共15题,每题2分,共30分;每题有且仅有一个正确选项。
- 在网络上,若某台电脑的设备及数据可由其他电脑共享,这台电脑称为( )。 {{ select(1) }}
- 个人计算机
- 副机
- 服务器
- 主机
- 下列抢占不同数制表示的数中,最大的一个数是( )。 {{ select(2) }}
- 十进制数220.1
- 二进制数11011011.1
- 八进制数334.1
- 十六进制数DC.1
- 字母在计算机中是以编码形式表示的,通用的编码是ASCⅡ码,字母“A”的ASCⅡ码是65,字母“E”的ASCII码是( )。
{{ select(3) }}
- 05
- 52
- 69
- 68
- 连接到internet 上的每台计算机都必须有1个( )地址,该地址共含( )个字节。前面若干个字节表示( );后面若干字节表示( )。为了避免使用数字,人们经常用字母替代,这些名字称为( )。
{{ select(4) }}
- IP、四、网络地址、计算机地址、网
- 网络、四、IP地址、网内计算机地址、域名
- 网络、不超过十、网页、网址、网名
- IP、四、网络地址、网内计算机地址、域名
- 在TCP/IP协议中,TCP和IP分别提供什么服务( )。
{{ select(5) }}
- 传输层、网络层
- 链路层、网络层
- 传输层、会话层
- 物理层、链路层
- 一棵树T有2个度数为2的结点、有1个度数为3的结点、有3个度数为4的结点,那么树T有( )个树叶。
{{ select(6) }}
- 14
- 6
- 18
- 7
- 在一个图中,所有顶点的度数之和等于所有边数的( )倍。 {{ select(7) }}
- 1/2
- 1
- 2
- 4
- 下列IP地址中正确的是( )。
{{ select(8) }}
- 202.300.12.4
- 192.168.0.3
- 100:128:35:91
- 111-102-35-21
- 设有100个顶点,利用二分法查找时,最大比较次数是( )。
{{ select(9) }}
- 50
- 10
- 25
- 7
-
一棵二叉树的中序遍历序列为:DGBAECHF,后序遍历序列为:GDBEHFCA,则前序遍历的序列是( )。
{{ select(10) }}
- ABCDFGHE
- ABDGCEFH
- ACBGDHEF
- ACEFHBGD
- 下面合法的电子邮件地址是( )。 {{ select(11) }}
- http://ybw.online.sh.cn
- ftp://ybw.online.sh.cn
- ybw@online.sh.cn
- http.ybw.online.sh.cn
- Internet给我们提供了资源共享、浏览、检索信息和远程登录等多种服务,下面几个选项中用于远程登录的是( )。 {{ select(12) }}
- Telnet
- E_mail
- TCP/IP
- WWW
- 在数据结构中,链表是()。
{{ select(13) }}
- 顺序存储的线性表结构
- 非顺序存储的线性表结构
- 非顺序存储的非线性表结构
- 顺序存储的非线性表结构
- C++程序运行时,是在哪种存储器中进行的?( ) {{ select(14) }}
- 硬盘
- RAM
- ROM
- CACHE
- 当A>=B&&B>=C的取值为真时,表达式A>C||B==C的值( )。 {{ select(15) }}
- 为真
- 无法判定结果的真假
- 也有可能为假
- 只有当A、B、C都相等时才为真
二、阅读程序
程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题4分,共计40分
(1)
#include<iostream>
using namespace std;
int i,j,n;
int x[101],y[101];
int main()
{
cin>>n;
for( i=1;i<=n;i++) cin>>x[i];
for( i=1;i<=n-1;i++)
for(j=i+1;j< =n;j++)
if( x[i]>x[j] )
y[j]++ ;
else if( x[i]<x[j] )
y[i]++ ;
for( i=1;i< =n;i++)
printf("%5d_",y[i]);
cout<<endl;
return 0;
}
- 把第13行与第15行互换位置,结果不会改变。( ) {{ select(16) }}
- 正确
- 错误
- 第14行把if(x[i]<x[j])删掉效果一样( ) {{ select(17) }}
- 正确
- 错误
- 第11行把i+1改成1,数组y每个元素的值增加1倍。( ) {{ select(18) }}
- 正确
- 错误
- 数组y[i]中存的是x[i]在数列中从大到小的次序。( ) {{ select(19) }}
- 正确
- 错误
- 此程序的时间复杂度是( )。 {{ select(20) }}
- O(log n)
- O(n log n)
- O(n²)
- O(n)
- 此程序如果n输入4,然后输入2 4 1 3,输出结果是( )。 {{ select(21) }}
- 1 2 3 4
- 2 0 3 1
- 4 3 2 1
- 1 3 0 2
(2)
#include<iostream>
using namespace std;
int n ,i ,x ;
int d[11];
int main()
{
cin>>n;
for( i=1;i<=n;i++ )
{
cin>>x;
d[x] = d[x]+ 1 ;
}
d[0] =0;
for( i=1;i< =10;i++)
d[i] =d[i- 1] +d[i];
for( i=1;i< =10;i++)
if(d[i] !=d[ i- 1])
printf("%3d:%4d_",i,d[i-1]+1);
return 0;
}
- 输入的x值应在[0,n-1]的范围内。( ) {{ select(22) }}
- 正确
- 错误
- 把第12行改成“d[x]++”,不影响程序运行结果。( ) {{ select(23) }}
- 正确
- 错误
- 对任意在[1,9]之间的数i,都有d[i-1]<d[i]<d[i+1]。( ) {{ select(24) }}
- 正确
- 错误
- 把第18行改成“if(d[i]>d[i-1])”,程序运行的结果会发生改变。( ) {{ select(25) }}
- 正确
- 错误
- 输入n=10后,接着输入: 1 3 4 3 5 2 4 3 5 2后,程序输出结果为( )。 {{ select(26) }}
- 1:1 2:2 3:3 4:2 5:3
- 1:1 2:2 3:4 4:7 5:9
- 1:0 2:1 3:2 4:1 5:2
- 1:1 2:2 3:3 4:4 5:5
- 把程序第19行改成“printf("%3d",i);”后,输入 n=10 后,接着输入:1 3 4 1 5 4 4 3 5 1后,程序输出结果为( )。 {{ select(27) }}
- 1 2 3 4 5
- 3 2 3 2
- 4 3 4 3
- 1 3 4 5
(3)
#include<iostream>
using namespace std;
int j,i,m;
int a[10] ;
int main()
{
for( i=2;i< =6;i++)
a[i]=i+1 ;
do
{
m=2;
for( i=3;i< =6;i++)
if( a[m]>a[i]) m=i;
a[m]=a[m]+m;
m=1 ;
for( i=2;i< =5;i++)
for(j=i+1;j<=6;j++)
if(a[i]< a[j]) m=0;
}while(m==0);
printf( "%d",a[2] ) ;
return 0;
}
- 程序结束时,a[2]的值一定是数组a中的最大值。( ) {{ select(28) }}
- 正确
- 错误
- 第21行 “m==0” 成立时,数组 a[i] (2≤i≤6) 从大到小排序。( ) {{ select(29) }}
- 正确
- 错误
- .程序输出时,a数组满足:对任意的2≤i<6,有a[i]>a[i+1]。( ) {{ select(30) }}
- 正确
- 错误
- 删除第16行代码“m=1”程序结果会发生改变。( ) {{ select(31) }}
- 正确
- 错误
- 程序的输出结果为( )。
{{ select(32) }}
- 58
- 59
- 61
- 60
- 此程序的时间复杂度是( )。 {{ select(33) }}
- O(n³)
- O(nlogn)
- O(n²)
- O(n)
三、完善程序
单选题,除特殊说明外,每小题3分,共计30分。
(1) 菲波拉契数列为1,1,2,3,5,8,13,21,⋯,其元素产生的规则是前两个数为1,从第三个数开始每个数等于它前面两个数之和。已知任意一个正整数可以表示为若干个互不相同的菲波拉契数之和。例如:36=21+13+2。
下面的程序是由键盘输入一个正整数n,输出组成n的互不相同的菲波拉契数。
算法说明:
(1)寻找小于等于n的最大菲波拉契数a,并以a作为组成n的一个数。
(2)若n≠a,则以n-a作为n的新值,重复步骤(1)。若a=n,则结束。
#include<bits/stdc++.h>
using namespace std;
int n;
bool first;
int find(int n)
{
int a ,b ,c;
a=1;b=1 ;
do
{
c=a+b;
( ① );
}while(b)
if( ② )
return b;
else
( ③ );
}
void p(int n)
{
int a;
a=find(n);
if(first)
{
first=false;
}else
( ④ );
if( a )
}
int main()
{
cin>>n;
first=true;
printf( "%5d =",n);
p(n);
cout<<endl;
return 0;
}
- ①处应填() {{ select(34) }}
- a=c ; b=a
- a=b ; b=c
- ②处应填() {{ select(35) }}
- b==n
- b<n
- a==n
- a<n
- ③处应填() {{ select(36) }}
- return c
- return b
- return a+b
- return a
- ④处应填() {{ select(37) }}
- printf("%4d",a)
- printf("+%4d",a)
- printf("%4d",b)
- printf("+%4d",b)
- ⑤处应填() {{ select(38) }}
- p(a)
- p(b)
- p(n-a)
- p(n-b)
(2) 现在政府计划在某个区域的城市之间建立高速公路,以使得其中任意两个城市之间都有直接或间接的高速公路相连。费用为每千米为一个单位价格,求最小费用。
输入:n(n<=100,表示城市数目)。
接下来n行,每行两个数xi, yi,表示第i个城市的坐标。(单位:千米)。
输出:最小费用(保留2位小数)。
程序如下:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=101;
struct tcity
{
float x,y;
};
tcity c[maxn];
float d[maxn][maxn],a, minf;
int p[maxn],n,i,j,k;
int main()
{
cin>>n;
for( i=1 ;i< =n;i++)
cin>>c[i]. x>>c[i]. y;
for( i=1;i< =n;i++)
for(j=1;j< =n;j++)
d[i][j]=( ① );
p[1]=0;
for(i=2;i<=n;i++)
( ②);
for(i=1;i<=n-1;i++)
{
minf=1E10;
for(j=1;j< =n;j++)
{
if( ③ )
{
minf =d[p[j]][j];
( ④ )
}
}
a=a+d[p[k]][k];
p[k]=0;
for(j=1;j<=n;j++)
if( ⑤ )p[j]=k;
}
printf( "%0.2f",a) ;
return 0;
}
- ①处应填() {{ select(39) }}
- sqrt( (c[i].x-c[i].y) * (c[i].x-c[i].y) + (c[j].x-c[j].y) * (c[j].x-c[j].y) )
- sqrt( (c[i].x-c[j].x) * (c[j].x-c[i].x) + (c[i].y-c[j].y) * (c[j].y-c[i].y) )
- sqrt( (c[i].x-c[i].x) * (c[i].x-c[j].x) + (c[i].y-c[j].y) * (c[i].y-c[j].y) )
- sqrt( (c[i].x-c[i].y) * (c[j].x-c[j].y) + (c[i].x-c[i].y) * (c[j].x-c[j].y) )
- ②处应填( ) {{ select(40) }}
- p[i]=1;
- p[i]=0;
- p[n-i]=0;
- p[n-i]=0;
- ③处应填( ) {{ select(41) }}
- p[j]==0 && d[p[j]][j]< minf
- p[j]!=0 && d[p[j]][j]< minf
- p[j]==0 || d[p[j]][j]< minf
- p[j]!=0 || d[p[j]][j]< minf
- ④处应填( ) {{ select(42) }}
- k=minf;
- k=0;
- k=i;
- k=j ;
- ⑤处应填( ) {{ select(43) }}
- d[p[j]][j] > d[k][j]
- d[p[j]][j] < d[k][j]
- d[p[i]][j] > d[k][j]
- d[p[i]][j] < d[k][j]