CCF-GESP 2025年3月 等级认证 C++一级真题+解析+知识点总结

CCF-GESP 2025年3月C++一级真题+解析+知识点拓展

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

在这里插入图片描述
答案:D
考察知识点:【计算机应用常识(AI 技术的社会应用)、逻辑思维能力。】
【解析】
选项 A :《哪吒 2》被描述为 “贺岁片” 且 “进入全球票房榜”,显然属于影视作品范畴,而非操作系统。
选项 B 分析:“DeepSeek” 是人工智能(AI)领域的技术或产品
选项 C:《哪吒 2》作为电影,其核心功能是通过剧情、画面等内容提供文化娱乐,不具备 “生成软件” 的技术能力。
选项 D :若 “DeepSeek” 是人工智能系统(如 AI 创作工具),则其完全可能具备基于给定场景(如《哪吒 2》的画面、角色设定等)生成剧情脚本的能力。

在这里插入图片描述
答案:D
考察知识点:集成开发环境(IDE)对源代码文件编辑操作的理解,区分代码编辑与非代码内容插入。
解析:在编辑源代码文件时,修改变量定义、保存修改、撤销修改都是常规代码编辑操作;插入执行截图不属于代码编辑范畴,无法在源代码编辑时执行,选D。

在这里插入图片描述
答案:D
考察知识点:C++变量命名规则(由字母、数字、下划线组成,且不能以数字开头,不能含特殊字符 )。
解析:A含-非法;B含$非法;C含%非法;D由下划线、字母、数字组成,合法,选D。

在这里插入图片描述
答案:C
考察知识点:【C++ 语言关键字的识别与区分】
【解析】
A. abs:并非 C++ 关键字,而是 C/C++ 标准库中的函数,用于计算整数的绝对值。
B. cin:不是关键字,而是 C++ 标准输入流对象,用于从标准输入设备读取数据(如cin >> x;)。
C. do:是 C++ 关键字,用于构成do-while循环语句(语法为do { 语句 } while (条件);),属于流程控制关键字。
D. endl:不是关键字,而是 C++ 标准库中的操纵符,用于输出换行并刷新缓冲区(如cout << endl;)。

关键字与标准库元素的区分
C++ 关键字具有固定语法功能(如do、if、while等),而cin、endl、abs等属于标准库提供的工具,本质是类对象或函数,并非语言关键字。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3f6b2feb1c8d45659a3f1c71cb6c6f47.png在这里插入图片描述
答案:C
考察知识点:break 语句的使用场景(只能在循环语句或 switch 语句中使用 )。

解析:break 用于跳出循环或 switch,A 是 do - while 循环,B 是 for 循环,D 是 switch,都可配合 break;C 是 if 条件判断,break 不能用于 if,会编译报错 。

在这里插入图片描述
答案:B
考察知识点:printf格式化输出,包括宽度控制(%2d 占两位宽度 )、补零(%02d 不足两位补零 )及普通字符输出。

在这里插入图片描述
答案:C
考察知识点:C++ 字符串字面量的语法规则(双引号用于界定字符串,单引号用于界定字符 )
解析:C++ 中,双引号用于表示字符串字面量,单引号用于字符。原代码中双引号括起的是字符串,不能直接替换为两个单引号(两个单引号是不合法的字符组合形式,无法正确表示字符串 );A、B 是合法修改字符串内容,D 虽然不常规但语法上三个双引号在 C++ 标准里不影响(实际是错误写法,这里按题目逻辑,C 是明确错误 ),所以错误的是 C。

在这里插入图片描述
在这里插入图片描述
答案:D
考察知识点:C++ 中算术运算符的优先级与结合性(除法 / 和取余 % 同优先级,从左到右计算 )
解析:先算 16 / 4 = 4,再算 4 % 2 = 0,所以结果是 0 ,选 D 。

知识点拓展
以下是 C++ 考试中常考的运算符优先级(从高到低,搭配典型场景速记 ):
一、高频必记(优先级从高到低 )

优先级运算符场景示例结合性
1(最高)()(函数/表达式分组)、[](数组下标)a = (3 + 2) * 5;(括号改变顺序)左→右
2++(前缀自增)、--(前缀自减)、!(逻辑非)、~(按位取反)、*(解引用)、&(取地址)int b = ++a;(先自增再赋值)右→左
3*(乘法)、/(除法)、%(取模)16 / 4 % 2(先除后取模)左→右
4+(加法)、-(减法)a + b * c(先乘后加减)左→右
5<<(左移)、>>(右移)num << 2(位运算,优先级高于关系运算)左→右
6<<=>>=(关系比较)a < b + 3(先算 b+3 再比较)左→右
7==(等于)、!=(不等于)a == b * 2(先乘后判断相等)左→右
8&&(逻辑与 > 逻辑或)a > 0 && b < 5(先算关系运算,再逻辑与)左→右
9=(赋值)、+=-= 等复合赋值a = b + 3;(先算 b+3 再赋值)右→左

二、典型易错题对比

  1. ++/-- 与赋值

    • 前缀 ++a:先自增,再参与运算(如 b = ++a;a 先 +1,再赋值给 b )。
    • 后缀 a++:先参与运算,再自增(如 b = a++;a 先赋值给 b,再 +1 )。
  2. 逻辑运算 vs 位运算

    • &&(逻辑与):短路特性(左边为假,右边不执行 );&(位与):无短路,逐位运算。
    • 优先级:& 高于 &&!逻辑运算符 &&/|| 优先级低于关系运算,但高于赋值;位运算 &/| 优先级低于关系运算,高于赋值。
  3. 复合赋值的“陷阱”

    • a += b * c:等价于 a = a + (b * c)(先算乘,再复合赋值 ),而非 (a + b) * c

三、速记口诀(简化版 )
“单算移关与,逻条赋逗低”
(单目→算术→移位→关系→逻辑与→逻辑或→条件→赋值→逗号 ,优先级递减 )

考试遇运算符嵌套,优先看括号,再按优先级拆分,结合性辅助确认方向(如赋值、单目是“右结合”,算术、逻辑是“左结合” ),就能快速解题啦~

在这里插入图片描述
答案:D
考察知识点:C++ 整数除法与取余运算的优先级及结果类型

12 % 3 + 12 / 50 + 2       // 12%3=0,12/5=2  2  

常见误区:

  • 混淆整数与浮点数除法:若其中一个操作数为浮点数(如 12.0 / 5),结果会是 2.4,但题目中未明确说明 N为浮点数,默认按整数处理。
  • 错误计算优先级:误认为 % 优先级高于 /,但实际上二者同级,按从左到右计算(本题中顺序不影响结果)。
    在这里插入图片描述答案:D。
    考察知识点:C++ 中printf格式化输出(格式控制符与普通字符的输出规则,%d用于输出整数,双引号内普通字符原样输出 )。
    解析:printf中{N}*{N}={%d*%d}里,{N}*{N}={和}是普通字符原样输出,%d对应N(值为 10 ),所以输出{N}*{N}={10*10} ,选 D。
    在这里插入图片描述
    答案:D
    考察知识点:C++ 整数除法与乘法的运算顺序及结果,整数除法会截断小数部分 。
    解析:输入 first = 100second = 200 ,先算 first / second ,即 100 / 200 = 0(整数除法截断小数),再乘以 second0 * 200 = 0 ,输出 0 ,选 D 。

在这里插入图片描述
答案:C
考察知识点:C++ 中逻辑表达式、取余运算,对“能被 2 整除且除以 7 余数为 2”条件的逻辑转换 。
解析:“能被 2 整除”等价于 i % 2 == 0!(i % 2)i % 2 != 1 ;“除以 7 余数为 2”是 i % 7 == 2 。C 选项中 !(i % 7) 是“除以 7 余数为 0”,不符合需求,不能实现,选 C 。

等价写法对比

表达式含义示例(i=4示例(i=5
i % 2 == 0余数等于0,即能被2整除4 % 2 → 0 ✔️ true5 % 2 → 1false
!(i % 2)余数取反,即余数为0时为真!(0) → ✔️ true!(1) → ❌ false
i % 2 != 1余数不等于1,即余数为04 % 2 → 0 ✔️ true5 % 2 → 1false

在这里插入图片描述
答案:A
考察知识点:C++ 循环中整数的累加运算,以及对称区间整数求和的规律(从 -n 到 n-1 的和为 -n )。
解析:循环 i 从 -1000 到 999 ,可看作 -1000 到 999 的整数相加,其中 -999 和 999 、 -998 和 998 等对称数相加为 0 ,最后剩下 -1000 ,所以 tnt 最终为 -1000 ,选 A 。

在这里插入图片描述
答案:A
考察知识点:C++ 中 for 循环的执行流程、continue 语句的作用(跳过本次循环剩余语句,进入下一次循环判断 )。
解析:

  1. 循环条件是 i < 100 ,每次循环 i += 5
  2. i 为 96 时,满足 i < 100 ,执行 continue ,然后 i 变为 101 。
  3. 此时判断 101 < 100 不成立,循环结束,i 的值是 101 。
    在这里插入图片描述
    答案:C
    考察知识点:C++循环、条件判断(continuebreak 作用,以及取余运算逻辑 )
    解析:ontinue 是一个控制流语句,用于立即跳过当前循环体的剩余部分
    i从5开始,每次+5遍历到95。i为偶数时continue跳过tnt +=1,奇数才执行。同时找i%3==0 && i%7==0(即i是21倍数),第一个这样的i是105(超出循环)?不,循环i<100i最大95,实际循环中i依次是5、10、15…95 。其中奇数i有5、15、25、35、45、55、65、75、85、95 ,共10个,执行到这些itnt +=1,且循环内无break触发(因无i同时被3和7整除且小于100 ),所以tnt最终为10,选C 。

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

在这里插入图片描述答案:正确(√)
考察知识点:高级编程语言的执行原理(高级语言需通过编译或解释转换为机器指令执行 )
解析:C++、Python作为高级语言,代码需经编译(C++)或解释(Python)转化为机器指令,由计算机硬件执行,所以该表述正确。

在这里插入图片描述

  • 答案:错误(×)
  • 考察知识点:C++ 算术运算符(*%)的运算规则,取余运算结果与操作数的关联性。
  • 解析N * 2 % N 结果取决于 N 。如 N = 1 时,1*2%1 = 0N = 3 时,3*2%3 = 0 ,并非恒为 2 ,结果随 N 变化。

在这里插入图片描述

  • 答案:错误(×)
  • 考察知识点:C++ 数据类型(char)的存储特性,cin 输入规则及 ASCII 码运算。
  • 解析char 存字符 ASCII 码,输入 10 时,cin 只读首个字符 '1'(ASCII 是 49 ),计算 49 * 2 = 98 ,输出不是 20 ,因类型与输入处理不匹配。
    在这里插入图片描述
  • 答案:正确(√)
  • 考察知识点:C++ continue 语句的作用,循环结构中流程控制的逻辑简化。
  • 解析continue 用于跳过循环剩余代码,但此代码中 continue 后无额外逻辑,删除后 if-else 正常执行奇偶判断,程序效果不变。
    在这里插入图片描述
  • 答案:错误(×)
  • 考察知识点:C++ 标识符(变量名)的命名规则,合法标识符的定义。
  • 解析_ 是 C++ 合法标识符(变量名),可用于循环变量,代码语法合规,能正常输出 * ,不会报错。
    在这里插入图片描述
  • 答案:正确(√)
  • 考察知识点for循环的执行流程(初始化、条件判断、增量、循环体执行逻辑 )。
  • 解析i初始为3,满足i < 5,输出3i += 2i = 5,不满足i < 5,循环结束。实际只输出3? 哦,错了!重新看:for (int i = 3; i < 5; i += 2) ,第一次i=3,输出3;然后i += 2变为55 < 5不成立,循环结束。所以只输出3,答案是错误(×) 。之前分析错误,核心是循环条件判断:i < 5i=3 执行后,i 变为5 ,不满足条件,循环仅执行一次,输出3 ,并非35
    在这里插入图片描述
  • 答案:错误(×)
  • 考察知识点for循环遍历、表达式逻辑判断(i * 2 < i * i 何时为真 ),以及布尔值输出(C++ 中 boolint 输出特性 )。
  • 解析:循环i09
    • i=00*2 < 0*00 < 0false(输出0
    • i=12 < 1false(输出0
    • i=24 < 4false(输出0
    • i=36 < 9true(输出1
    • i=48 < 16true(输出1
    • i=59:均满足true
      实际输出0 0 0 1 1 1 1 1 1true(即1 )出现6次,不是7次,答案错误(×)
      在这里插入图片描述
  • 答案:错误(×)
  • 考察知识点:C++ 变量命名规则(合法标识符的构成:字母、数字、下划线,且不能含 - 等特殊字符 )。
  • 解析user-Name 含非法字符 - ,不是合法变量名,答案错误(×)
    在这里插入图片描述
  • 答案:错误(×)
  • 考察知识点continuebreak 的区别(continue 跳过本次循环剩余代码,break 终止整个循环 )。
  • 解析continue 是跳过当前循环迭代剩余部分,进入下一次迭代;break 才是提前结束循环。答案错误(×)
    在这里插入图片描述
  • 答案:错误(×)
  • 考察知识点scanf 输入规则(%d 只读取整数部分,输入 3.6N 接收 3 ),以及整数除法与乘法的运算顺序。
  • 解析scanf("%d", &N) 输入3.6N 实际为3%d 截断小数);计算3 / 3 * 5 = 5 ,不是6 。答案错误(×)

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<cmath> 
using namespace std;
int main(){
	int n,x,y;
	cin>>n>>x>>y;
	cout<<n-ceil(y*1.0/x);
	return 0;
} 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;  // 读取整数个数
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;  // 读取需要处理的整数
        // 核心逻辑:四舍五入到最近整十数
        int remainder = num % 10;  // 取个位数字
        if (remainder < 5) {
            num -= remainder;  // 小于5则舍去个位(如43 → 40)
        } else {
            num += (10 - remainder);  // 大于等于5则进位到下一个整十(如58 → 60)
        }
        cout << num << endl;  // 输出结果
    }
    return 0;
}

以下是用 C++ 实现“将整数四舍五入到最近整十数”的代码:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;  // 读取整数个数
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;  // 读取需要处理的整数
        // 核心逻辑:四舍五入到最近整十数
        int remainder = num % 10;  // 取个位数字
        if (remainder < 5) {
            num -= remainder;  // 小于5则舍去个位(如43 → 40)
        } else {
            num += (10 - remainder);  // 大于等于5则进位到下一个整十(如58 → 60)
        }
        cout << num << endl;  // 输出结果
    }
    return 0;
}

四舍五入核心

  • num % 10 取个位数字 remainder
  • remainder < 5,直接减去个位(如 43 → 43 - 3 = 40 )。
  • remainder ≥ 5,加上 10 - remainder 进位(如 58 → 58 + 2 = 60 )。

输出:每个数处理完直接输出,符合题目“每行一个结果”的要求。


有问题/建议,欢迎指出~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值