NOIP信息学初赛模拟试题C

NOIP信息学初赛模拟试题C
NOIP信息学初赛模拟试题C

信息学初赛模拟试题(四)

一、选择题:(选出每题正确的答案代码,填在括号里,1—10题为单选题,每小题只有一个正确答案,11—20题为不定项选择题,每小题有一个或一个以上的正确答案,共20题,每题,共30分)

1、二进制数01100100转换成十六进制数是()。

A.32 B.64 C.128 D.100 E.256

2、操作系统是一类重要的系统软件,下面几个软件中,不属于系统软件的是()。A.Java B.MS-DOS C.Linux D.Windows7 E.Unix

3、计算机病毒的传染是以计算机运行和()为基础的,没有这两个条件,病毒是不会传染的。

A.编辑文稿 B.读写磁盘 C.编程序 D.扫描图画 E.打印

4、因特网不属于任何个人,也不属于任何组织。其中在网络知识这一块中有一个英文简写ISP,它的中文意思是()。

A.因特网连接 B.因特网使用 C.因特网设计 D.因特网服务提供者 E.信息传输5、Internet给我们提供了资源共享、浏览、检索信息和远程登录等多种服务,下面几个选项中用于远程登录的是()。

A.WWW B.TCP/IP C.Telnet D.E-mail E.FTP

6、IE是目前流行的浏览器软件,它的工作基础是解释执行用()语言书写的文件。A.VC B.HTML C.BASIC D.HTTP E.VB

7、给出3种排序:插入排序、冒泡排序、选择排序。这3种排序的时间代价分别是()。A.O(n)、O(n2)、O(logn) B.O(logn) 、O(n)、O(n2) C.O(n2)、O(n)、O(logn) D.O(n2)、O(n)、O(n) E.O(n2)、O(n2)、O(n2)

8、一棵完全二叉树的结点总数为18,其叶结点数为()。

A.7个 B.8个 C.9个 D.10个 E.11个

9、在流程图的符号中,菱形框一般作为()。

A.起始框 B.判断框 C.输入输出框 D.处理工作框 E.结速框

10、在解决计算机主机与打印机之间速度不匹配时通常设置一个打印数据缓冲区,主要将要输出打印的数据依次写入该缓冲区,而打印机从该缓冲区中取出数据打印。该缓冲区应该是一个()结构。

A.堆栈 B.数组 C.线性表 D.队列 E.链表

11、多媒体技术中的“多媒体”的含义主要是指如()等多种表达信息的形式。A.磁盘 B.音箱 C.显示器 D.声音 E.图像

12、下面有关计算机知识说明,正确的是()。

A.在WINDOWS98操作系统下,删除磁盘中的文件时都先存放在回收站中

B.FOXMAIL是用于收发电子邮件的工具

C.文件夹组织是一个有层次的树状结构,其中最顶层的是桌面

D.存储器具有记忆能力,其中的信息任何时候都不会丢失

E.为了提高软件的测试效率,应该选择发现错误的可能性大的测试数据

13、对按关键字排序好的线性表进行二分查找,该线性表适合的存储结构为()。A.链接存储 B.索引存储 C.散列存储 D.顺序存储 E.循环存取14、一个栈的输入顺序为1、2、3、4、5,下列序列中可能是栈的输出序列的是()。A.54312 B.24135 C.21543 D.12534 E.12345

15、评价一个算法的好坏有多种指标,下列是算法评价指标的是()。

A.正确性 B.运行时间 C.占用空间 D.迭代次数 E.简单性

16、下面描述用多维数组表示的数据结构的语句中,正确的是()。

A.多维数组存放的都是同一种类型的数据

B.多维数组各维的下标范围必须一样

C.多维数组在内存中的地址是连续的

D.多维数组中的下标不能是表达式

E.多维数组是随机存取的数据结构

17、若已知一个栈的入栈顺序1,2,3,…,n,其输出序列为P1,P2,P3,…,P n(它是输入序列的一个排列),则在输出序列中可能出现的情况是()。

A.P j

B.P k< P j

C.P j

D.P i

E.以上都不可能出现

18、线性表具有如下的结构特点:()

A.均匀性 B.单一性 C.简单性 D.无序性 E.有序性

19、下列关于数据结构的叙述中正确的是()。

A.数据结构是带有结构的数据元素的集合

B.线性表的线性存储结构优于链式存储结构

C.队列是限定仅在一端进行插入,在另一端进行删除的线性表

D.二维数组是其数据元素为线性表的线性表

E.图是一种非线性数据结构

20、任意一棵树均可惟一地转换成与它对应的二叉树。由树转换成的二叉树中,顶点N的左右子女分别是N在原树里对应顶点的()。

A.最左子顶点/最邻近的右兄弟

B.最右子顶点/最右的兄弟

C.最邻近的右兄弟/最左的兄弟

D.最邻近的左兄弟/最邻近的右兄弟

F.最邻近的右兄弟/最右的兄弟

二、问题解答:(共2题,每题5分,共10分)

1.光明中学开设数学、英语和信息学三个兴趣学习小组,其中数学小组30人,英语小组15人,信息学小组18人,参加三个小组总人数为50人,其中有3人同时参加3个小组,那么同时只参加两个小组的同学有多少人?

2.给出一组顶点(顶点值用A,B,C,D,E,F表示),其对应权值分别为2,3,1,7,8,4。请以A,B,C,D,E,F为叶子顶点构造一棵哈夫曼树,并求出它的最小带权路径长度WPL的值。

三、写出程序的运行结果(共4题,每题8分,共32分)

1.

#include

using namespace std;

int n;

int count(int n)

{

if(n==1) return 0;

else if(n%2==0)

return count(n/2)+1;

else

return count(n*3+1)+1; }

int main()

{

cin>>n;

cout<

return 0;

}

输入:99

输出:

2.

#include

using namespace std;

int main()

{

int i,j,k,s;

s=0;

for(i=3;i>=1;i--)

{

for(j=1;j<=3;j++)

{

k=0;

do

{

k=k+1;

s=s+k;

}while(k!=j);

}

s=s-(k+1);

}

cout<<"s="<

return 0;

}

输出:

3.

#include

using namespace std;

int main()

{

int a,b,n;

a=0;

b=0;

cin>>n;

do

{

a=a+1;

b=b+a;

}while(b

cout<

return 0;

}

输入:415377

输出:

4.

#include

using namespace std;

int main()

{

int m,n,i,p,k;

int r[200];

bool b;

m=6;n=2;

for(i=1;i<=m-1;i++)

r[i]=i+1;

r[m]=1;

i=0;

p=1;

b=true;

while(b)

{

i=i+1;

k=p;

p=r[p];

if(k==p)

{

cout<

b=false;

}

else if(i==n+1)

{

cout<

i=0;

p=r[p];

r[k]=p;

}

}

return 0;

}

输出:

四、完善程序(共2题,每题14分,共28分)

1.设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为XK,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于XK,而价值的和为最大。

【程序清单】

#include

#include

using namespace std;

int maxxk=400,maxm=20;

char w[400],u[400];

int f[20][20],n,xk;

void init()

{

int i;

memset(w,0,sizeof(w));

memset(u,0,sizeof(u));

cin>>n>>xk;

for(i=1;i<=n;i++)

[1]

}

void make()

{

int i,j;

for(i=1;i<=n;i++)

{

for(j=1;j<=w[i-1];j++)

f[i][j]=f[i-1][j];

for(j=w[i];i<=xk;j++)

if(f[i-1][j]>f[i][j-w[i]]+u[i])

[2]

else

[3]

}

}

void print()

{

char get[400];

int i,j;

memset(get,0,sizeof(get));

i= [4] ;

j= [5] ;

while(i>0)

if(f[i][j]==f[i-1][j])

i--;

else

{

j=j-w[i];

[6]

}

cout<<"n="<

cout<<"max worth="<< <

cout<<"no. ,weight: worth: get"<

for(i=1;i<=n;i++)

cout<

int main()

{

init();

make();

print();

return 0;

}

2.给定一个01串,请你找出长度介于a,b之间,重复出现次数最多的01串。

输入:a,b(0

由0,1组合的数列,由‘.’结尾。

输出:要求的串。

提示:本程序中将01序列转换为2进制数存取。

【程序清单】

#include

#include

using namespace std;

int main()

{

int i,j,s,k,a,b,max;

int m[10000],two[20],v[20];

char c;

for(i=1;i<=13;i++)

[1]

cin>>a>>b;

cin>>c;

s=1;

k=1;

while(c!='.')

{

s=s<<1+(c-48);

if( [2] )

s=(s-two[b+1])%two[b]+two[b];

m[s]=m[s]+1;

if(k

for(i=a;i<=k-1;i++)

[3]

k++;

cin>>c;

}

for(i=two[b];i<=two[b+1];i++)

if(m[i]>0)

for(j=a;j<=b-1;j++)

m[i%two[j]+two[j]]= [4] ;

max=0;

for(i=two[a];i<=two[b+1];i++)

if(m[i]>max) [5]

for(i=two[a];i<=two[b+1];i++)

if(m[i]==max)

{

j=0;

k=i;

do

{

j++;

v[j]=k%2;

[6]

}while( [7] );

while(j>0)

{

cout<

j--;

}

cout<

}

return 0;

}

相关主题
相关文档
最新文档