image

编辑人: 人逝花落空

calendar2025-07-21

message6

visits484

2015年第二十一届NOIP信奥赛普及组初赛C++试题参考答案

一、单选题

1、1MB等于( )。

A 10000字节

B 1024字节

C 1000×1000字节

D 1024×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 01100111

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 所需存储空间与存储元素个数成正比



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(nlogn)

C O(n)

D O(n2)


20、在NOI系列赛事中参赛选手必须使用累承办单位统一提供的设备。下列物品中不允许选手自带的是( )。

A 鼠标

B 笔

C 身份证

D 准考证


二、简答题

21、重新排列1234使得每一个数字都不在原来的位置上,一共有              种排法。

参考答案:重新排列1234使得每一个数字都不在原来的位置上,一共有24种排法。


22、一棵结点数为 2015 的二叉树最多有                个叶子结点。

参考答案:一棵结点数为2015的二叉树最多有2015个叶子结点。


23、

#include <iostream>

using namespace std;

int main()

{
	int a, b, c;
	a = 1;
	b = 2;
	c = 3;
	if(a > b)
		if(a > c)
			cout << a << ' ';
		else
			cout << b << ' ';
	cout << c << endl;
	return 0;
}

输出:                     

参考答案:输出为空


24、

#include <iostream>

using namespace std;

struct point
	{
		int x;
		int y;
	};

int main()
	{
		int a, b, c;
		struct EX
			{
				int a;
				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,2


25、

#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.

输出:                                                 

参考答案:输出为空。


26、

#include <iostream>
#include <string>

using namespace std;

void fun(char *a, char *b)
	{
		a = b;
		(*a)++;
	}

int main()
	{
		char c1, c2, *p1, *p2;
		c1 = 'A';
		c2 = 'a';
		p1 = &c1;
		p2 = &c2;
		fun(p1, p2);
		cout << c1 << c2 << endl;
		return 0;
	}

输出:              

参考答案:该程序的输出结果为:`Aab`


三、实操题

27、完善程序: (打印月历)输入月份 m(1≤m≤12),按一定格式打印 2015 年第 m 月的月历。 (第三、四空 2.5 分,其余 3 分)

例如,2015 年 1 月的月历打印效果如下(第一列为周日):


#include <iostream>

#include <string>


using namespace std;


const int dayNum[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int m, offset, i;


int main()

{

cin >> m;

cout << "S\tM\tT\tW\tT\tF\tS" << endl;  //'\t'为 TAB 制表符

                         ⑴        ;

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

offset =      ⑵      ;

for(i = 0; i < offset; i++)

cout << '\t';

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

{

cout <<    ⑷    ;

if(i == dayNum[m] ||    ⑸   == 0)

cout << endl;

else

cout << '\t';

}

return 0;

}

参考答案:1. 在空格⑴处,应填入`dayNum[m-1]`,以获取前一个月的天数。2. 在空格⑵处,应填入`dayNum[m-1] + 1`,以计算本月第一天是星期几的偏移量。3. 在空格⑶处,应填入`dayNum[m]`,以获取本月总天数。4. 在空格⑷处,应填入`i + 1`,以输出日期。5. 在空格⑸处,应填入`isLeapYear(m)`,以判断是否为闰年,并确定2月的天数。


28、完善程序:(中位数 median)给定 n(n 为奇数且小于 1000)个整数, 整数的范围在 0~m(0<m<2^31)之间, 请使 用二分法求这 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(       ⑴          )

{

mid = (lbound + rbound) / 2;

                             ⑵       ;

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

if(     ⑶       )

                                                 ⑷       ;

if(count > n / 2)

lbound = mid + 1;

else

                                       ⑸        ;

cout << mid << " " << lbound << " " << rbound << " " << count << endl;

}

cout << rbound << endl;

return 0;

}

参考答案:1. ⑴处应填:lbound <= rbound2. ⑵处应填:count = 03. ⑶处应填:x[i] <= mid4. ⑷处应填:count++5. ⑸处应填:rbound = mid


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2015年第二十一届NOIP信奥赛普及组初赛C++试题参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share