• GESP C++ 2024年06月一级真题卷


    一、单选题(每题 2 分,共 30 分)

    1 C++ 中,下列不可做变量的是 ( )
    A. five-Star
    B. five_star
    C. fiveStar
    D. _fiveStar

    答案:A

    解析:标识符命名规则,标识符由字母、数字和下划线组成,第一个字符不能是数字

    2 C++ 表达式 3 - 3 * 3 / 5 的值是 ( )
    A. -1.2
    B. 1
    C. 0
    D. 2

    答案:D

    解析:

    在 C++ 中,表达式 3 - 3 * 3 / 5 的值是由运算符优先级决定的。运算符优先级规则是:

    1. **乘法(*)和除法(/)优先级高于加法(+)和减法(-)。
    2. 乘法和除法按从左到右的顺序进行计算。

    让我们逐步计算 3 - 3 * 3 / 5

    1. 计算乘法和除法

      • 3 * 3 先计算得到 9
      • 然后 9 / 5。由于这是整数除法,结果是 1(在 C++ 中,整数除法会舍去小数部分)。
    2. 计算减法

      • 最后计算 3 - 1,结果是 2

    所以,表达式 3 - 3 * 3 / 5 的值是 2

    3 C++ 中,假设 N 为正整数,则表达式 cout << (N % 3 + N % 7) 可能输出的最大值是 ( )。
    A. 6
    B. 8
    C. 9
    D. 10

    答案:B

    解析:

    N % 3 最大是2,N % 7最大的6,所以2+6=8

    4 C++ 语句 printf("5%%2={%d}\n",5 % 2) 执行后的输出是 ( )。
    A. 1={1}
    B. 5%2={5%2}
    C. 5%2={1}
    D. 5 ={1}

    答案:C

    解析:

    1. 格式化字符串 printf("5%%2={%d}\n", 5 % 2)

      • 5%%2 中的 %% 会被解释为单个 %,因为在 printf 中,%% 是表示输出 % 字符的方式。
      • {%d} 表示一个占位符,它将被后面的表达式 5 % 2 的结果替换。5 % 2 是取模运算,结果为 1
    2. 替换后

      • 结果将是 5%2={1}

    最终输出:

    因此,执行后的输出是 C. 5%2={1}

    5 对整型变量 i ,执行 C++ 语句 cin >> i, cout << i 时如果输入 5+2 ,下述说法正确的是()。
    A. 将输出整数 7
    B. 将输出 5
    C. 语句执行将报错,输入表达式不能作为输出的参数
    D. 语句能执行,但输出内容不确定

    答案:B

    解析:

    在 C++ 中,语句 cin >> i 从标准输入中读取一个整数,并将其存储在整型变量 i 中。那么当输入 5+2 时,程序的行为如下:

    分析:

    1. 输入处理

      • 当使用 cin >> i 时,cin 会读取输入的字符,直到遇到第一个非数字字符为止(即读取到空格、非数字字符等时停止)。在输入 5+2 的情况下,cin 将首先读取数字 5,然后遇到 + 符号,输入过程停止,并将 5 存储在变量 i 中。
      • +2 部分将留在输入缓冲区中,尚未处理。
    2. 输出处理

      • cout << i 将输出存储在变量 i 中的值,此时 i 中存储的是 5,因此输出将是 5

    结论:

    • B. 将输出 5 是正确的。
    6 下面 C++ 代码执行后的输出是( )。
    A. 102={102}
    B. a+1={a+1}
    C. a+1={102}
    D. a 先被赋值为浮点数,后被赋值为整数,执行将报错

    答案:C

    解析:%.0f 格式化符表示输出浮点数并省略小数部分(即输出为整数形式)。

    7 表达式 9/4 - 6 % (6 - 2) * 10 的值是 ( )。
    A. -17.75
    B. -18
    C. -14
    D. -12.75

    答案:C

    解析:按照优先级:括号>乘、除和取模>加减

    9/4-6%4*10=2-2*10=-18

    8 下面 C++ 代码执行时输入 10 后,正确的输出是( )。
    A. 5 行代码 1
    B. 6 行代码 1
    C. 5 行代码 1
    D. 6 行代码 1

    答案:C

    解析:输入10,10%3=1,所以输出“第五行代码”,注意%2d,输出两个字符,1是一个字符,不够用空格填充

    9 下面 C++ 代码执行后输出是( )。
    A. 9 45
    B. 10 55
    C. 10 45
    D. 11 55

    答案:C

    解析:

    主要i++和++i的区别:

    i++是先赋值后计算,++i是先计算后赋值

    分析循环和语句:

    1. 初始声明:

      • int Sum = 0, i = 0; 声明并初始化两个整型变量 Sumi,它们的初始值都是 0
    2. for 循环:

      • for ( ; i < 10; ):
        • 这里没有指定初始化表达式和迭代表达式,只有一个循环条件 i < 10
        • 循环的内容是 Sum += i++;。这行代码先将 i 的当前值加到 Sum 中,然后再将 i 自增。
    3. 循环执行过程:

      • 第一次循环:i0Sum 变为 0Sum += 0),然后 i 自增为 1
      • 第二次循环:i1Sum 变为 1Sum += 1),然后 i 自增为 2
      • 第三次循环:i2Sum 变为 3Sum += 2),然后 i 自增为 3
      • 以此类推,直到 i 达到 10
    4. 循环结束后:

      • i 增加到 10 时,循环条件 i < 10 不再满足,循环退出。
      • Sum 的最终值是 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
    5. 输出:

      • cout << i << " " << Sum; 输出 i 的值和 Sum 的值。
      • 此时,i 的值是 10Sum 的值是 45
    10 下面 C++ 代码用于判断 N 是否为质数(只能被 1 和它本身整除的正整数)。程序执行后,下面有关描述正确的是( )。
    A. 如果输入负整数,可能输出 是质数
    B. 如果输入 2 ,将输出 不是质数 ,因为此时循环不起作用
    C. 如果输入 2 ,将输出 是质数 ,即便此时循环体没有被执行
    D. 如果将 if (N >= 2) 改为 if (N > 2) 将能正确判断 N 是否质数

    答案:C

    解析:

    分析程序:

    • N 的值输入:程序首先要求用户输入一个整数 N
    • 判断条件
      • 如果 N >= 2,程序将 Flag 设为 true,并开始检查 N 是否能被 2 到 N-1 之间的任何数整除。
      • 如果 N 在这个范围内被某个数整除,Flag 会被设为 false 并退出循环。
      • 最终,Flag 的值决定了 N 是否为质数。如果 Flagtrue,输出 "是质数";否则输出 "不是质数"。

    分析选项:

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

    • 错误。如果输入负整数,由于 N < 2Flag 将保持 false,所以输出 "不是质数"。这个选项描述不准确。

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

    • 错误。当 N == 2 时,循环不会执行,但 Flagif (N >= 2) 之后被设为 true,因此会输出 "是质数"。

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

    • 正确。对于 N == 2,程序不会进入 for 循环,因为循环条件 i < N 不成立。但是 Flag 被设为 true,所以输出 "是质数"。

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

    • 错误。如果将条件改为 if (N > 2),输入 2Flag 不会被设置为 true,输出将错误地显示 "不是质数"。
    11 下面的 C++ 代码用于求 1~N 之间所有奇数之和,其中 N 为正整数,如果 N 为奇数,则求和时包括 N 。有关描述错误的是( )。
    A. 执行代码时如果输入 10 ,则最后一行输出将是 11 25
    B. 执行代码时如果输入 5 ,则最后一行输出将是 6 9
    C. i += 1 移到 if (i % 2 == 1) 前一行,同样能实现题目要求
    D. 删除 if (i % 2 == 1) ,并将 i += 1 改为 i += 2 ,同样可以实现题目要求

    答案:C

    解析:

    选项C:将 i += 1 移到 if (i % 2 == 1) 前一行,先执行i += 1 ,i直接变成了2,那么sum就加不了1了

    12 如果一个整数 N 能够表示为 X*X 的形式,那么它就是一个完全平方数,下面 C++ 代码用于完成判断 N 是否为一个完全平方数,在横线处应填入的代码是( )。
    A. i == N*N
    B. i*10 == N
    C. i+i == N
    D. i*i == N

    答案:D

    解析:略

    13 执行下面 C++ 代码后输出的 cnt 的值是( )。
    A. 8
    B. 7
    C. 4
    D. 1

    答案:D

    解析:

    分析程序:

    i=0,i*i<64,所以i<8,i每次自增2,所以符合条件的i分别是0,2,4,6一个4个数,合计计数4次,所以cnt是4

    14 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1 级,那他可以选择的认证语言有几种?( )
    A. 1
    B. 2
    C. 3
    D. 4

    答案:C

    解析:scratch、python和c++三种

    15 ENIAC 1946 年投入运行,是世界上第一台真正意义上的计算机,它的主要部件都是()组成的。
    A. 感应线圈
    B. 电子管
    C. 晶体管
    D. 集成电路

    答案:B

    解析:

    计算机的发展一般分为三个主要阶段,每个阶段对应着技术的重大进步和计算机性能的显著提高。

    第一阶段:电子管计算机(1940s-1950s)

    • 时间范围:1940年代至1950年代。
    • 主要技术:使用电子管作为主要的逻辑元件。
    • 代表机型:ENIAC、UNIVAC、IBM 701。
    • 特点:体积庞大、功耗高、发热量大,运算速度相对较慢。主要用于科学计算和军事应用。

    第二阶段:晶体管计算机(1950s-1960s)

    • 时间范围:1950年代中期至1960年代。
    • 主要技术:使用晶体管替代电子管。
    • 代表机型:IBM 1401、IBM 7090。
    • 特点:体积显著减小,功耗和发热量大幅降低,可靠性提高,运算速度明显提升。晶体管的发明使计算机更小、更快、更可靠,推动了商业计算机的普及。

    第三阶段:集成电路计算机(1960s-至今)

    • 时间范围:1960年代至今。
    • 主要技术:使用集成电路(IC),后期发展为超大规模集成电路(VLSI)。
    • 代表机型:IBM System/360、Apple II、IBM PC、现代的个人计算机和服务器。
    • 特点:计算机的性能、存储容量和运算速度持续提高,成本不断降低,体积越来越小。计算机进入家庭和办公场所,普及应用在各个领域。

    二、判断题(每题 2 分,共 20 分)

    1 C++ 代码中变量 X 被赋值为 16.44 ,则 cout << X / 10 执行后输出的一定是 1 ( )

    答案:错

    解析:

    如果x是int类型

    如果x是double类型
    2 C++ 的整型变量 N 被赋值为 10 ,则语句 cout << N / 4 << "->" << N % 4 << "->" << N / 4.0 执行后输出是 2->2->2.0 ( )

    答案:错

    解析:

    3 定义 C++ float 型变量 N ,则语句 cin >> N; cout << int(float(N)) 可以输入正负整数和浮点数, 并将其转换为整数后输出。( )

    答案:对

    解析:略

    4 C++ 的整型 N 被赋值为 5 ,语句 printf("%d*2",N) 执行后将输出 10 。( )

    答案:错

    解析:是5*2

    5 C++ 中, break 语句用于终止当前层次的循环,循环可以是 for 循环,也可以是 while 循环。( )

    答案:错

    解析:是5*2

    6 C++ continue 语句通常与 if 语句配合使用。( )

    答案:对

    解析:略

    7 C++ 代码中,不可以将变量命名为 printf ,因为 printf C++ 语言的关键字。( )

    答案:错

    解析:

    在 C++ 中,printf 不是一个关键字,而是一个标准库函数的名称。printf 是 C 标准库中的函数,用于格式化输出。
    给大家一个建议,如果在DevC++中,如果标识符不是粗体,那么都不是关键字
    8 C++ 中有整型变量 N ,则表达式 N += 8/4//2 相当于 N += 8/(4/2) 。( )

    答案:错

    解析:因为 // 是 C++ 中的注释符号,用于表示单行注释。// 后面的内容会被视为注释,不会参与计算。

    N += 8/4//2 实际上等价于 N += 8/4,即 N += 2

    9 C++ 中定义变量 int N ,则表达式 (!!N) 的值也是 N 的值。 ( )

    答案:错

    解析:

    在 C++ 中,表达式 !!N 是一种将变量 N 转换为布尔值(0 或 1)的技巧。让我们详细分析这个表达式的含义和行为。

    解释 !!N

    1. 单一否定 !N:

      • !N 是逻辑非运算符,用于将 N 转换为布尔值。
      • 如果 N 的值为 0,则 !Ntrue(布尔值 1)。
      • 如果 N 的值非 0,则 !Nfalse(布尔值 0)。
    2. 双重否定 !!N:

      • !!N 先对 N 应用一次逻辑非运算符 !,然后再对结果应用一次逻辑非运算符 !
      • 所以,!!N 结果会是 true(1)或 false(0),具体取决于 N 是否为零。
        • 如果 N0,则 !Ntrue(1),!!N 结果是 false(0)。
        • 如果 N 非零,!Nfalse(0),!!N 结果是 true(1)。

    结论

    • !!N 的值不会等于 N 的值,而是将 N 转换为布尔值后再进行转换:
      • N0 时,!!N 的值是 0
      • N 为非 0 时,!!N 的值是 1
    1. #include
    2. using namespace std;
    3. int main() {
    4. int N1 = 5; // 非零值
    5. int N2 = 0; // 零值
    6. cout << "!!N1 = " << !!N1 << endl; // 输出: 1
    7. cout << "!!N2 = " << !!N2 << endl; // 输出: 0
    8. return 0;
    9. }

    在这个示例中:

    • !!N1 的结果是 1,因为 N1 是非零值。
    • !!N2 的结果是 0,因为 N2 是零值。

    因此,!!N 的值是 N 的布尔表示,转换为 01

    10 GESP 测试是对认证者的编程能力进行等级认证,同一级别的能力基本上与编程语言无关。( )

    答案:对

    解析:略

    三、编程题(每题 25 分,共 50 分)

    编程题 1

    3.1.1 题面描述
    小杨计划在某个时刻开始学习,并决定在学习 秒后开始休息。 小杨想知道自己开始休息的时刻是多少。
    3.1.2 输入格式
    前三行每行包含一个整数,分别表示小杨开始学习时刻的时h 、分m 、秒s ( 1<=h<=12,0<=m<=59 ,0<=s<=59 的值符合 )。
    第四行包含一个整数k ,表示小杨学习的总秒数(注: k的值符合1<=k<=3600)。
    3.1.3 输出格式
    输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。
    1. #include
    2. using namespace std;
    3. int main(){
    4. int h,m,s;
    5. cin>>h>>m>>s;
    6. int k;
    7. cin>>k;
    8. int now=h*60*60+m*60+s;
    9. now+=k;
    10. int hh = now/3600;
    11. now %= 3600;
    12. int mm = now/60;
    13. now %= 60;
    14. cout<" "<" "<"\n";
    15. return 0;
    16. }

    编程题 2

    3.2.1 题面描述
    小杨有一个正整数n ,他想知道n 是否是一个立方数。 一个正整数 n是立方数当且仅当存在一个正整数x 满足x*x*x=n 。
    3.2.2 输入格式
    第一行包含一个正整数 。
    3.2.3 输出格式
    如果正整数 是一个立方数,输出 Yes ,否则输出 No
    1. #include
    2. using namespace std;
    3. int main() {
    4. int n; // 定义一个整数变量 n
    5. cin >> n; // 从标准输入读取一个整数值并存储在变量 n 中
    6. int fl = 0; // 定义并初始化标志变量 fl,初始值为 0
    7. // 遍历从 1 到 n 的每个整数 i
    8. for (int i = 1; i <= n; i++) {
    9. // 如果 i 的立方等于 n
    10. if (i * i * i == n) {
    11. fl = 1; // 设置标志变量 fl 为 1
    12. break; // 跳出循环,因为找到了满足条件的 i
    13. }
    14. }
    15. // 根据标志变量 fl 的值输出结果
    16. if (fl)
    17. cout << "Yes\n"; // 如果 fl 为 1,输出 "Yes"
    18. else
    19. cout << "No\n"; // 如果 fl 为 0,输出 "No"
    20. return 0; // 程序成功结束
    21. }

     

  • 相关阅读:
    Python 页面解析:Beautiful Soup库的使用
    # Vue3 toRef 和 toRefs 函数
    2023C语言暑假作业day6
    站在巨人肩上!阿里内部流传的Kubernetes实战手册,让你事半功倍
    【无标题】
    Thread类中run和start的区别
    基于金豺算法的无人机航迹规划-附代码
    oracle库中数据利用datax工具同步至mysql库
    Vue项目实战之电商后台管理系统(二) 主页模块
    元素定位(绝对、相对、粘滞、固定)
  • 原文地址:https://blog.csdn.net/m0_74586426/article/details/141090572