2023海淀区信息学竞赛校内预选赛
考试时间:60分钟 卷面满分:100分
一、选择题(每题至少有一个正确答案,共10道小题,每题2分,共20分)
1.在C++程序中,下列变量名合法的是 ( )
A._123abc B.123abc
C.123#abc D.abc&123
解释:C++程序中变量名是由字母、数字和下划线组成,不能以字母开头。
2.在C++程序中表达式 x%=y 与下列哪个表达式是等价的? ( )
A.x%y B.x/=y
C.y=x%y D.x=x%y
3.下列对语句“freopen(“A.in”, “r”,stdin);”的分析中,正确的是 ( )
A.freopen是文件名
B.A.in 是重定向函数名
C.r代表重定向为“写”方式
D.语句将cin重定向到文件A.in
4.下列代码片段正确的输出是什么? ( )
int a=10;
double b=3.14;
printf(“%d-%lf”,a,b);
A.6.86 B.10 3
C.10 3.14 D.10-3.140000
5.在C++中,下列数据类型占用内存最大的是: ( )
A.char B.bool
C.double D.short
解释:C++程序中每个double类型的变量占用8个字节的空间。
6.在C++中,下列运算符优先级最低的是: ( )
A.+ B.%
C.* D./
7.在C++中,正确的数组定义方法是: ( )
A.int n; int a[n];
B.int n; n=100; int a[n];
C.int a[]={1,2,3,4,5,6,7};
D.int[100] a;
8.在C++语言中,表示逻辑值"真"的是 ( )
A. 1 B. 非1的数
C. 非0的数 D. 大于0的数
9.C++语言中,作为语句结束符的是 ( )
A.回车符 B.冒号
C.逗号 D.分号
10.若变量已正确定义,要将 a 和 b 中的数据进行交换,则下列正确的是( )
A、a=a+b;b=a-b;a=a-b;
B、t=a;a=b;b=t;
C、a=t;t=b;b=a;
D、t=b;b=a;b=t;
二、完善程序(共10道小题,每题3分,共30分)
1、我们知道C语言程序和C++语言程序中的输出都必须添加相应的头文件,这个关键头文件是 #include< iostream> 或 #include < cstdio> 或 #include< stdio.h> 。
(题目说明:写只写万能头文件不得分)
2、数学上计算圆柱体体积是用底面积乘以高,具体的计算公式是 ,如果给定圆柱体底面的半径 r和圆柱体的高 h,就可以计算出圆柱体的体积。用编程的方法实现这个任务,下面给定的代码中,空缺 ② 处应填写v=3.14*r*r*h (取3.14 ) 。
3、数学上把只含有一个未知数、未知数的最高次数为1且两边都为整式的等式叫做一元一次方程。一元一次方程中未知数的值叫做这个一元一次方程的解,或者叫做这个一元一次方程的根,一元一次方程只有一个根。 对于一个一元一次方程ax+b=0,其中a和b是给定的数,x是未知数,下面是解一元一次方程的程序代码,即从键盘上输入a和b,输出方程的解。用编程的方法实现这个任务,下面给定的代码中,空缺 ③ 处应该填写 cout<<-b/a 。
解释:原方程可等价变换为a * x= -b ,故得 x=-b/a;
4、有家包子店叫“王子包子王”,我们发现它从左往右念和从右往左念的结果是一样的。接下来,让我们看看数字有没有类似好玩的事情:一个三位数反转后与原数拼接是不是有类似的效果?现有一个程序,对于给定的一个三位数,要求你分离出它的百位,十位和个位,反转后输出。若反转后首位为0,仍输出以0开头的数,如给定 123 反转后为321,140反转后的为 041。用编程的方法实现这个任务,下面给定的代码中,空缺 ④ 处应该填写 a=n%10 。
解释:a,b,c分别表示给定三位数的个、十和百位上的数字。
5、关于阳历闰年的产生:地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故每过四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。例如,2000年是闰年,1900年则是平年。现在给定一个年份,请你判断它是否为闰年。用编程的方法实现这个任务,下面给定的代码中,空缺 ⑤ 处应该填写 n%400==0 。
6、现有一个程序要计算并输出所有1到n的正整数的总和,那么下面的程序代码中在空缺 ? 处填写一个表达式应该是: s=s+i 或 s+=i 。
7、陶陶刚刚学会在C++程序中实现读写文件,她要从文件“A01.txt”中读取数据,进行相关运算后,将题目要求的答案存储在“A02.txt”中,她除了在程序中要加入关于文件读写的头文件外,她还需要写哪些关于文件读写的关键语句?
freopen("A01.txt", "r", stdin);
freopen("A02.txt", "w", stdout);
8、陶陶刚刚学会求一个正整数的质因数,他想把给定的一个正整数的全部质因数都输出,那么右边的程序代码在空缺 ? 处填写一个表达式应该是 n=n/m 或 n/=m 。
9、陶陶想要爬上一个有n 级台阶的楼梯,每一步能爬一到两级台阶。他希望移动的次数是整数m 的整数倍,用程序计算满足条件爬到楼梯顶端的最小移动次数,若无解输出 -1。
下图程序代码在空缺 ? 处应填写 int i=(n+1)/2; 。
10、陶陶学会了素数的判断,现在他找到不超过 n 的素数中,第 m 小的那一个,如果不存在就输出 -1 。下图程序代码在空缺 ? 处应填写 if(j>k) cnt++ 。
三、阅读程序写结果(共10道小题,每题5分,共50分)
1、对于下图3-01中的程序,如果输入22和13, 则输出的结果为 35 。
解释:计算并输出两个数的和。
2、对于右图 3-02中的程序,如果输入25,
则输出的结果为 5 。
解释:分段函数中,输入的数大于10,应执行开方操作。
3、对于下图3-03中的程序,如果输入8,则输出的结果为 64 。
解释:计算从1开始的连续n个计数的和,可以证明恰好是n的平方。
4、对于右图3-04中的程序,输入 10,
则输出的结果为 55 。
解释:求斐波那契数列的第n项,第10项是55 。
5、对于下图3-05中的程序,如果输入385和65,则输出的结果为 5 。
解释:求大于1的最小公约数。
6、对于右图3-06中的程序,如果输入 24,
则输出的结果为 13 。
解释:统计1到n的所有数中数字出现的总次数。
7、对于下图3-07中的程序,如果输入 96 ,则输出的结果为 11 。
解释:统计n有多少个非本身的约数,对于96有1,2,3,4,6,8,12,16,24,32,48 。
8、对于上图3-08中的程序,如果输入560,则输出的结果为 3 。
解释:统计n的不同的质因数的个数。对于560有2,5和7 。
9、对于下图3-09中的程序,如果依次输入2 1 2 1 10,则输出的结果为 -5 。
解释:简单的模拟。
10、对于上图3-10中的程序,如果输入 6 3 ,则输出的结果为 8 。
解释:简单的模拟。