选手注意:
第二十一届全国青少年信息学奥林匹克联赛初赛
普及组 C++语言试题
竞赛时间:2015 年 10 月 11 日 14:30〜16:30
•试题纸共有 7 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写在试题纸上的 一律无效。
•不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共 20 题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项)
1. 1MB 等于( )。
A. 1000 字节 B. 1024 字节 C.1000 X 1000 字节 D. 1024 X 1024 字节
2. 在 PC 机中,PENTIUM (奔腾)、酷睿、赛扬等是指( )。
A.生产厂家名称 B.硬盘的型号 C. CPU 的型号 D.显示器的型号
3. 操作系统的作用是( )。
A.把源程序译成目标程序 B.便于进行数据管理
C. 控制和管理系统资源 D.实现硬件之间的连接
4. 在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。
A. 二进制码 B.八进制码 C.十进制码 D.智能拼音码
5. 下列说法正确的是( )。
A. CPU 的主要任务是执行数据运算和程序控制
B. 存储器具有记忆能力,其中信息任何时候都不会丢失 C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同 D. 个人用户只能使用 Wifi 的方式连接到 Internet
6. 二进制数 00100100 和 00010100 的和是( )。
A. 00101000 B. 01000001 C. 01000100 D. 00111000
7. 与二进制小数 0.1 相等的十六进制数是( )
A. 0.8 B. 0.4 C. 0.2 D. 0.1
8. 所谓的“中断”是指( )。
A. 操作系统随意停止一个程序的运行
B. 当出现需要时,CPU 暂时停止当前程序的执行转而执行处理新情况的过程
C. 因停机而停止一个程序的运行
D. 电脑死机
9. 计算机病毐是( )。
A. 通过计算机传播的危害人体健康的一种病毒
B. 人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合
C. 一种由于计算机元器件老化而产生的对生态环境有害的物质
D. 利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒
10. FTP 可以用于( ) 。
A.远程传输文件 B.发送电子邮件 C.浏览网页 D.网上聊天
11. 下面哪种软件不属于即时通信软件( )。
A. QQ B. MSN C.微信 D. P2P
12. 6 个顶点的连通图的最小生成树,其边数为( )。
A. 6 B. 5 C. 7 D. 4
13. 链表不具备的特点是( )。
A. |
可随机访问任何一个元素 |
B. |
插入、删除操作不需要移动元素 |
C. |
无需事先估计存储空间大小 |
D. |
所需存储空间与存储元素个数成正比 |
1 / 6
14. 线性表若采用链表存储结构,要求内存中可用存储单元地址( )
A.必须连续 B.部分地址必须连续 C. 一定不连续 D.连续不连续均可
15. 今有一空栈 S,对下列待进栈的数据元素序列 a,b,c,d,e,f 依次进行进栈,进栈,出栈,进栈,进 栈,出栈的操作,则此操作完成后,栈 S 的栈顶元素为( )。
A. f B. c C. a D. b
16. 前序遍历序列与中序遍历序列相同的二叉树为( )。
A. 根结点无左子树的二叉树
B. 根结点无右子树的二叉树
C. 只有根结点的二叉树或非叶子结点只有左子树的二叉树
D. 只有根结点的二叉树或非叶子结点只有右子树的二叉树
17. 如果根的高度为 1,具有 61 个结点的完全二叉树的高度为( )。
A. 5 B. 6 C. 7 D. 8
18. 下列选项中不属于视频文件格式的是( )。
A. TXT B. AVI C. MOV D. RMVB
19. 设某算法的计算时间表示为递推关系式 T(n)=T(n-1)+n(n 为正整数)及 T(0) = 1,则 该算法的时 间复杂度为( )。
A. O(logn) B. O(n log n) C. O(n) D. O(n2)
20. 在 NOI 系列赛事中参赛选手必须使用由承办单位统一提供的设备。下列物品中不允许选 手自带的 是( )。
A.鼠标 B.笔 C.身份证 D.准考证
二、问题求解(共 2 题,每题 5 分,共计 10 分;每题全部答对得 5 分,没有部分分)
1. 重新排列 1234 使得每一个数字都不在原来的位置上,一共有 种排法。
2. —棵结点数为 2015 的二叉树最多有 个叶子结点。
三、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)
1.
#include <iostream> using namespace std; int main() {
int a,b,c;
a=1; b=2; c=3;
if (a > c){
if(a>c)
cout << a <<" ";
else cout << b <<" ";
}
cout << c << endl;
return 0;
}
输出:
2 / 6
2.
#include <iostream>
using namespace std;
struct point {
int x;
int y;
};
int main() {
struct EX { inta; int b;
point c;
} e; e.a=1; e.b=2;
e.c.x = e.a + e.b;
e.c.y = e.a * e.b;
cout << e.c.x << ","<< e.c.y <<endl;
return 0;
}
输出:
3.
#include <iostream>
#include <string> using namespace std; int main() {
string str;
int i;
int count;
count = 0;
getline(cin,str);
for (i = 0; i < str.length(); i++) {
if(str[i] >= 'a' && str[i] <= 'z')
count++;
}
cout << "It has " << count << " lowercases" << endl;
return 0;
}
输入:NOI2016 will be held in Mian Yang.
输出:
3 / 6
4.
#include <iostream>
using namespace std;
void fun(char *a, char *b) {
a = b;
(*a)++;
}
int main() {
char cl, c2, *p1, *p2;
cl = 'A'; c2 = 'a'; p1 = &cl; p2 = &c2;
fun(p1, p2);
cout << cl << c2 << endl;
return 0;
}
输出:
四、完善程序(共 2 题,每题 14 分,共计 28 分)
1.(打印月历)输入月份 m (1 ≤m ≤ 12),按一定格式打印 2015 年第 m 月的月历。(第 三、四空 2.5 分, 其余 3 分)
例如,2015 年 1 月的月历打印效果如下(第一列为周日):
S |
M |
T |
W |
T |
F |
S |
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
#include <iostream>
using namespace std;
const int dayNum[]= {-l, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int mj offset, i;
int main() {
cin >> m;
cout << " S\tM\tT\tW\tT\tF\tS " endl; // '\t'为 TAB 制表符
(1) ;
for (i = 1; i < m; i++)
offset = (2) ;
for (i = 0; i < offset; i++)
cout << '\t';
for (i = 1; i <= (3) ;i++)
{
cout << (4) ;
4 / 6
if (i == dayNum[m] || (5) == 0)
cout << endl;
else
cout << '\t';
}
return 0;
}
2. (中位数)给定 n (n 为奇数且小于 1000)个整数,整数的范围在 0〜m (0 < m < 231) 之间,请使用二分
法求这 n 个整数的中位数。所谓中位数,是指将这 n 个数排序之后, 排在正中间的数。(第五空 2
分,其余 3 分)
#include <iostream>
using namespace std;
const int MAXN = 1000;
int n, i, lbound, rbound, mid, m, count;
int x[MAXN];
int main(){
cin >> n >> m;
for (i = 0; i < n; ++i)
cin >> x[i];
lbound=0;
rbound=m;
while ( (1) ) {
mid = (lbound + rbound )/2;
(2) ;
for (i = 0; i < n; i++)
if ( (3) )
(4) ;
if (count > n / 2) lbound = mid + 1;
else
(5) ;
}
cout << rbound << endl;
return 0;
}
5 / 6
NOIP2015初赛普及组参考答案 C & C++
一、单项选择题
DCCAA DABBA DBADB DBADA
二、问题求解
1、9
2、1008
三、阅读程序
1、3
2、3,2
3、It has 18 lowercases
4、Ab
四、完善程序
1、
(1)offset=4
(2)(offset+dayNum[i])%7
(3)dayNum[m]
(4)i
(5)(offset+i)%7
2、
(1)lbound<rbound 或 rbound>lbound
(2)count=0
(3)x[i]>mid 或 mid<x[i]
(4)count++ 或 count=count+1
(5)rbound=mid
6 / 6