#3726. 普及组 CSP-J 第 3 套初赛模拟试题

普及组 CSP-J 第 3 套初赛模拟试题

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

1. 在网络上,若某台电脑的设备及数据可由其他电脑共享,这台电脑称为( ){{ select(1-1) }}

  • 个人计算机
  • 副机
  • 服务器
  • 主机

2. 下列抢占不同数制表示的数中,最大的一个数是( ){{ select(1-2) }}

  • 十进制数 220.1
  • 二进制数 11011011
  • 八进制数 334.1
  • 十六进制数 DC.1

3. 字母在计算机中是以编码形式表示的,通用的编码是 ASCII 码,字母“A”的 ASCII 码是 65,字母“E”的 ASCII 码是( ){{ select(1-3) }}

  • 05
  • 52
  • 69
  • 68

4. 连接到 internet 上的每台计算机都必须有 1 个( )地址,该地址共含( )个字节。前面若干个字节表示( );后面若干字节表示( )。为了避免使用数字,人们经常用字母替代,这些名字称为( )。( ){{ select(1-4) }}

  • IP、四、网络地址、计算机地址、网名
  • 网络、四、IP 地址、网内计算机地址、域名
  • 网络、不超过十、网页、网址、网名
  • IP、四、网络地址、网内计算机地址、域名

5. 在 TCP/IP 协议中,TCP 和 IP 分别提供什么服务( ){{ select(1-5) }}

  • 传输层、网络层
  • 链路层、网络层
  • 传输层、会话层
  • 物理层、链路层

6. 一棵树 T 有 2 个度数为 2 的结点、有 1 个度数为 3 的结点、有 3 个度数为 4 的结点,那么树 T 有( )个树叶。( ){{ select(1-6) }}

  • 14
  • 6
  • 18
  • 7

7. 在一个图中,所有顶点的度数之和等于所有边数的( )倍。( ){{ select(1-7) }}

  • 1/2
  • 1
  • 2
  • 4

8. 下列 IP 地址中正确的是( ){{ select(1-8) }}

  • 202.300.12.4
  • 192.168.0.3
  • 100;128;35;91
  • 111-102-35-21

9. 设有 100 个顶点,利用二分法查找时,最大比较次数是( ){{ select(1-9) }}

  • 50
  • 10
  • 25
  • 7

10. 一棵二叉树的中序遍历序列为:DGBAECHF,后序遍历序列为:GDBEHFCA,则前序遍历的序列是( ){{ select(1-10) }}

  • ABCDFGHE
  • ABDGCEFH
  • ACBGDHEF
  • ACEFHBGD

11. 下面合法的电子邮件地址是( ){{ select(1-11) }}

  • http://ybw.online.sh.cn
  • ftp://ybw.online.sh.cn
  • ybw@online.sh.cn
  • http.ybw.online.sh.cn

12. Internet 给我们提供了资源共享、浏览、检索信息和远程登录等多种服务,下面几个选项中用于远程登录的是( ){{ select(1-12) }}

  • Telnet
  • E-mail
  • TCP/IP
  • WWW

13. 在数据结构中,链表是( ){{ select(1-13) }}

  • 顺序存储的线性表结构
  • 非顺序存储的线性表结构
  • 非顺序存储的非线性表结构
  • 顺序存储的非线性表结构

14. C++ 程序运行时,是在哪种存储器中进行的?( ){{ select(1-14) }}

  • 硬盘
  • RAM
  • ROM
  • CACHE

15. 当 A>=B && B>=C 的取值为真时,表达式 A>C||B==C 的值( ){{ select(1-15) }}

  • 为真
  • 无法判定结果的真假
  • 也有可能为假
  • 只有当 A、B、C 都相等时才为真

二、阅读程序(程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题每题 1.5 分,选择题每题 4 分,共计 40 分)

(一)

#include<iostream>
#include<cstdio>
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;
}

判断题

16. 把第 13 行与第 15 行互换位置,结果不会改变。( ){{ dropdown(2-1)[√, ×] }}(1 分)

17. 第 14 行把 if( x[i]<x[j] ) 删掉效果一样。( ){{ dropdown(2-2)[√, ×] }}(1 分)

18. 第 11 行把 i+1 改成 1,数组 y 每个元素的值增加 1 倍。( ){{ dropdown(2-3)[√, ×] }}

19. 数组 y[i] 中存的是 x[i] 在数列中从大到小的次序。( ){{ dropdown(2-4)[√, ×] }}

选择题

20. 此程序的时间复杂度是( ){{ select(2-5) }}

  • O(log n)
  • O(n log n)
  • O(n^2)
  • O(n)

21. 此程序如果 n 输入 4,然后输入 2 4 1 3,输出结果是( ){{ select(2-6) }}

  • 1 2 3 4
  • 2 0 3 1
  • 4 3 2 1
  • 1 3 0 2

(二)

#include<iostream>
#include<cstdio>
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;
}

判断题

22. 输入的 x 值应在 [0,n-1] 的范围内。( ){{ dropdown(2-7)[√, ×] }}(1 分)

23. 把第 12 行改成 d[x]++,不影响程序运行结果。( ){{ dropdown(2-8)[√, ×] }}(1 分)

24. 对任意在 [1,9] 之间的数 i,都有 d[i-1]<d[i]<d[i+1]。( ){{ dropdown(2-9)[√, ×] }}

25. 把第 18 行改成 if(d[i]>d[i-1]),程序运行的结果会发生改变。( ){{ dropdown(2-10)[√, ×] }}

选择题

26. 输入 n=10 后,接着输入 1 3 4 3 5 2 4 3 5 2 后,程序输出结果为( ){{ select(2-11) }}

  • 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

27. 把程序第 19 行改成 printf("%3d",i); 后,输入 n=10 后,接着输入 1 3 4 1 5 4 4 3 5 1 后,程序输出结果为( ){{ select(2-12) }}

  • 1 2 3 4 5
  • 3 2 3 2
  • 4 3 4 3
  • 1 3 4 5

(三)

#include<iostream>
#include<cstdio>
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;
}

判断题

28. 程序结束时,a[2] 的值一定是数组 a 中的最大值。( ){{ dropdown(2-13)[√, ×] }}

29. 第 21 行 m==0 成立时,数组 a[i](2≤i≤6) 从大到小排序。( ){{ dropdown(2-14)[√, ×] }}

30. 程序输出时,a 数组满足:对任意的 2≤i<6,有 a[i]>a[i+1]。( ){{ dropdown(2-15)[√, ×] }}

31. 删除第 16 行代码 m=1 程序结果会发生改变。( ){{ dropdown(2-16)[√, ×] }}

选择题

32. 程序的输出结果为( ){{ select(2-17) }}

  • 58
  • 59
  • 61
  • 60

33. 此程序的时间复杂度是( ){{ select(2-18) }}

  • O(n³)
  • O(n log n)
  • O(n²)
  • O(n)

三、完善程序(单选题,每小题 3 分,共计 30 分)

(一)(菲波拉契数列)

菲波拉契数列为 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<iostream>
#include<cstdio>
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<n);
    if( ② )
        return  b;
    else
        ( ③ );
}
void p(int n)
{
    int a;
    a=find(n);
    if(first)
    {
        printf("%4d",a);
        first=false;
}else
    ( ④ );
if(a<n) ( ⑤ );
}
int main()
{
    cin>>n;
    first=true;
    printf("%5d = ",n);
    p(n);
    cout<<endl;
    return 0;
}

34. ① 处应填( ){{ select(3-1) }}

  • a=c;b=a
  • a=b;b=c
  • a==c;b==a
  • a==b;b==c

35. ② 处应填( ){{ select(3-2) }}

  • b==n
  • b<n
  • a==n
  • a<n

36. ③ 处应填( ){{ select(3-3) }}

  • return c
  • return b
  • return a+b
  • return a

37. ④ 处应填( ){{ select(3-4) }}

  • printf(" %4d",a)
  • printf(" + %4d",a)
  • printf(" %4d",b)
  • printf(" + %4d",b)

38. ⑤ 处应填( ){{ select(3-5) }}

  • p(a)
  • p(b)
  • p(n-a)
  • p(n-b)

(二)(最小费用公路网)

现在政府计划在某个区域的城市之间建立高速公路,以使得其中任意两个城市之间都有直接或间接的高速公路相连。费用为每千米为一个单位价格,求最小费用。

输入:n(n≤100,表示城市数目)。接下来 n 行,每行两个数 xi,yi,表示第 i 个城市的坐标。(单位:千米)。输出:最小费用(保留 2 位小数)。程序如下:

#include<iostream>
#include<cstdio>
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;
}

39. ① 处应填( ){{ select(3-6) }}

  • 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[j].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[i].x-c[j].y)+(c[i].x-c[i].y) * (c[j].x-c[j].y));

40. ② 处应填( ){{ select(3-7) }}

  • p[i]=1;
  • p[i]=0;
  • p[n-i]=0;
  • p[n-i]=0;

41. ③ 处应填( ){{ select(3-8) }}

  • 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

42. ④ 处应填( ){{ select(3-9) }}

  • k=minf;
  • k=0;
  • k=i;
  • k=j;

43. ⑤ 处应填( ){{ select(3-10) }}

  • 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]
难度 未评定
通过率 10%
尝试 10
通过 1
ID
3726
类型
客观题
上传者