NOIP第二十届初赛普与组C语言精彩试题卷与问题详解文档格式.docx
《NOIP第二十届初赛普与组C语言精彩试题卷与问题详解文档格式.docx》由会员分享,可在线阅读,更多相关《NOIP第二十届初赛普与组C语言精彩试题卷与问题详解文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
A.RAMB.ROMC.硬盘D.光盘
8.以下哪一种是属于电子收发的协议()。
A.SMTPB.UDPC.P2PD.FTP
9.下列选项中不属于图像格式的是()。
A.JPEG格式B.TXT格式C.GIF格式D.PNG格式
10.链表不具有的特点是()。
A.不必事先估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素
D.所需空间与线性表长度成正比
11.下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。
A.296B.133C.256D.199
12.下列几个32位IP地址中,书写错误的是()。
A.162.105.128.27B.192.168.0.1C.256.256.129.1D.10.0.0.1
13.要求以下程序的功能是计算:
s=1+1/2+1/3+...+1/10。
#include<
stdio.h>
intmain()
{
intn;
floats;
s=1.0;
for(n=10;
n>
1;
n--)s=s+1/n;
printf("
%6.4f\n"
s);
return0;
}
程序运行后输出结果错误,导致错误结果的程序行是()。
A.s=1.0;
B.for(n=10;
n--)C.s=s+1/n;
D.printf("
14.设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是()。
A.x=(x*100)+0.5/100.0;
B.B.x=(x*100+0.5)/100.0;
C.C.x=(int)(x*100+0.5)/100.0;
D.x=(x/100+0.5)*100.0;
15.有以下程序:
intmain()
{
ints,a,n;
s=0;
a=1;
scanf("
%d"
&
n);
do{
s+=1;
a-=2;
while(a!
=n);
%d\n"
return0;
若要使程序的输出值为2,则应该从键盘给n输入的值是()。
A.-1B.-3C.-5D.0
16.一棵具有5层的满二叉树中结点数为()。
A.31B.32C.33D.16
17.有向图中每个顶点的度等于该顶点的()。
A.入度
B.出度
C.入度与出度之和
D.入度与出度之差
18.设有100个数据元素,采用折半搜索时,最大比较次数为()。
A.6B.7C.8D.10
19.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值,c>
0。
s=a;
for(b=1;
b<
=c;
b++)
则与上述程序段功能等价的赋值语句是()。
A.s=a+bB.s=a+cC.s=s+cD.s=b+c
20.计算机界的最高奖是()。
A.菲尔兹奖B.诺贝尔奖C.图灵奖D.普利策奖
二、问题求解(共2题,每题5分,共计10分;
每题全部答对得5分,没有部分分)
1.把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?
(用K表示)。
例如:
M=7,N=3时,K=8;
在这里认为(5,1,1)和(1,5,1)是同一种放置方法。
问:
M=8,N=5时,K=_________。
2.如图所示,图中每条边上的数字表示该边的长度,则从A到E的最短距离是_________。
三、阅读程序写结果(共4题,每题8分,共计32分)
1.#include<
intmain(){
inta,b,c,d,ans;
%d%d%d"
a,&
b,&
c);
d=a-b;
a=d+c;
ans=a*b;
Ans=%d\n"
ans);
return0;
输入:
234
输出:
_________
2.#include<
intfun(intn){
if(n==1)return1;
if(n==2)return2;
returnfun(n-2)-fun(n-1);
fun(n));
7
3.#include<
string.h>
constintSIZE=100;
charst[SIZE];
inti,len;
fgets(st,sizeof(st),stdin);
len=strlen(st);
for(i=0;
i<
len;
i++){
if(st[i]>
='
a'
&
&
st[i]<
z'
)st[i]=st[i]-'
+'
A'
;
}
%s\n"
st);
Hello,mynameisLostmonkey.
4.#include<
intp[SIZE];
intn,tot,i,;
tot=0;
for(i=1;
=n;
i++)p[i]=1;
for(i=2;
i++)
if(p[i]==1)
tot++;
cn=i*2;
while(cn<
=n)
p[cn]=0;
+=i;
tot);
四、完善程序(共2题,每题14分,共计28分)
1.(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。
请填空。
(每空3
分,共12分)
intdelnum(char*s)
inti,j;
j=0;
s[i]!
\0'
i++)
if(s[i]<
'
0'
(1)s[i]>
9'
)
s[j]=s[i];
(2)
return(3)
constintSIZE=30;
intmain()
chars[SIZE];
intlen,i;
fgets(s,sizeof(s),stdin);
len=delnum(s);
for(i=0;
i++)printf("
%c"
(4));
\n"
);
2.(最大子矩阵和)给出m行n列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。
输入第一行包含两个整数m和n,即矩阵的行数和列数。
之后m行,每行n个整数,描述整个矩阵。
程序最终输出最大的子矩阵和。
(最后一空4分,其余3分,共16分)
intmatrix[SIZE+1][SIZE+1];
introwsum[SIZE+1][SIZE+1];
//rowsum[i][j]记录第i行前j个数的和intm,n,i,j,first,last,area,ans;
%d%d"
m,&
=m;
for(j=1;
j<
j++)
matrix[i][j]);
ans=matrix
(1)
i++)
(2)
rowsum[i][j]=(3)
for(first=1;
first<
first++)
for(last=first;
last<
last++)
(4)
for(i=1;
area+=(5)
if(area>
ans)ans=area;
if(area<
0)area=0;
}
普及组参考答案
一、单项选择题(共20题,每题1.5分,共计30分)
1
2
3
4
5
6
7
8
9
10
B
D
C
A
11
12
13
14
15
16
17
18
19
20
二、问题求解(共2题,每题5分,共计10分;
每题全部答对得5分,没有部分分)
1.18
2.11
三、阅读程序写结果(共4题,每题8分,共计32分)
1.Ans=9
2.-11
3.HELLO,MYNAMEISLOSTMONKEY.
4.10
四、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCFNOI科学委员会复核)
Pascal语言
C++语言
C语言
分值
1.
(1)
or
||
(2)
j:
=j+1或inc(j)
j++或j=j+1或++j
(3)
j
(4)
s[i]
2.
[1,1]
[1][1]
rowsum[i,0]:
=0
rowsum[i][0]=0
rowsum[i,j-1]+matrix[i,j]
rowsum[i][j-1]+matrix[i][j]
area:
area=0
(5)
rowsum[i,last]-rowsum[i,first-1]
rowsum[i][last]-rowsum[i][first-1]