试卷 NOIP 2014 提高组初赛试题
NOIP 2014 提高组初赛试题
单项选择题
第 1 题    单选题

以下哪个是面向对象的高级语言(  ).

A.

汇编语言

B.

C++

C.

FORTRAN

D.

Basic

第 2 题    单选题

1 TB 代表的字节数量是( ).

A.

2 的 10 次方

B.

2 的 20 次方

C.

2 的 30 次方

D.

2 的 40 次方

第 3 题    单选题

二进制数 00100100 和 00010101 的和是( ).

A.

00101000

B.

 001010100

C.

01000101

D.

00111001

第 4 题    单选题

TCP 协议属于哪一层协议( ).

A.

应用层

B.

传输层

C.

网络层

D.

数据链路层

第 5 题    单选题

下列几个 32 位 IP 地址中,书写错误的是( ).

A.

162.105.128.27

B.

192.168.0.1

C.

256.256.129.1

D.

10.0.0.1

第 6 题    单选题

在无向图中,所有顶点的度数之和是边数的( )倍.

A.

0.5

B.

1

C.

2

D.

4

第 7 题    单选题

对长度为 n 的有序单链表,若检索每个元素的概率相等,则顺序检索到表中任一元素的平均检索长度为( ).

A.

B.

C.

D.

第 8 题    单选题

编译器的主要功能是( ).

A.

将一种高级语言翻译成另一种高级语言

B.

将源程序翻译成指令

C.

将低级语言翻译成高级语言

D.

将源程序重新组合

第 9 题    单选题

二进制数 111.101 所对应的十进制数是( ).

A.

5.625

B.

5.5

C.

6.125

D.

7.625

第 10 题    单选题

若有变量 int a, float x, y, 且 a=7,x=2.5,y=4.7, 则表达式 x+a%3*(int)(x+y)%2/4 的值大约是( ).

A.

2.500000

B.

2.750000

C.

3.500000

D.

0.000000

第 11 题    单选题

有以下结构体说明和变量定义,如图所示,指针 p,q,r 分别指向一个链表中的三个续结点。

struct node {   
 int data;  
 struct node *next;    
} *p,*q,*r;

现要将 q 和 r 所指结点的先后位置交换,同时要保持链表的连续,以下程序段中错误的是( )


A.

q->next = r->next; p-> next = r; r->next = q;

B.

p->next = r; q->next = r->next; r->next = q;

C.

q->next = r->next; r->next = q; p->next = r;

D.

r->next = q; q->next = r->next; p->next = r;

第 12 题    单选题

同时查找 2n 个数中的最大值和最小值,最少比较次数为( ).

A.

B.

4n−2

C.

3n−2

D.

2n−2

第 13 题    单选题

设 G 是有 6 个结点的完全图,要得到一颗生成树,需要从 G 中删去( )条边.

A.

6

B.

9

C.

10

D.

15

第 14 题    单选题

以下时间复杂度不是 O(n2) 的排序方法是( ).

A.

插入排序

B.

归并排序

C.

冒泡排序

D.

选择排序

第 15 题    单选题

以下程序实现了找第二小元素的算法。输入时 n 个不等的数构成的数组 S,输出 S 中第二小的数 SecondMin。在最坏的情况下,该算法需要做( )次比较。

if ( S[1] < S[2] ) {
	FirstMin= S[1];
	SecondMin= S[2];
} else {
	FirstMin= S[2];
	SecondMin= S[1];
}
for ( i = 3; i <= n; i++ )
	if ( S[i] < SecondMin )
		if ( S[i] < FirstMin ) {
			SecondMin= FirstMin;
			FirstMin= S[i];
		} else {
			SecondMin = S[i];
		}
A.

2n

B.

n-1

C.

2n-3

D.

2n-2

不定项选择题
第 16 题    多选题

若逻辑变量 A、C 为真,B、𝐷为假,以下逻辑运算表达式真的有( ).

A.

(B∨C∨D)∨D∧A

B.

 ((- A∧B)∨C)∧-B

C.

(A∧B)∨(C∧D∨-A)

D.

A∧(D∨-C)∧B

第 17 题    多选题

下列( )软件属于操作系统软件。

A.

Microsoft Word

B.

Windows XP

C.

Android

D.

Mac OS X

E.

Oracle

第 18 题    多选题

在 NOI 比赛中,对于程序设计题,选手提交的答案不得包含下列哪些内容( )。

A.

试图访问网络

B.

打开或创建题目规定的输入/输出文件之外的其他文件

C.

运行其他程序

D.

改变文件系统的访问权限

E.

读写文件系统的管理信息

第 19 题    多选题

以下哪些结构可以用来存储图( ).

A.

邻接矩阵

B.

C.

邻接表

D.

二叉树

第 20 题    多选题

下列各无符号十进制整数中,能用八位二进制表示的数有( )。

A.

296

B.

133

C.

256

D.

199

问题求解
第 21 题    填空题

有数字 1,1,2,4,8,8 所组成的不同的四位数的个数是_____.

第 22 题    填空题

如图所示,图中每条边上的数字表示该边的长度,则从 A 到 E 的最短距离是_____.

阅读程序写结果
第 23 题    填空题

#include <stdio.h>
int main() {
	int a, b, i, tot, c1, c2;
	scanf( "%d%d", &a, &b );
	tot = 0;
	for ( i = a; i <= b; i++ ) {
		c1= i / 10;
		c2= i % 10;
		if ( (c1 + c2) % 3 == 0 )
			tot++;
	}
	printf( "%d\n", tot );
	return(0);
}

输入:7 31

输出:_________

第 24 题    填空题

#include <stdio.h>
int fun( int n, int minNum, int maxNum ) {
	int tot, i;
	if ( n == 0 )
		return(1);
	tot = 0;
	for ( i = minNum; i <= maxNum; i++ )
		tot += fun( n - 1, i + 1, maxNum );
	return(tot);
}
int main() {
	int n, m;
	scanf( "%d%d ", &n, &m );
	printf( "%d\n", fun( m, 1, n ) );
	return(0);
}

输入: 6 3

输出:________

第 25 题    填空题

#include <stdio.h>
#include <string.h>
const intSIZE= 100;
const intLENGTH= 25;
/*
 * strcmp(a,b) <0:a的字典序小于b
 * strcmp(a,b) =0:a和b一样
 * strcmp(a,b) >0:a的字典序大于b
 */
int main() {
	chardict[SIZE][LENGTH + 1];
	intrank[SIZE];
	intind[SIZE];
	inti, j, n, tmp;
	scanf( "%d", &n );
	for ( i = 1; i <= n; i++ ) {
		rank [i]= i;
		ind[i]= i;
		scanf( "%s", dict[i] );
	}
	for ( i = 1; i < n; i++ )
		for ( j = 1; j <= n - i; j++ )
			if ( strcmp( dict[ind[j]], dict[ind[j + 1]] ) > 0 ) {
				tmp= ind[j];
				ind[j]= ind[j + 1];
				ind[j + 1]= tmp;
			}
	for ( i = 1; i <= n; i++ )
		rank[ind[i]] = i;
	for ( i = 1; i <= n; i++ )
		printf( "%d ", rank[i] );
	printf( "\n" );
	return(0);
}

输入:

7

aaa

aba

bbb

aaa

aaa

ccc

aa

输出:______

第 26 题    填空题

#include <cstdio>
const intSIZE = 100;
intalive[SIZE];
intn;
int next( int num ) {
	do {
		num++;
		if ( num > n )
			num = 1;
	} while ( alive[num] == 0 );
	return(num);
}
int main() {
	int m, i, j, num;
	scanf( "%d%d", &n, &m );
	for ( i = 1; i <= n; i++ )
		alive[i] = 1;
	num = 1;
	for ( i = 1; i <= n; i++ ) {
		for ( j = 1; j < m; j++ )
			num = next( num );
		printf( "%d ", num );
		alive[num] = 0;
		if ( i < n )
			num = next( num );
	}
	printf( "\n" );
	return(0);
}

输入: 11 3

输出:_________

完善程序
第 27-31 题    组合题

(双栈模拟数组)只使用两个栈结构 

stack1 和 stack2,模拟对数组的随机读取。作为栈结构,stack1 和 stack2 只能访问栈顶(最后一个有效元素)。栈顶指针 top1 和 top2 均指向栈顶元素的下一个位置。

输入第一行包含的两个整数,分别是数组长度 n 和访问次数 m,中间用单个空格隔开。

第二行包含 n 个整数,一次给出数组各项(数组下标从 0 到 a−1)。第三行包含 m 个整数,需要访问的数组下标。对于每次访问,输出对应的数组元素。

#include <stdio.h>
const intSIZE = 100;
intstack1[SIZE], stack2[SIZE];
inttop1, top2;
intn, m, i, j;
void clearStack() {
	int i;
	for ( i = top1; i < SIZE; i++ )
		stack1[i] = 0;
	for ( i = top2; i < SIZE; i++ )
		stack2[i] = 0;
}
int main() {
	scanf( "%d,%d", &n, &m );
	for ( i = 0; i < n; i++ )
		scanf( "%d", &stack1[i] );
	top1= ______ (1)______;
	top2= ______ (2)______;
	for ( j = 0; j < m; j++ ) {
		scanf( "%d", &i );
		while ( i < top1 - 1 ) {
			top1--;
			______( 3 ) ______;
			top2++;
		}
		while ( i > top1 - 1 ) {
			top2--;
			______( 4 ) ______;
			top1++;
		}
		clearstack();
		printf( "%d\n", stack1[______( 5 ) ______] );
	}
	return(0);
}

第 27 题 填空
第 28 题 填空
第 29 题 填空
第 30 题 填空
第 31 题 填空
第 32-36 题    组合题

(最大矩阵和)给出 M 行 N 列的整数矩阵,就最大的子矩阵和(子矩阵不能为空)。

输入第一行包含两个整数 M 和 N,即矩阵的行数和列数。之后 M 行,每行 N 个整数,描述整个矩阵。程序最终输出最大的子矩阵和。(第一空 2 分,其余 3 分,共 14 分)

第 32 题 填空
第 33 题 填空
第 34 题 填空
第 35 题 填空
第 36 题 填空
答题卡
单项选择题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
不定项选择题
问题求解
21 22
阅读程序写结果
完善程序
题目总数:28
总分数:100
时间:120分钟
QQ
微信