2024年6月GSEP(C++)一级认证真题讲解

注意!做题时长为2小时,孩子做完题目后对照讲解视频和讲解分析,针对薄弱点,进行有效的专项提高。 

👑讲解视频

2024.6GESPc++真题讲解

👑讲解分析

1 单选题(每题 2 分,共 30 分)🎈

答案与解析:选A 。

[解释]:C++中,变量名不能包含连字符(-),因此选项 A 是不可做变量名的。其他选项 B、C、D 都是符合C++命名规则的变量名。

答案与解析:选D。

[解释]:要计算表达式 3 - 3 * 3 / 5 的值,需要按照运算符优先级和结合性的规则进行计算。在这个表达式中,乘法和除法的优先级高于减法,且乘法和除法具有左结合性。

按照这些规则,首先计算乘法和除法,然后再计算减法。计算过程如下:

3−3∗3/5 = 3−9/5 = 3−1.8 = 1.2

答案与解析:选B 。

[解释]:我们可以考虑当 N 取不同的值时,表达式的结果。在这里,N 是正整数。

首先,我们观察 % 运算符的性质:对于正整数 N,N % M 的结果范围是 0 到 M-1。

因此,当 N % 3 和 N % 7 的结果都取到各自的最大值时,即 N % 3 = 2,N % 7 = 6 时,表达式的结果最大。此时,N % 3 + N % 7 = 2 + 6 = 8

答案与解析:选C 。

[解释]:在C++语句 printf("5%%2={%d}\n", 5 % 2) 中,%% 表示输出一个百分号 %。因此,实际上会输出字符串 "5%2={1}",其中 %d 会被 % 2 的结果替换。对于表达式 5 % 2,计算结果为 1。

 答案与解析:选B.

[解释]:程序在输入“5+2”后,他会挨个读取内容,读到“+”后发现不符合条件,所以停止录入,所以a里是5。

 答案与解析:选C。

[解释]:在这段给出的C++代码中,变量 a 被声明为浮点数 float 类型。首先,a 被赋值为 101.101,然后又被重新赋值为整数 101。 在 printf 函数中,"%.0f" 表示输出浮点数,小数部分保留0位,且被a+1替代,进而a+1的值是101+1=102,除了"%.0f" 之外的字符串原封不变的输出。所以最终输出结果是a+1={102}。

答案与解析:选B。

[解释]:要计算表达式 9/4 - 6 % (6 - 2) * 10 的值,我们需要按照运算符的优先级和结合性规则进行计算。在这个表达式中,括号具有最高优先级,然后是取模运算 %,接着是乘法和除法,最后是加法和减法。

按照这些规则,我们依次计算表达式的值:

  1. 首先计算括号内的表达式 (6 - 2),结果为 4
  2. 接着计算取模运算 6 % 4,结果为 2
  3. 然后计算乘法 2 * 10,结果为 20
  4. 最后计算除法 9/4,结果为 2
  5. 将步骤3和步骤4的结果相减,即 2 - 20,结果为 -18

 答案与解析:选C 。

[解释]:在这段给出的C++代码中,当输入为 10 时,我们来逐行分析代码的执行:

  1. 用户输入为 10,赋值给变量 N
  2. 根据 if (N % 3),计算 N % 3,即 10 % 3,结果为 1
  3. 因为 10 % 3 的结果为非零值,所以执行 if 分支,输出 "第5行代码 1"

 答案与解析:选C。

[解释]:在这段代码中,循环会执行10次,每次将 i 加到 Sum 中,然后递增 i。最终输出 i 的值和 Sum 的值。由于循环结束后 i 的值为 10Sum 的值为 45。因此,这段代码执行后的输出是 10 45

综上所述,这段 C++ 代码执行后的输出是:10 45

 答案与解析:选C 。

在这段给出的 C++ 代码中,根据输入的整数 N 判断其是否为质数。让我们逐项分析选项:

A. 如果输入负整数,可能输出“是质数”

  • [解释]:这个选项是不正确的。因为代码中通过 if (N >= 2) 来判断输入的整数是否大于等于2,如果输入为负整数,不会进入判断为质数的逻辑,因此不会输出“是质数”。

B. 如果输入2,将输出“不是质数”,因为此时循环不起作用

  • [解释]:这个选项也是不正确的。虽然输入为2时循环体不会被执行,但是由于2符合质数的定义(只能被1和它本身整除),所以输出应该是“是质数”。

C. 如果输入2,将输出“是质数”,即便此时循环体没有被执行

  • [解释]:这个选项是正确的。因为2符合质数的定义,即使循环体没有被执行,输出应该是“是质数”。

D. 如果将 if (N >= 2) 改为 if (N > 2) 将能正确判断N是否质数

  • [解释]:这个选项是不正确的。将 if (N >= 2) 改为 if (N > 2) 会导致无法判断2是否为质数,因为2符合质数的定义,应该被判断为质数。

答案与解析:选C 。

让我们逐项分析这段给出的 C++ 代码,以及关于描述的选项:

       【A选项】 当输入为 10 时,代码执行后的输出是 11 25。

[解释]:这个选项是正确的。因为代码会计算1到10之间所有奇数的和,包括10在内,最后输出的 i 为 11Sum 为 25

        【B选项】 当输入为 5 时,代码执行后的输出是 6 9。

[解释]:这个选项是错误的。因为代码会计算1到5之间所有奇数的和,包括5在内,最后输出的 i 为 6Sum 为 9

        【C选项】 将 i += 1 移到 if (i % 2 == 1) 前一行,同样能实现题目要求。

[解释]:这个选项是正确的。将 i += 1 移到 if (i % 2 == 1) 前一行,不会影响代码逻辑,仍然能够正确计算1到N之间所有奇数的和。

        【D选项】 删除 if (i % 2 == 1),并将 i += 1 改为 i += 2,同样可以实现题目要求。

[解释]:这个选项是错误的。删除了判断奇数的条件和改变了增加的步长,会导致计算结果不正确,无法实现题目要求。

 答案与解析:选D.

[解释]:在这段 C++ 代码中,我们需要填入的代码应该是用来判断 N 是否为一个完全平方数的条件。根据题目描述,一个整数 N 能够表示为 XX 的形式时,即 N = XX,那么它就是一个完全平方数。因此,在横线处应填入的代码是:i*i == N。

 答案与解析:选C

[解释]: 在这段代码中,循环从 i = 0 开始,每次迭代 i 增加 2,直到 i*i 不小于 64 为止。然后统计循环执行的次数,即 cnt 的值。

我们来逐步分析循环的执行过程:

  1. 当 i = 0 时,i*i = 0,满足条件,cnt 加一。
  2. 当 i = 2 时,i*i = 4,满足条件,cnt 再加一。
  3. 当 i = 4 时,i*i = 16,满足条件,cnt 再加一。
  4. 当 i = 6 时,i*i = 36,满足条件,cnt 再加一。
  5. 当 i = 8 时,i*i = 64,不满足条件,循环结束。

因此,循环执行了 4 次,最终输出的 cnt 的值为 4。

 答案与解析:选C ,

[解释]:  分别是C++,Python,Scratch。

答案与解析: 选B。

[解释]:感应线圈不用制造计算机,集成电路和晶体管发明时间分别是1958年和1947年,其中晶体管是电子管的升级版,在第一台计算机制造出来之后才发明成功。 

2 判断题(每题 2 分,共 20 分)🎈 

答案与解析: ×,如果变量X定义为float或者double那么16.44 除以 10 的结果是 1.644,如果变量X定义的数据类型是int,那么结果才是1。

答案与解析: × 如果变量N=10,那么

  • N/4 = 10/4 = 2.5(int) = 2,这是因为N和4都是int类型,那么相除的结果会自动变成int。
  • N%4= 10%4 = 2,
  • N/4.0 = 10 / 4.0 = 2.5(float) = 2.5, N为int,4.0为float,那么相除的结果会是float。

 所以最后的结果是 2->2->2.5。

答案与解析: √,正整数,负整数和浮点数都被允许进行int和float的强制转换操作,先是转变为浮点型,最后都会变成整数输出。

 答案与解析: ×printf 函数中的格式化字符串 "%d*2" 中只会输出 N 的值,不会进行计算,所以输出为 "5*2"。

 答案与解析: √, break和continue用于for与while。

  答案与解析:√, 是的,满足一定的条件才去continue。

 答案与解析: ×, printf 是 C 语言的函数,而不是 C++ 的关键字,因此在 C++ 中可以将变量命名为 printf。

答案与解析: ×,在 C++ 中,除法运算符 / 和 //(整数除法)的优先级是相同的,它们都属于乘法和除法运算符,且遵循从左向右的结合规则。因此,在表达式中同时存在 / 和 // 运算符时,它们将按照出现的顺序依次计算。

例如,对于表达式 8 / 4 // 2,根据从左向右的结合规则,首先计算 8 / 4,结果为 2,然后再计算 2 // 2,结果为 1。

 答案与解析: ×, !N的值为0,!!N的值为!0=1,最后结果是1。

  答案与解析:√,GESP测试主要是对编程能力进行认证,与具体编程语言无关,语言只是工具,对算法和编程的理解才是最重要的。

3 编程题(每题 25 分,共 50 分) 🎈

 

#include<bits/stdc++.h>
using namespace std;
int main(){
    int h,m,s;
    //小杨开始学习的时间 小时h 分钟m 秒钟s
    cin>>h>>m>>s;
    //小杨学习多久就去休息 秒钟s
    int k;
    cin>>k;
    /* 思路很简单,统一时间单位为秒,因为只有单位统一才能进行加减乘除,一般都是统一为最小的单位,
      在时分秒中,秒最小,所以全部变为秒钟
      分钟*60 = 秒
      小时*60 = 分钟
      故小时*60*60 = 秒钟  
    */
    int now=h*60*60+m*60+s;
    // 小杨学习多久就去休息已经是秒钟了,直接加上,比如我今天第80s开始学习100s后休息,那么我只需要使用80+100再转换为时分秒就完成,如何转换回去?乘法变除法即可,除不尽的要余数给下一位除
    now+=k;
    // 转换回去必须先计算 最大的开始 时
    int hh = now/3600;
    //余出代表分钟的秒
    now %= 3600;
    // 秒变成分钟
    int mm = now/60;
    // 余出秒钟
    now %= 60;
    cout<<hh<<" "<<mm<<" "<<now<<"\n";
}

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    //设置一个开关,如果是立方数就让他等于1,如果不是就等于0,也就是不变,方便我们最后的输出
    int fl=0;
    // 进入循环,从1 遍历 到 n ,所以结束条件需要是n + 1
    for(int i=1;i<=n;i++){
        //如果是立方数 满足 i*i*i = n
        if(i*i*i==n){
            //标记一下 说明n是立方数
            fl=1;
            //已经知道这个数是立方数了,直接结束循环退出了
            break;
        }
    }
    // 打印结果,如果f1标记了f1=1,那么代表是立方数。
    if(fl)cout<<"Yes\n";
    else cout<<"No\n";
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大气层煮月亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值