2023年厦门市小学生计算机C++语言竞赛--答案(初赛)

中国科学技术大学与中科院合作的量子计算原型机九章三号刷新世界纪录,神舟十七号载人飞船成功发射并进入预定轨道。文章还涉及C++编程语言知识点和航天工程发展战略。
摘要由CSDN通过智能技术生成

一、单项选择题         (1~10每题1分,11~20每题2分,共30分)

1.中国科学技术大学官网2023年10月11日发布的消息,中国科学技术大学中国科学院量子信息与量子科技创新研究院潘建伟、陆朝阳、刘乃乐等组成的研究团队与中国科学院上海微系统所、国家并行计算机工程技术研究中心合作,成功构建了255个光子的量子计算原型机“九章三号”,再度刷新了光量子信息的技术水平和量子计算优越性的世界纪录。中国科学家宣布已成功构建量子计算原型机“九章三号”,求解特定问题的速度比目前全球最快的超级计算机快(【1】)。
A. 一万倍

B.一亿倍

C.一百亿倍

D.一亿亿倍

【答案】D

2.北京时间2023年10月26日1时14分,搭神舟十七号载人飞船的长征二号F遥十七运载火箭在酒泉卫星发射中心点火发射,约10分钟后,神舟十七号载人飞船与火箭成功分离,进入预定轨道,航天员乘组状态良好,发射取得圆满成功。1992年9月,中央决策实施载人航天工程,并确定了中国载人航天“三步走”的发展战略,目前我们正处于哪个阶段?(【2】)

A.发射载人飞船,建成初步配套的实验性载人飞船工程,开展空间应用实验。

B.突破航天员出舱活动技术、空间飞行器交会对接技术,发射空间实验室,解决有一定规模的、短期有人照料的空间应用问题。

C.建造空间站,解决有较大规模的、长期有人照料的空间应用问题。

D.建造月球科研实验站,开展系统、连续的月球探测和相关技术实验验证

【答案】C

3.以下和计算机领域密切相关的奖项是(【3】)
A. 奥斯卡奖
B.图灵奖
C.诺贝尔奖
D.普利策奖

【答案】B

【解析】A选项为电影类奖项,C选项中不包含计算机奖项,D选项为新闻界奖项

4.以下运算符中,优先级最高的是(【4】)
A.*=
B.++
C.&&
D.>=

【答案】B
【解析】前缀自增的优先级高于>=,>=的优先级高于逻辑且和四则运算

5.局域网的英文缩写是(【5】)
A.LAN

B. WAN

C. MAN

D.LNA

【答案】A

【解析】B 选项 WAN 是广域网,C 选项 MAN 是坡域网

6.以下变量命名不符合规范的是(【6】)
A. boy

B. char

C.my_name

D.text2

【答案】B
【解析】变量名不能和 C++保留字符发生冲突

7.在 C++中使用流进行输入输出,其中用于屏幕输出的对象是(【7】)

A. cerr

B.cin

C. cout

D. cfile

【答案】C

【解析】A选项为错误信息输出,一般输出到控制台或日志文件:B选项为输入D选项是用于操作文件的类

8.己知:double a=123.4;         int b=a*10;         double c=b/10; 则执行语句: cout<<c<<endl;后输出在屏幕的值为(【8】)

A. 123.4

B.123.4000000

C.123

D.123.000000

【答案】C

【解析】整数变量b和常数 10 运算,结果仍为整数:使用cout 输出时,会隐藏小数点后非有效的0

9.在下列字符中,其ASCII码值最大的一个是(【9】)

A.8

B.m

C.g

D.G

【答案】B
【解析】略

10.一个32位整型变量占用的字节数是(【10】)
A.4
B.8
C.32
D.128

【答案】A

【解析】1位=8字节

11.C++语言中函数返回值的类型是由(【11】)决定的。

A.定义函数时所指定的函数类型

B.调用该函数的主调函数类型

C.return 语句中的表达式类型

D.传递给函数的实参类型

【答案】A
【解析】函数的返回值只和定义时指定的类型有关,与其他无关

12.设”int a=12;”,则执行完语句”a+=a*a;”后,a的值是(【12】)
A. 12
B.144
C.156
D. 288

【答案】C
【解析】将式子完整展开为:a=ata*a,可以计算出结果为 156

13.在下面的一维数组定义中,哪一个有语法错误。(【13】)

A.int a[]={1,2,3};

B.int a[10]={0};

C.int a[5];

D. int a[ ];

【答案】D
【解析】创建数组时,数组容量和数组初始元素两者至少要声明其中之一

14.二进制数 111101转换成十进制是多少?(【14】)
A. 62

B.63

C.60

D.61

【答案】D
【解析】将每个位置的数字乘以对应的2的次方

15.原码、反码和补码是计算机中用来表示带符号整数的三种编码方式,它们在计算机内部的运算和表示过程中发挥重要作用。对于8位二进制来说,7的补码是(【15】)
A.10000111
B.11111001
C.00000111
D.0111001

【答案】B

【解析】正数的补码是原码,负数的补码是反码+1

16.在C++程序中,3%5的运算结果是(【16】)
A.3
B.-2
C.2
D.-3

【答案】A

【解析】略

17.设变量int b,a=5;下列(【17】)表达式计算后,使得变量b的值等于2?
A. b=a/2
B. b=6-(a--)
C. b=a%2
D. b=a>3?3:2

【答案】A

【解析】整数计算,结果仍为整数

18.253和 299的最大公约数是(【18】)
A. 11
B.13
C.23
D.24

【答案】C

【解析】可以使用辗转相除法求出两个数字的最大公约数

19.在C++语言中,运行以下代码后,变量i的最终值是(【19】)

int i=0;while(i<=5){
cout<<i:
i++;}
A.5
B.0
C.1
D.6

【答案】D

【解析】i=6时超过 while 的判断范围,结束循环

20.执行如下程序
int x;
for(int i=l;i<=100;i++){cin>>x;if(x<0)continue;
cout<<i;}
则下面正确的说法是(【20】)
A.当x0时整个循环结束

B.当 x>=0 时,此次循环无输出

C.cout 语句永远也不执行

D.最多输出100个非负整数

【答案】D
【解析】A 选项,当x<0时进入下一轮环:B、C选硕,x>=0时,输出x

二、 填空题        (21~30每题3分,共30分)

21.十进制数 1008 转化为八进制数为:(【21】)

【答案】1760

22.已知主函数中boolP,Q,且boolst=(!P!Q)&&P&&Q,无论P和Q为何初值(保证合法),在执行cout<<st;语句后,屏幕上输出的结果是(【22】)

【答案】0
【解析】当P和Q相等时,!P|!Q和P&8Q 会有一个判断为false;当P和Q不相等时,P&&Q 结果为 false:bool 类型占一个字节的内存,输出时显示为0或

23.C++中当一个函数无返回值时,则该函数应声明为(【23】)类型

【答案】void

24.若有 int        a[10]={1,2,3,4,5,6,7,8,9,10);,则a[a[1]+2*a[2]]的值是(【24】)

【答案】9
【解析】先计算 a[1]+2*a[2],可知题目要求为 a[8]

25.对于递推公式:F(n)=F(n-1)+3,已知F(1)=2,求F(5)的值是(【25】)

【答案】14
【解析】可以从F(1)向后推导

26.有以下程字:
int i,s=0;
for(i=l:i<20;i+=3)s+=i
cout<<s;
程序执行后的输出结果s的值是(【26】)。

【答案】70
【解析】将程序转化为数学表达式:s=1+4+7-10+13-16+19=70

27.定义如下变量和数组
int k;
int a[3][3]={9,8,7,6,5,4,3,2.1}:
则语句 for(k=l;k<3;k++)cout<<a[k][k]<<’的输出结果是(【27】)(用空格分隔每个值)

【答案】5 1
【解析】可以将二维数组按行列排放,输出的元素为a[1][1]和 a[2][2]

28.两个整数的最小公倍数是1925,这两个整数分别处以它们的最大公约数,得到2个商的和是16,这两个整数分别是(【28】)(注:较小的数写在前)。

【答案】175 385
【解析】先对 1925 进行质因数分解,1925 =5x5x7x11,观察到11+5=16,为2个商的和,可以计算出两个数字为5x5x7和11x5x7

29.7人排成一排照相,若要求甲、乙、丙三人不相邻,有(【29】)种不同的挂法。

【答案】1440
【解析】首先将其余四人进行排队,共有24种排列:再将三人穿插进五个空位共有 60 种排列,得到总数为 24x60

30.9 名乒乓球运动员,其中男5名,女4名,现在要选出4人分成两组进行混合双打训练,有(【30】)种不同的分组方法?

【答案】120

【解析】可以先考虑从中选出两人,组成混合双打的小队,共有20种:再考虑选出第二队,此时男女选手各减去1人,共有12种:考虑到顺序问题造成答案重合,相乘后除以2即为答案

三、阅读程序填写结果(31~40每题3分,共30分)

程序一:

#include<iostream)
using namespace std;
int main()
{
    int x, y, z,f[3];
    for(int i=0;i<3;i++) cin>>f[i];
    x=f[0]+f[1]+f[2];
    x=x/F[O];
    y=f[0]+f[2];
    y-y/x;
    z=(y*f[1]+x)/f[2];
    if(f[(x+y+z)%3]>f[2])
        cout<<x<<endl;
    else
        cout<<y+z<<endl;
    return 0;
}
题号第1题第2题第3题
输入数据1 1 12 0 410 15 3
输出数据【31】【32】【33】

【答案】3、2、36
【解析】注意程序内对数组元素的计算,仔细分元素下标即可

程序二:

#include<iostream)
#include<string>
using namespace std;
int main()
{
    string num_list="11223344555666777888999000";
    string message;
    cin>>message;
    for(int i=0;i<message. length();i++)
        if((message[i]>='0')&&(message[i]<='9'))
            cout<<num_list[i];
        else if((message[i]>='A')&&(message[i]<='Z'))
            cout<<num_list[message[i]-'A'];
    cout<<endl;
    return 0;
}
题号第1题第2题第3题第4题
输入数据AKCODEXM_2023LOVEC++1024
输出数据【34】【35】【36】【37】

【答案】15、2723、062334、679324555

【解析】该题目对输入的字符串进行判断,如果输入的是数字字符,直接找出该字符下标在 num_list 中相同下标的元素;如果输入的是大写字母,找出字母对应 ASCII 码减去A 的 ASCII 码的结果,对应 num_list 中下标的元素:其他的输入直接跳过

程序三:

#include<iostream>
using namespace std;
const int NUM=5;
int fun(int n)
{
    if(n<=NUM) return n;
    for(int i=l:i<=NUM;i++)
        if(fum(n-i)<0) return i;
    return -l;
}
int main()
{
    int n;
    cin>>n;
    cout<<fun(n)<<endl;
    return n;
}
题号第1题第2题第3题
输入数据569
输出数据【38】【39】【40】

【笞案】5、-1、3

【解析】可以从前向后递推,根据题目判断,从(5)=5开始,f(6)=-1,f(7)=1, f(8)=2.f(9)=3

四、完善程序        (选择正确的选项填充程序空白部分,41~45每题2分,共10分)

给出 n, m,k(l≤ ,m≤5x105,l≤k≤nxm),请输出在n*m的乘法表中第k小的数。即,给出一个f[i][i]=i*i(1≤i≤n,1≤j≤m)的数组,输出该数组内所有数(包含重复的)从小到大排序后第k大的数。

样例输入:5  5 10                样例输出:5

样例解释:此样例对应的乘法表如下:
1        2        3        4         5

2        4        6        8        10

3        6         9        12        15

4        8        12        16        20

5        10       15        20        25

#include<bits/stdc++.h>
using namespace std;
long long n, m, k;
bool check(long long x)
{
    long long sum =0;
    for(int i=l;i<=n;i++)
    {
        sum +=__________;
    }
    return __________;
}
int main()
{
    scanf( "%11d%11d%11d",&n, &m, &k)
    long long temp=___________;
    long long L=1,R = temp;
    while (L<R)
    {
        long long mid= _______;
        if(check(mid))    R= mid;
        else L= _________;
    }
    printf( “%11d",L);
    return 0;
}

41.第①空应填写?(【41】)
A. min(n, x/i)          B. min(m, x/i)

C. max(n, x/i)         D. max(m, x/i)

42.第②空应填写?(【42】)
A. sum<k         B. sum<= k
C. sum>k         D. sum >= k

43.第③空应填写?(【43】)

A. n

B. k

C. n +m

D. n *m

44、第④空应填写?(【44】)

A. (R + L)/2

B. (R +L+ 1)/2

C. (R-L)/2

D. (R -L- 1)/2

45.第⑤空应填写?(【45】)
A. L + 1           B.mid -1
C.mid + 1        D. mid

【答案】B、D、D、A、C
【解析】本题二维数组的范围取决于n和m,从题意可得两个数字较大,无法直接求出数组中第k小的数字,观察代码,关键变量mid,可以推测出本题使用二分查找,采用逆向思维,找出有多少不超过"mid" 的数字,再判断 mid 和k的大小。其中数组的第i行均为i的倍数,不超过mid的数字有min(mid/i,m)个(m表示列)

  • 33
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值