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

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

一.单项选择题

共15题,每题2分,共30分;每题有且仅有一个正确选项。

  1. 在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。 {{ select(1) }}
  • 二进制码
  • 八进制码
  • 十进制码
  • 智能拼音码
  1. 计算机的软件系统通常分为( )。 {{ select(2) }}
  • 硬件系统和软件系统
  • 高级软件和一般软件
  • 系统软件和应用软件
  • 军用软件和民用软件
  1. 关于软盘读写孔,正确的说法是( )。

{{ select(3) }}

  • 从该孔读信息
  • 从该孔写信息
  • 当该孔处于开状态时,不能删除盘中文件
  • 该孔没有作用
  1. 一棵二叉树的中序遍历为DGBAECHF,后序遍历为GDBEHFCA,则前序遍历是( )。

{{ select(4) }}

  • ABCDFGHE
  • ABDGCEFH
  • ACBGDHEF
  • ACEFHBGD
  1. 下列叙述中错误的是( )

{{ select(5) }}

  • 微机应避免置于强磁场之中
  • 微机使用时间不宜过长,而应隔几个小时关机一次
  • 微机应避免频繁关开,以延长其使用寿命
  • 微机应经常使用,不宜长期闲置不用
  1. 计算机网络最主要的优点是( )

{{ select(6) }}

  • 运算速度快
  • 共享资源
  • 精度高
  • 存储容量大
  1. 下列4个不同进制表示的数中,最大的一个数是( )。 {{ select(7) }}
  • ( 220.1 )₁₀
  • ( 11011011.1)₂
  • ( 334.1)₈
  • ( DC.1)₁₆
  1. 为了区分汉字与ASCII码,计算机中汉字编码的最高位为( )。

{{ select(8) }}

  • 1
  • 0
  • -1
  • 2
  1. 一般来说,TCP/IP的IP提供的服务是( )。

{{ select(9) }}

  • 运输层服务
  • 会话层服务
  • 表示层服务
  • 网络层服务
  1. 通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是( )。

    {{ select(10) }}

  • D/A
  • A/D
  • Modem
  • Codec
  1. 一个栈的输入顺序为1、2、3、4、5,下列序列中可能是栈的输出序列是( )。 {{ select(11) }}
  • 54312
  • 24135
  • 21543
  • 12534
  1. 不属于Internet的功能是( )。 {{ select(12) }}
  • 聊天
  • 远程教育
  • 查询资料
  • 传送能量
  1. 下列描述计算机病毒的特性中,( )不是正确的。

{{ select(13) }}

  • 潜伏性
  • 传染性
  • 高速性
  • 危害性
  1. 下面不属于网络操作系统的是( )。 {{ select(14) }}
  • UNIX
  • WINDOWS NT
  • NETWARE
  • DOS
  1. 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的是( )。 {{ select(15) }}
  • 不论何人、何地及发表与否的软件
  • 只有公开发表的软件
  • 只有单位发表的软件
  • 只有个人在国内公开发表的软件

二、阅读程序

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

(1)

#include<iostream>
using namespace std;
const int Maxn =10005;
int  n,b[Maxn];
inline void mergesort(int *a, int 1, int r)
{
	if(1 ==r) return;
	int  mid  =1+r>>1;
	mergesort(a,1, mid); 
	mergesort(a, mid+1,r);
	int  i  =1,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 = 1;i < = r;i+ +) 
		a[i] = b[i -1+ 1];
}

int a[Maxn];
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. 该算法中“int *a”没有传值。( ) {{ select(16) }}
  • 正确
  • 错误
  1. 该算法会换行。( ) {{ select(17) }}
  • 正确
  • 错误
  1. 该算法中mergesort函数时间复杂度为O(nlogn)。( ) {{ select(18) }}
  • 正确
  • 错误
  1. 如果输入为“5 4 3 9 7 8”则输出为3 4 7 8 9\n。( ) {{ select(19) }}
  • 正确
  • 错误
  1. 下面哪句与“ i==n ? '\n' : ' ' ”相同( ) {{ select(20) }}
  • i !=1 ? '\n' : ' '
  • " \n"[i==n]
  • " \n"[i!=n]
  • ' '
  1. 该算法的最劣复杂度与哪个排序算法相同( ) {{ select(21) }}
  • 快速排序
  • 选择排序
  • 计数排序
  • 堆排序

(2)

#include<iostream>
using namespace std;
int i,j,k,n,m,f[10010],p1,p2,p3;
int find(int k){
    if(f[k]==k) 
		return  k;
    return f[k]=find(f[k]);
}
int main()
{
    cin>>n>>m;
    for( i=1;i< =n;i+ +) 
		f[i]=i;
    for( i=1;i< =m;i++){
        cin>>p1>>p2>>p3;
        if(p1==1)
        	f[find(p2)]=find(p3);
        if(p1==2)
            if(find(p2)==find(p3))
				printf("Y\n");
            else
				printf("N\n");
    }
    return 0;
}
  1. 该算法中p1的作用是确定操作类型。( ) {{ select(22) }}
  • 正确
  • 错误
  1. 去掉for(i=1;i<=n;i++)f[i]=i;对该算法没有影响。( ) {{ select(23) }}
  • 正确
  • 错误
  1. 输入2 2 1 1 2 2 1 2输出为Y。( ) {{ select(24) }}
  • 正确
  • 错误
  1. 输入2 1 2 1 2输出为N。( ) {{ select(25) }}
  • 正确
  • 错误
  1. 该算法时间复杂度为( ) {{ select(26) }}
  • O(mlogn)
  • O(nm)
  • O(n+m)
  • O(nm²)
  1. 把return f[k]=find(f[k]);改成return find(f[k]);最差时间复杂度为( ) {{ select(27) }}
  • O(mlogn)
  • O(nm)
  • O(n+m)
  • O(nm²)

(3)

#include<iostream>
using namespace std;
int  t,x[100] ,a[100];
void work(int d, int i, int n)
{        
	int k;
	if( n= =1)
	{
        for(k=0;k<d;k++)
		    printf("%3d",a[k]);
		printf("\n");
    }
    else
    for(k=i;k<t;k++)
        if(n%x[k]==0)
        {
            a[d] =x[k];
            work(d+1,k,n/x[k]);
        }
}
int main( )
{
    int i,k,n;
    cin>>n;
    for( i=n;i>1;i-- )   
	if( n%i==0)   
		x[t++]=i;
    work(0,0,n);
}
  1. for(i=n;i>1;i--) if(n%i==0) x[t++]=i;作用是求出n的所有因数。 {{ select(28) }}
  • 正确
  • 错误
  1. 该程序的作用是对n进行质因数分解。( ) {{ select(29) }}
  • 正确
  • 错误
  1. printf("%3d",a[k]);中去掉3对程序没有影响。( ) {{ select(30) }}
  • 正确
  • 错误
  1. 去掉if(n%x[k]==0)对程序有影响。( ) {{ select(31) }}
  • 正确
  • 错误
  1. 如果输入为2,那么输出为( )

{{ select(32) }}

  • 2
  • 2 1
  • 1 2
  • 2 2
  1. 如果输入为72,那么输出的非回车字符有多少行( ) {{ select(33) }}
  • 14
  • 15
  • 16
  • 17

三、完善程序

单选题,除特殊说明外,每小题3分,共计30分。

(1)(坐标统计) 输入n个整点在平面上的坐标。对于每个点,可以控制所有位于它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)

#include<bits/stdc++.h>
using namespace std;
const int SIZE  =100;
int x[SIZE],y[SIZE],f[SIZE];
int n,i,j,max_f,ans;
int main()
{
	cin>>n;
	for( i=1;i< =n;i++) 
		cin>>x[i]>>y[i];
	max_f=0;
	for( i=1;i< =n;i++)
	{
		f[i]= [  ①  ] ;
		for(j=1;j< =n;j++)
		{
			if(x[j]<x[i]&& ②)
				[      ③      ];
		}    
		if(  ④ )
		{
			max_f=f[i];
			[   ⑤   ];
		}
	}
	for(i=1;i<=n;i++) 
		cout<<f[i]<<endl;
	cout<<ans<<endl;
	return 0;
}
  1. ①处应填() {{ select(34) }}
  • 0
  • 1
  • i
  • INT_MAX
  1. ②处应填() {{ select(35) }}
  • y[j]<=y[i]
  • y[j]<y[i]
  • y[j]>y[i]
  • y[j]>=y[i]
  1. ③处应填() {{ select(36) }}
  • ans=i
  • f[i]++
  • f[i]--
  • ans++
  1. ④处应填() {{ select(37) }}
  • (f[i] > max_f)
  • (f[i] >= max_f)
  • (f[i] < max_f)
  • (f[i] <= max_f)
  1. ⑤处应填() {{ select(38) }}
  • ans++
  • ans+= max_f
  • ans=i
  • ans= max_f

(2)(排列数) 输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。 例如:

输入:

3 2

输出:

1 2
1 3
2 1
2 3
3 1
3 2
#include<iostream>
#include<cstring>
using namespace std;
const int SIZE=25;
bool used[SIZE];
int data[SIZE];
int  n,m,i,j,k;
bool flag;
int main()
{
	cin>>n>>m;
	memset(used, false, sizeof(used));
	for( i=1;i< =m;i++)
	{
		data[i]=i;
		used[i]=true;
	}
	flag=true;
	while(flag)
	{
		for( i=1;i< =m-1;i++)
		cout<<data[i]<<" ";
		cout<<data[m]<<endl;
		flag=[      ①   ];
		for( i=m;i>=1;i--)
        {
      		[   ②   ];
            for(j=data[i]+1;j<=n;j++)
            if( !used[j])
            {
            	used[j]=true;
              	data[i]=[   ③   ];
            	flag=true;
             	break;
          	}
        	if(flag)
        	{
           		for(k=i+1;k<=m;k++)
            		for(j=1;j<=[④   ];j++)
            			if(!used[j])
                		{
               				data[k]=j;
               				used[j]=true;
               				break;
              			}
			        	[   ⑤   ];
     		}
		}
	}
   	return 0;
}
  1. ①处应填() {{ select(39) }}
  • false
  • true
  • 1
  • -1
  1. ②处应填( ) {{ select(40) }}
  • used[i]=true
  • data[i]=i
  • used[data[i]]=true
  • used[data[i]]=false
  1. ③处应填( ) {{ select(41) }}
  • j
  • i
  • true
  • false
  1. ④处应填( ) {{ select(42) }}
  • n
  • m
  • i
  • j
  1. ⑤处应填( ) {{ select(43) }}
  • return 0
  • exit
  • continue
  • break