当前位置: 代码网 > it编程>编程语言>C/C++ > CCF-GESP 等级考试 2023年12月认证C++一级真题解析

CCF-GESP 等级考试 2023年12月认证C++一级真题解析

2024年07月28日 C/C++ 我要评论
第 1 题 以下C++不可以作为变量的名称的是( )。:A第 2 题 C++表达式10 - 3 * (2 + 1) % 10的值是( )。:B第 3 题 假设现在是上午⼗点,求出N⼩时(正整数)后是第⼏天⼏时,如输⼊20⼩时则为第2天6点,如N输⼊4则为今天14点。为实现相应功能,应在横线处填写代码是( )。:B第 4 题 下面的程序用于判断N是否为偶数,横线处应填写代码是( )。:A==第 5 题 下面对C++代码执行后输出的描述,正确的是( )。:B。

2023年12月真题

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

正确答案:a
解析

  • a: 变量名不能包含空格,因此 “ccf gesp” 是不合法的。
  • b: “ccfgesp” 是合法的,合符变量命名规则,使用了大小写字母。
  • c: “ccfgesp” 同样是合法的,使用了大小写字母,符合命名规则。
  • d: “ccf_gesp” 使用了下划线和大写字母,这也是合法的。

正确答案:b
解析

  • a: 0 不正确,实际计算得1。
  • b: 正确答案,按照操作符优先级计算得1。
  • c: 2 不正确,实际计算得1。
  • d: 3 不正确,实际计算得1。

正确答案:b
解析

  • a: 不正确,计算顺序颠倒,会导致天数和小时数错误。
  • b: 正确的计算方式,正确处理小时数和天数的换算。
  • c: 不正确,没有加上当前的时间10点。
  • d: 不正确,10 / 24 结果为0,10 % 24 结果为10,无法正确计算时间。

正确答案:a
解析

  • a: 正确,判断条件符合偶数的定义。
  • b: 语法错误,应为比较操作 == 而非赋值操作 =
  • c: 不正确,因为该条件判断奇数,而非偶数。
  • d: 不正确,因为该条件判断奇数,而非偶数。

正确答案:b
解析

  • a: 如果输入的n是小于等于2的整数,第5行将输出0:不正确,对于n=2,输出为1。
  • b: 如果输入的n是大于等于2的整数,第5行将输出n-1:正确,循环从1到n-1,共计n-1次。
  • c: 如果输入的n是大于等于2的整数,第5行将输出n:不正确,输出应为n-1。
  • d: 以上说法均不正确:不正确,选项b是正确的。

正确答案:c
解析

  • a: 不正确,循环执行次数少于10。
  • b: 不正确,循环执行次数少于9。
  • c: 正确,i从1开始,每次增加3,共执行3次。
  • d: 不正确,循环执行次数多于1次。

正确答案:a
解析

  • a: 正确,总和为90。
  • b: 不正确,总和达到90。
  • c: 不正确,总和超过20。
  • d: 不正确,总和超过10。

正确答案:c
解析

  • a: 不正确,循环执行次数少于11。
  • b: 不正确,循环执行次数少于10。
  • c: 正确,n从10开始,每次减2,共执行5次。
  • d: 不正确,循环执行次数多于4次。

正确答案:d
解析

  • a: 不正确,只会在第一次满足条件时计数,错误。
  • b: 不正确,只会在第一次和第二次满足条件时计数,错误。
  • c: 语法错误,应为cnt += 1
  • d: 正确,计数器在每次满足条件时自增1。

正确答案:d
解析

  • a: 不正确,代码有错误。
  • b: 不正确,代码有错误。
  • c: 不正确,代码有错误。
  • d: 正确,代码中访问未定义的变量i

正确答案:b
解析

  • a: 不正确,计算错误。
  • b: 正确,10 + 7 + 4 = 21。
  • c: 不正确,计算错误。
  • d: 不正确,计算错误。

正确答案:d
解析

  • a: 正确,合法的类型转换和赋值。
  • b: 正确,合法的类型转换和赋值。
  • c: 正确,合法的类型转换和赋值。
  • d: 不正确,缺少括号,语法错误。

正确答案:b. 3 5

解析:

  • a. 3:不正确,‘c’ 输出后没有 break,将继续执行下一个 case。
  • b. 3 5:正确,‘c’ 的 case 输出 3,继续执行 ‘d’ 的 case,输出 5。
  • c. 3 5 9:不正确,执行到 ‘d’ 的 case 时,遇到 break,跳出 switch。
  • d. 以上都不对:不正确,b 选项是正确的。

正确答案:c
解析

  • a: 不正确,麦克风用于接收语音指令,是必须的。
  • b: 不正确,扬声器用于提供语音反馈,是必须的。
  • c: 正确,油量表仅用于显示油量,不直接影响选路。
  • d: 不正确,传感器用于感知环境,是必须的。

正确答案:b
解析

  • a: 不正确,图灵是计算机科学的奠基人之一,但现代计算机体系结构主要基于冯·诺依曼的设计。
  • b: 正确,冯·诺依曼体系结构是现代计算机的基础设计。
  • c: 不正确,阿塔纳索夫设计了早期的电子计算机,但其结构未广泛应用于现代计算机。
  • d: 不正确,尽管他们是eniac计算机的设计者,但现代计算机体系结构主要基于冯·诺依曼的设计。

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

正确答案:√

解析:

  • c++中的 int(3.14) 会将浮点数3.14转换为整数3。

正确答案:×

解析:

  • 逗号运算符返回最后一个表达式的值,所以 cout << (2 * 3, 3 % 10, 2 + 3) 实际输出为5。

正确答案:×

解析:

  • i 的值依次为1、4、7,当 i 达到10时不满足 i < 10,循环结束,所以 i 的值不会达到10。

正确答案:×

解析:

  • 前导0表示八进制,所以 010 为八进制的10,即十进制的8,001 为八进制的1,所以表达式的值为8 + 100 + 1 = 109。

正确答案:√

解析:

  • 在c++中,if语句的条件表达式可以是int类型,非零值为真,零为假。

正确答案:√

解析:

  • while(1) 是一个无限循环,continue 语句会使得控制流直接回到循环的开头,因此会导致死循环。

正确答案:×

解析:

  • '1'+'1' 的ascii值相加等于98,不等于字符’2’的ascii值50,因此表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果是 flag=2,与 flag==2 的结果不同。

正确答案:×

解析:

  • scanf 不是c++的关键字,可以用作变量名,尽管不建议这样做以避免混淆。

正确答案:×

解析:

  • dev c++ 是一个集成开发环境(ide),不是操作系统。

正确答案:√

解析:

  • 所有的 while 循环都可以通过 for 循环的初始化、条件和递增部分来实现,因此可以相互转换。

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

3.1 编程题 1 (小杨的考试)

3.1.1 问题描述

今天是星期 x,小杨还有 n 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 7 表示星期日)

3.1.2 输入描述

输入 2 行,第 1 行一个整数 x(1 ≤ x ≤ 7);第 2 行一个整数 n(1 ≤ n ≤ 364)。

3.1.3 输出描述

输出一个整数,表示小杨考试那天是星期几。

3.1.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.1.5 样例输入 1
1
6
3.1.6 样例输出 1
7
3.1.7 样例解释 1

今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 7 表示。

3.1.8 样例输入 2
5
3
3.1.9 样例输出 2
1
3.1.10 样例解释 2

今天是星期 5,那么 3 天后就是星期 1。

3.1.11 参考程序
#include <stdio.h>
int main(int argc, char **argv) {
    int x, n;
    // 从标准输入读取两个整数,表示今天是星期几和还有几天考试
    scanf("%d%d", &x, &n);
    // 计算考试那天是星期几,并输出结果
    printf("%d\n", (x - 1 + n % 7) % 7 + 1);
    return 0;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 xnx 表示今天是星期几,n 表示还有多少天就是考试日。
  2. 公式推导:

    • 由于一周有 7 天,我们可以利用模运算来简化计算。例如,今天是星期 x,再过 n 天的情况可以用 (x + n) 来表示星期几。
    • 但是直接用 (x + n) 可能会超出 7,因此需要取模 (x + n) % 7 来将值保持在 1 到 7 之间。
    • 具体公式为 (x - 1 + n % 7) % 7 + 1,其中:
      • x - 1 是将 x 转换为从 0 开始的索引(即 x 为 1 时,代表第 0 天)。
      • n % 7 是计算 n 天后是几天内的第几天(避免超过一周)。
      • (x - 1 + n % 7) % 7 计算从 0 开始的索引,得到一个在 0 到 6 范围内的值。
      • 最后再加 1 将索引转换回从 1 开始的星期几表示。
  3. 输出结果:

    • 将计算结果输出,即考试当天是星期几。

详细解释计算过程:

  • 如果今天是星期 x,距离考试还有 n 天,那么我们可以通过 x + n 计算出考试日的星期几。
  • 例如,今天是星期 1,距离考试还有 6 天,则 1 + 6 = 7,即星期日(7 表示星期日)。
  • 由于一周只有 7 天,所以需要对总天数取模运算以确保结果在 1 到 7 之间。
  • 公式 (x - 1 + n % 7) % 7 + 1 通过转换和取模确保结果在正确范围内。
    通过这种方式,程序能够准确地计算出小杨考试当天是星期几,并输出结果。

3.2 编程题 2 (小杨报数)

3.2.1 问题描述

小杨需要从 1 到 n 报数。在报数过程中,小杨希望跳过 m 的倍数。例如,如果 n 为 5,m 为 2,那么小杨就需要依次报出 1、3、5。
现在,请你依次输出小杨报的数。

3.2.2 输入描述

输入 2 行,第 1 行一个整数 n(1 ≤ n ≤ 100);第 2 行一个整数 m(1 ≤ m ≤ 10)。

3.2.3 输出描述

输出若干行,依次表示小杨报的数。

3.2.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.2.5 样例输入 1
5
2
3.2.6 样例输出 1
1
3
5
3.2.7 样例输入 2
10
3
3.2.8 样例输出 2
1
2
4
5
7
8
10
3.2.9 参考程序
#include <stdio.h>

int main(int argc, char **argv) {
    int n, m, i;
    // 从标准输入读取两个整数,表示报数的范围和需要跳过的倍数
    scanf("%d%d", &n, &m);
    // 从1到n进行循环
    for(i = 1; i <= n; i++) {
        // 如果i不是m的倍数,输出i
        if(i % m != 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 nmn 表示报数的范围,m 表示需要跳过的倍数。
  2. 循环处理:

    • 使用一个 for 循环从 1 到 n 进行遍历。
    • 在循环中,使用 if 条件判断 i 是否是 m 的倍数,即 i % m != 0。如果 i 不是 m 的倍数,则输出 i
  3. 输出结果:

    • 将所有满足条件的数逐行输出,即小杨报的数。

详细解释计算过程:

  • 例如,输入 n = 5m = 2 时:

    • 循环从 1 开始到 5:
      • 1 % 2 != 0,输出 1。
      • 2 % 2 == 0,跳过 2。
      • 3 % 2 != 0,输出 3。
      • 4 % 2 == 0,跳过 4。
      • 5 % 2 != 0,输出 5。
    • 输出结果为 1, 3, 5。
  • 通过这种方式,程序能够准确地输出小杨报的数,跳过指定倍数的数。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com