四. 完善程序 (前4空,每空3分,后4空,每空4分,共28分)
1 . (打印月历)输入月份m(1?m?12),按一定格式打印2015年第m月的月历。(第三、四空2.5分,其余3分)
例如,2015年1月的月历打印效果如下(第一列为周日):
S
M 5
T 6
W 7
T 1 8
F 2 9
S 3 10
4
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
const
dayNum: array [1..12] of longint
= (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var
m, offset, i: longint; begin read(m);
writeln('S', #9, 'M', #9, 'T', #9, 'W', #9, 'T', #9, 'F', #9, 'S'); // #9 为 TAB 制表符 (1) ; for i := 1 to m - 1 do offset := (2) ; for i := 1 to offset do write(#9);
for i := 1 to (3) do begin
write( (4) ); if (i = dayNum[m]) or ( (5) = 0) then writeln else
write(#9); end; end.
CCF NOIP2015初赛普及组Pascal语言试题
第 6 页 共 8 页
2. (中位数)给定n(n为奇数且小于1000)个整数,整数的范围在0~m(0?m?2)之间,请使用二分法求这n个整数的中位数。所谓中位数,是指将这n个数排序之后,排在正中间的数。(第五空2分,其余3分)
const
MAXN = 1000; var
n, i, lbound, rbound, mid, m, count:longint; x: array[1..MAXN] of longint; begin
read(n, m); for i := 1 to n do read(x[i]); lbound := 0; rbound := m;
while (1) do begin
mid := (lbound + rbound) div 2; (2) ; for i := 1 to n do if (3) then (4) ; if count > n div 2 then lbound := mid + 1 else
(5) ; end;
writeln(rbound); end.
CCF NOIP2015初赛普及组Pascal语言试题
第 7 页 共 8 页
31
答 卷 部 分
一. 选择一个正确答案代码(A/B/C/D),填入每题的括号内 (每题1.5分,多选无分, 共30 分)
题号 选择 题号 选择
1 D 11 D 2 C 12 B 3 C 13 A 4 A 14 D 5 A 15 B 6 D 16 D 7 A 17 B 8 B 18 A 9 B 19 D 10 A 20 A 二.问题解答 (每题5分,共10分)
1. 答: 9 2. 答: 1008 三. 阅读程序,并写出程序的正确运行结果:(每题8分,共32分)
(1) 程序的运行结果是: 3 (2) 程序的运行结果是: 3,2 (3) 程序的运行结果是: It has 18 lowercases
(4) 程序的运行结果是: Ab
四.根据题意, 将程序补充完整 (共28分)
1.
2.
1) offset := 4 1) lbound < rbound 2) (dayNum[i] + offset) mod 7 2) count := 0 dayNum[m] 3)3) x[i] > mid i 4)4) inc(count) 5) (offset + i) mod 7 5) rbound := mid CCF NOIP2015初赛普及组Pascal语言试题
第 8 页 共 8 页