noip初赛普及组C++试题 及答案Word文档格式.docx

上传人:b****7 文档编号:21836375 上传时间:2023-02-01 格式:DOCX 页数:10 大小:25.40KB
下载 相关 举报
noip初赛普及组C++试题 及答案Word文档格式.docx_第1页
第1页 / 共10页
noip初赛普及组C++试题 及答案Word文档格式.docx_第2页
第2页 / 共10页
noip初赛普及组C++试题 及答案Word文档格式.docx_第3页
第3页 / 共10页
noip初赛普及组C++试题 及答案Word文档格式.docx_第4页
第4页 / 共10页
noip初赛普及组C++试题 及答案Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

noip初赛普及组C++试题 及答案Word文档格式.docx

《noip初赛普及组C++试题 及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《noip初赛普及组C++试题 及答案Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

noip初赛普及组C++试题 及答案Word文档格式.docx

A.硬盘B.高速缓存C.显存D.RAM

11.在下列关于计算机语言的说法中,正确的有()。

A.高级语言比汇编语言更高级,是因为它的程序的运行效率更高

B.随着Pascal、C等高级语言的出现,机器语言和汇编语言已经退出了历史舞台

C.高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上

D.C是一种面向对象的高级计算机语言

12.近20年来,许多计算机专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的工具。

在下列关于递归算法的说法中,正确的是()。

A.在1977年前后形成标准的计算机高级语言“FORTRAN77”禁止在程序使用递归,原因之一是该方法可能会占用更多的内存空间

B.和非递归算法相比,解决同一个问题,递归算法一般运行得更快一些

C.对于较复杂的问题,用递归方式编程一般比非递归方式更难一些

D.对于已经定义好的标准数学函数sin(x),应用程序中的语句“y=sin(sin(x));

”就是一种递归调用

13.一个无法靠自身的控制终止的循环称为“死循环”,例如,在C++语言程序中,语句“while

(1)printf(“*”);

”就是一个死循环,运行时它将无休止地打印*号。

下面关于死循环的说法中,只有()是正确的。

A.不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而,任何编译系统都不做死循环检验

B.有些编译系统可以检测出死循环

C.死循环属于语法错误,既然编译系统能检查各种语法错误,当然也应该能检查出死循环

D.死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也可以检测的

14.在C++程序中,表达式23|2^5的值是()

A.23B.1C.32D.18

15.在C++程序中,判断a等于0或b等于0或c等于0的正确的条件表达式是()

A.!

((a!

=0)||(b!

=0)||(c!

=0))B.!

=0)&

&

(b!

(c!

=0))

C.!

(a==0&

b==0)||(c!

=0)D.(a=0)&

(b=0)&

(c=0)

16.地面上有标号为A、B、C的3根细柱,在A柱上放有10个直径相同中间有孔的圆盘,从上到下依次编号为1,2,3,„„,将A柱上的部分盘子经过B柱移入C柱,也可以在B柱上暂存。

如果B柱上的操作记录为:

“进,进,出,进,进,出,出,进,进,出,进,出,出”。

那么,在C柱上,从下到上的盘子的编号为()。

A.243657B.241257C.243176D.243675

17.与十进制数1770对应的八进制数是()。

A.3350B.3351C.3352D.3540

18.设A=B=true,C=D=false,以下逻辑运算表达式值为假的有()。

A.(¬A∧B)∨(C∧D∨A)B.¬(((A∧B)∨C)∧D)

C.A∧(B∨C∨D)∨DD.(A∧(D∨C))∧B

19.(2070)16+(34)8的结果是()。

A.(8332)10B.(208A)16C.(100000000110)2D.(20212)8

20.已知7个结点的二叉树的先根遍历是1245637(数字为结点的编号,以下同),中根遍历是4265173,则该二叉树的后根遍历是()

A.4652731B.4652137C.4231547D.4653172

二.问题求解(共2题,每题5分,共计10分)

1.(子集划分)将n个数{1,2,„,n}划分成r个子集。

每个数都恰好属于一个子集,任何两个不同的子集没有共同的数,也没有空集。

将不同划分方法的总数记为S(n,r)。

例如,S(4,2)=7,这7种不同的划分方法依

次为{

(1),(234)},{

(2),(134)},{(3),(124)},{(4),(123)},

{(12),(34)},{(13),(24)},{(14),(23)}。

当n=6,r=3时,S(6,3)=_____________。

(提示:

先固定一个数,对于其余的5个数考虑S(5,3)与S(5,2),再分这两种情况对原固定的数进行分析)。

2.(最短路线)某城市的街道是一个很规整的矩形网格(见下图),有7条南北向的纵街,5条东西向的横街。

现要从西南角的A走到东北角的B,最短的走法共有多少种?

_________________.

三.阅读程序写结果(共4题,每题8分,共计32分)

1.

#include<

iostream.h>

voidmain(){

inti,p[5],a,b,c,x,y=20;

for(i=0;

i<

=4;

i++)cin>

>

p[i];

a=(p[0]+p[1])+(p[2]+p[3]+p[4])/7;

b=p[0]+p[1]/((p[2]+p[3])/p[4]);

c=p[0]*p[1]/p[2];

x=a+b-p[(p[3]+3)%4];

if(x>

10)

y+=(b*100-a)/(p[p[4]%3]*5);

else

y+=20+(b*100-c)/(p[p[4]%3]*5);

cout<

<

x<

"

"

y<

endl;

}

//注:

本例中,给定的输入数据可以避免分母为0或数组元素下标越界。

输入:

66553输出:

_______________

2.

voidfun(int*a,int*b){

int*k;

k=a;

a=b;

b=k;

voidmain(){

inta=3,b=6,*x=&

a,*y=&

b;

fun(x,y);

cout<

a<

b<

输出:

____________________

3.

iomanip.h>

#include"

math.h"

inta1[51]={0};

inti,j,t,t2,n=50;

for(i=2;

=sqrt(n);

i++)

if(a1[i]==0){

t2=n/i;

for(j=2;

j<

=t2;

j++)a1[i*j]=1;

t=0;

=n;

i++)if(a1[i]==0){

setw(4)<

i;

t++;

if(t%10==0)cout<

输出:

____________________________

____________________________

4.

ctype.h"

voidexpand(chars1[],chars2[])

{

inti,j,a,b,c;

j=0;

(c=s1[i])!

='

\0'

;

i++)

if(c=='

-'

{

a=s1[i-1];

b=s1[i+1];

if(isalpha(a)&

isalpha(b)||isdigit(a)&

isdigit(b)){

//函数isalpha(a)用于判断字符a是否为字母,isdigit(b)用于判断字符

//b是否为数字,如果是,返回1,否则返回0

j--;

dos2[j++]=a++;

while(tolower(a)<

tolower(s1[i+1]));

elses2[j++]=c;

s2[j]='

chars1[100],s2[300];

cin>

s1;

expand(s1,s2);

s2<

wer2345d-h454-82qqq

____________________________________

四.完善程序(前4空,每空2.5分,后6空,每空3分,共28分)

1.(求字符串的逆序)下面的程序的功能是输入若干行字符串,每输入一行,就按逆序输出该行,最后键入-1终止程序。

string.h>

intmaxline=200,kz;

intreverse(chars[]){

inti,j,t;

for(i=0,j=strlen(s)-1;

i<

j;

①,②)

{t=s[i];

s[i]=s[j];

s[j]=t;

return0;

charline[100];

continue?

-1forend."

cin>

kz;

while(③){

line;

④;

line<

}

2.(棋盘覆盖问题)在一个2^k×

2^k个方格组成的棋盘中恰有一个方格与其他方格不同(图中标记为-1的方格),称之为特殊方格。

现用L型(占3个小格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重叠,于是,用到的纸片数恰好是(4^k-1)/3。

在下表给出的一个覆盖方案中,k=2,相同的3个数字构成一个纸片。

下面给出的程序是用分治法设计的,将棋盘一分为四,依次处理左上角、右上角、左下角、右下角,递归进行。

请将程序补充完整。

intboard[65][65],tile;

//tile为纸片编号

voidchessboard(inttr,inttc,intdr,intdc,intsize)

//dr,dc依次为特殊方格的行、列号

{intt,s;

if(size==1)

⑤;

t=tile++;

s=size/2;

if(⑥)chessboard(tr,tc,dr,dc,s);

{board[tr+s-1][tc+s-1]=t;

⑦;

if(dr<

tr+s&

dc>

=tc+s)chessboard(tr,tc+s,dr,dc,s);

{board[tr+s-1][tc+s]=t;

⑧;

if(dr>

=tr+s&

dc<

tc+s)chessboard(tr+s,tc,dr,dc,s);

{board[tr+s][tc+s-1]=t;

⑨;

=tc+s)chessboard(tr+s,tc+s,dr,dc,s);

board[tr+s][tc+s]=t;

⑩;

voidprt1(intb[][65],intn)

inti,j;

for(i=1;

for(j=1;

j++)

setw(3)<

b[i][j];

voidmain()

intsize,dr,dc;

cout<

inputsize(4/8/16/64):

size;

inputthepositionofspecialblock(x,y):

dr>

dc;

board[dr][dc]=-1;

tile++;

chessboard(1,1,dr,dc,size);

prt1(board,size);

 

NOIP2007年普及组(C++语言)参考答案与评分标准

一、单项选择题:

(每题1.5分)

1.~5DDCBB6~10BBCCA

11~15CAAAB16~20DCDAA

二、问题求解:

(每题5分)

1.90

2.210

三、阅读程序写结果

1.15,46(对1个数给4分,无逗号扣1分)

2.3,6

3.2357111317192329

3137414347

4.wer2345defgh45456782qqq

四、完善程序(前4空(①--④),每空2.5分,后6空(⑤--⑩),每空3分)

(说明:

以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)

1.

①i++

②j--

③kz!

=-1

④reverse(line)

2.

⑤return

⑥dr<

tc+s

⑦chessboard(tr,tc,tr+s-1,tc+s-1,s)

⑧chessboard(tr,tc+s,tr+s-1,tc+s,s)

⑨chessboard(tr+s,tc,tr+s,tc+s-1,s)

⑩chessboard(tr+s,tc+s,tr+s,tc+s,s)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1