NOIP初赛模拟考试题和答案及解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息学奥林匹克联赛初赛模拟试题
(普及组 C 语言二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分, 共30分)
1.被誉为“人工智能之父”的是()。
A.冯·诺依曼。
B.巴贝奇。
C.文顿·瑟夫和卡恩。
D.阿兰·图灵。
E.弗雷德里克·特曼。
2.下列哪个不是CPU(中央处理单元)()。
A. Intel Itanium
B. DDR SDRAM
C. AMD Athlon64
D. AMD Opteron
E. IBM Power 5
3.常见的邮件传输服务器使用()协议发送邮件。
A. HTTP
B. SMTP
C. TCP
D. FTP
E. POP3
4.下列无符号数中,最小的数是()。
A.(11011001)2
B.(75)10
C.(37)8
D.(2A)16
5.下列哪个软件属于操作系统软件()。
A. Microsoft Word
B. Photoshop
C. Foxmail
D. WinRAR
E. Red Hat Linux
6.下列哪个不是计算机的存储设备()。
A. 文件管理器
B. 内存
C. 高速缓存
D. 硬盘
E. U盘
7.组成’教授’(jiao shou )’副教授’(fu jiao shou )与’讲师’( jiang shi)这三个
词的汉字,在GB2312-80字符集中都是一级汉字.对这三个词排序的结果是()。
A教授,副教授,讲师 B.副教授,教授,讲师
C讲师,副教授,教授 D.副教授,讲师,教授
8.彩色显示器所显示的五彩斑斓的色彩,是由红色、蓝色和()色混合而成的。
A. 紫
B. 白
C. 黑
D. 绿
E. 橙
9.以下哪个软件不是即时通信软件()。
A. 网易泡泡
B. MSN Messenger
C. Google Talk
D. 3DS Max
E. QQ
10.一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行相互转换的
设备,这种设备是()。
A. 调制解调器
B. 路由器
C. 网卡
D. 网关
E. 交换机
11.计算机病毒传染的必要条件是( )。
A.在内存中运行病毒程序
B.对磁盘进行读写操作
C.在内存中运行含有病毒的程序
D.复制文件
12.一个高度为h 的二叉树最小元素数目是()。
A. 2h+1 B) h C) 2h-1 D) 2h E) 2h-1
13.已知数组A中,每个元素A(I,J)在存贮时要占3个字节,设I从1变化到8,J从1变化
到10,分配内存时是从地址SA开始连续按行存贮分配的。
试问:A(5,8)的起始地址为()。
A.SA+141
B. SA+144
C. SA+222
D. SA+225
14.电线上停着两种鸟(A,B),可以看出两只相邻的鸟就将电线分为了一个线段。
这些线段可分
为两类;一类是两端的小鸟相同;另一类则是两端的小鸟不相同。
已知:电线两个顶点上正好停着相同的小鸟,试问两端为不同小鸟的线段数目一定是()。
A.奇数
B. 偶数
C. 可奇可偶
D. 数目固定
15.十进制数13和14,进行“与”操作的结果是()。
A.27
B.12
C.15
D.11
16.满二叉树的叶结点个数为N,则它的结点总数为()。
A. N
B. 2 * N
C. 2 * N – 1
D. 2 * N + 1
E. 2N– 1
17.十进制数2008等值于八进制数()。
A. 3077
B. 3724
C. 2760
D. 4002
E. 3730
18.二叉树后序遍历是dabec,中序遍历是debac,则后序遍历是()。
A.acbed
B.decab
C.deabc
D.cedba
19.某数列有1000个各不相同的单元,由低至高按序排列;现要对该数列进行二分查找
(binary-search),在最坏的情况下,需检视()个单元。
A.1000
B. 10
C. 100
D. 500
20.假设我们用d=(a1,a2,...,a5),表示无向图G的5个顶点的度数,下面给出的哪(些)组d 值
合理( B )。
A.{5,4,4,3,1}
B.{4,2,2,1,1}
C.{3,3,3,2,2}
D.{5,4,3,2,1}
二.问题求解(每题5分,共10分)
1.平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一
条直线上。
问用这些点为顶点,能组成个不同四边形。
2.完全二叉树对每个节点从上往下,从左往右编号,第i层的第j个节点的编号是。
三.阅读程序(每题8分,共32分)
1.#include <stdio.h>
int main(){
int a = 79, b = 34, c = 57, d = 0, e = -1;
if (a < c || b < c) d = d + e;
if (d + 10 < e) d = e + 10;
else d = a - d;
printf("%d\n", d);
return 0;
}
输出:。
2.#include <stdio.h>
int main(){
int i, j;
char str1[] = "Dir-is-stupid";
char str2[] = "nice";
str1[0] = 'B'; str1[1] = 'a';
for (i = 7, j = 0; j < 4; i++, j++)
str1[i] = str2[j];
for (i = 11, j = 0; j < 2; i++, j++)
str1[i] = '#';
printf("%s\n", str1);
return 0;
}
输出:。
3.#include <stdio.h>
main()
{
int n,i;
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);}
输入:18
输出:。
4.#include <stdio.h>
int *seek( int (*pnt_row)[3] )
{ int i=0, *pnt_col;
pnt_col=*(pnt_row+1);
for(; i<3; i++)
if(*(*pnt_row+i)<60)
{ pnt_col=*pnt_row;
break;
}
return(pnt_col);
}
main()
{ static int grade[3][3]={{55,65,75},{65,75,85},{75,80,90}};
int i,j,*pointer;
for(i=0; i<3; i++)
{ pointer=seek(grade+i);
if(pointer==*(grade+i))
{
for(j=0; j<3; j++) printf("%d ",*(pointer+j));
printf("\n");
}
}
}
输出:。
四、完善程序 (第一题3空,每空2分,第二题前1空,每空2分,后4空,每空5分,共28分)
1.农夫用驴磨黄豆,由于磨小,每次磨的黄豆不能超过200颗,而每次磨的黄豆若多于173颗他的驴变会偷吃一颗。
每天农夫会拿出一袋黄豆,将它随意划分成K堆,每次磨一堆。
若某堆超过200颗,农夫便会将此堆黄豆收起来,改天再磨。
问:当这天工作完成时,农夫一共磨了多少颗黄豆?
输入:
输入第一行有一个整数K,代表当天拿出的这袋黄豆被农夫分成K堆。
接下来的K行每行包括一个在1到200之间(包括1和200)的整数,分别表示每堆黄豆的个数。
输出:
输出只包括一行,这一行只包含一个整数(长整形范围),表示在当天农夫一共磨了多少颗黄豆。
输入样例:
3
181
169
220
输出样例:
349
#include <stdio.h>
main()
{
int i,j,n,m;
m=0;
⑴ ;
for (i=1;i<=n;i++)
{ scanf("%d",&j);
if (j<=200)
if (j<=173) ⑵ ;
else ⑶ ;
}
Printf("%d\n",m);
}
2.在ByteLand上有一块地区,蕴藏了ByteLand上最珍贵的Bit矿物质。
科学家们将这块地区划分成了N×N个相同大小的单元格,并对每个单元格进行了考察研究:有的单元格中有丰富的Bit 矿物质——科学家用1来标识;有的单元格蕴藏的矿物质很少——科学家用0来标识。
假设用W(i,j)和F(i’,j’)来分别表示两个单元格。
那么它们之间的距离被定义为:max(|i - i'|, |j - j'|),例如W(1,3)和F(4,2)的距离为3。
鉴于可持续发展的思想和开采能力的限制,ByteLand当局计划以一块单元格为中心,开采与中心距离不超过R的所有单元格内的矿藏。
为了选定一个合适的单元格作中心,当局希望能够预先了解:以任意一个单元格为中心时,开采量的情况。
于是,当局将一张矿藏地图交给你,上面的N×N个单元格中包含数字0或1。
你被要求根据这张矿藏地图,绘制出相应的“矿藏密度图”,分别以每块单元格为中心,计算与中心距离不超过R的所有标识为1的单元格个数。
输入:
第一行有两个数字N和R(0<=R<N<=250)。
以下N行,每行N个数字。
第i+1行第j个数字为单元格(i,j)的标识——0或1。
输出:
输出文件有N行,每行N个数字。
第i行第j个数字表示:与(i,j)距离不超过R的所有标识为1的单元格个数。
输入样例:
5 1
1 0 0 0 1
1 1 1 0 0
1 0 0 0 0
0 0 0 1 1
0 1 0 0 0
输出样例:
3 4 2 2 1
4 5 2 2 1
3 4 3 3 2
2 2 2 2 2
1 1
2 2 2
#include <stdio.h>
#include <mem.h>
int n, r;
long map[250][250];
long tot[250][250];
void init()
{ int i, j;
memset(map,0,sizeof(map));
scanf("%d %d", &n, &r);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
fscanf("%ld", ⑴ );
}
void work()
{long i, j, k;
memset(tot,0,sizeof(tot));
for (i = 1; i <= n; i++)
{
k = 0;
for (j = 1; j <= n; j++)
{
k += map[i][j];
tot[i][j] = ⑵ ;
}
}
}
void print()
{
long i, j, minx, miny, maxx, maxy;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
minx = i-r; maxx = i+r;
miny = j-r; maxy = j+r;
if (minx < 1) minx = ⑶ ;
if (maxx > n) maxx = ⑷ ;
if (miny < 1) miny = 1;
if (maxy > n) maxy = ⑸ ;
printf("%ld ", tot[maxx][maxy]-(tot[minx-1][maxy]-tot[minx-1][miny-1]+tot[maxx][miny-1])); }
printf("\n");
}
}
void main()
{ init();
work();
print();
}
\
信息学奥林匹克联赛初赛模拟试题
参考答案
一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分,多选无分, 共30 分) 题号 1 2 3 4 5 6 7 8 9 10
选择 D B B C E A D D D A
题号 11 12 13 14 15 16 17 18 19 20
选择 C B A B B C E B B
二.问题解答(每题5分,共10分)
1. 答:2250
2. 答:2i-1+j-1
三. 阅读程序,并写出程序的正确运行结果:(每题8分,共32分)
(1)程序的运行结果是:80
(2) 程序的运行结果是: Bar-is-nice##
(3)程序的运行结果是: 18=2*3*3
(4)程序的运行结果是: 55 65 75
四.根据题意, 将程序补充完整
1.
①scanf("%d",&n)
②m=m+j
③m=m+j-1
2.
① &map[i][j]
② k+tot[i-1][j]
③1
④n
⑤n。