GESP2024年9月认证C++二级( 第一部分选择题(9-15))


🎯 第9题 ------ 两个判断

1、代码:

cpp 复制代码
int a,b;
cin >> a >> b;   //  a = 1  b = 0
if(a&&b)          
    cout << ("1"); //&& 要左右两边为真,有0就是假
else if(!(a||b))
    cout << ("2"); // (a||b)为真,!(a||b)为假
else if(a || b)
    cout << ("3"); //  a||b 为真,输出 3
else
    cout << ("4");

2、✅ 正确答案:C、 3


3、逻辑运算符:

运算符 名称 功能描述 返回值规则
&& 逻辑与 两侧表达式同时为真 时返回true,否则返回false 左侧为false时直接返回false(短路求值);否则计算右侧表达式
|| 逻辑或 两侧表达式一侧为真 时返回true,否则返回false 左侧为true时直接返回true(短路求值);否则计算右侧表达式
! 逻辑非 对表达式结果取反truefalsefalsetrue 操作数为true时返回false,为false时返回true


🎯 第10题 ------ 数数循环次数

1、代码

cpp 复制代码
int loopCount = 0;
for (int i = 1; i < 5; i += 2)
    loopCount += 1;
cout << (loopCount);

2、🎬 一步步跑程序

(1)循环规则:

cpp 复制代码
i = 1
i < 5
每次 i += 2

(2)运行过程:

i = 1 ✅

loopCount = 1

i = 3 ✅

loopCount = 2

i = 5 ❌(不小于5)

停止!


(3)最终:

cpp 复制代码
loopCount = 2

(4)✅ 正确答案:B、 2


(5)🎯 关键注意点

i += 2 是跳着走!不要习惯看成 i++



🎯 第11题 ------ 打印数字三角形

1、题目给出的输出是:

cpp 复制代码
1
2 3
3 4 5
4 5 6 7
...

2、代码结构:

cpp 复制代码
for (int i=1; i< lineNum+1; i++){
    for(int ________)
        cout << j << " ";
}

3、🎬 观察规律

第一行:从 1 开始到1结束,打印1个数

第二行:从 2 开始到3结束,打印2个数

第三行:从 3 开始到5结束,打印3个数


4、每一行都是:

👉 从 i 开始

👉 打印 i 个数


5、所以内层循环应该是:

cpp 复制代码
j = i; j < i*2; j++

6、✅ 正确答案:C、 j = i; j < i*2; j++



🎯 第12题 ------ 数字倒过来

1、题目要求:

输入 123

输出 321
输入 120

输出 21


2、🎬 讲解

(1)我们用一个变量 rst 存结果。

每次:

cpp 复制代码
rst = rst * 10 + N % 10
N = N / 10

(2)效果举例:

N = 123

第一次:

rst = 3

N = 12
第二次:

rst = 32

N = 1
第三次:

rst = 321

N = 0

结束!


✅ 正确答案:A、rst = rst * 10 + N % 10 N = N / 10


3、拆数题模版:

cpp 复制代码
while (N > 0){
  
   n%10;  //求余数,取个位数,在前

   n/10;  //整数,去除个位数,在后

}


🎯 第13题 ------ 平均分程序

1、代码里:

cpp 复制代码
while (1)

很多小朋友会害怕 😆

其实它表示:

"无限循环,直到 break"


2、判断选项:

A 说 while(1) 错误 ❌

后面有退出循环的条件,输入成绩的老师,随时输入-1都可以停止。


**B.**如果输入负数,将结束输入,并正确输出 ✅

cpp 复制代码
if (score < 0)
    break;

**C.**如果输入的学生成绩含有小数,程序将无法正常执行❌

输入小数不会出问题 ✅

因为:

cpp 复制代码
int score;

虽然定义的是整数!

但是输入小数不会程序无法执行。

但是计算结果有误差,这个出题写法,有欠缺。


**D.**变量 int score 初始值不确定,但不影响程序执行✅

cpp 复制代码
int score;
cin >> score;

通过键盘输入赋值,是正确的方法。


3、✅ 正确答案:A / C



🎯 第14题 ------ 判断质数

1、代码

cpp 复制代码
for(i = 2; i < num; i++)
    if ( ______ ){
        cout << "NO";
        break;
    }

2、🎬 讲解

(1)什么是质数?

👉 只能被1和自己整除


(2)判断方法:

从 2 开始试除:

如果:

cpp 复制代码
num % i == 0

(3)说明找到了因数

不是质数!


(4)所以横线填:

cpp 复制代码
num % i == 0

(5)✅ 正确答案:B



🎯 第15题 ------ 与7有关的数

1、规则:

  • 能被7整除

  • 或者含有数字7


2、代码中:

cpp 复制代码
while (!Flag && M){
    if (M % 10 == 7){
        Flag = true;
        break;
    }
    M /= 10;
}

3、看下题目选项

**A.**删除break语句不会导致死循环,但有时会导致结果错误

cpp 复制代码
    if (M % 10 == 7){
        Flag = true;   
        break;         //快速跳出
    }

删除break语句不会导致死循环,✅️

但有时会导致结果错误 ❌️


**B.**删除 M /= 10 将可能导致死循环

cpp 复制代码
M /= 10

循环永远不会变

就会:

💥 死循环!✅️


**C.**删除 M = N 并将其后代码中的M变量改为N,并调整输出同样能完成相关功能

cpp 复制代码
if (M % 7 == 0)
    Flag = true;      //   判断整除在前

while (!Flag && M){
    if (M % 10 == 7){
        Flag = true;  //   判断有数字7在后
        break;
    }
    M /= 10;
}

删除 M = N 并将其后代码中的M变量改为N,不影响结果✅


**D.**删除 break 语句不会导致死循环,但有时会影响效率

break 语句,在这个程序中是快速跳出,删除影响效率 ✅


4、✅ 正确答案:**A.**删除break语句不会导致死循环,但有时会导致结果错误


相关推荐
wuyk5559 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无9 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152009 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
不会代码的小猴10 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
烧酒同学15 小时前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染
@呱呱爱学习17 小时前
C++大成之路_ STL容器_ Vector
开发语言·c++
码匠许师傅17 小时前
【C++ 面试真题】19. 聊聊 C++ 的迭代器
开发语言·c++·面试
qeen8717 小时前
【数据结构】红黑树的算法原理解析与实现
开发语言·数据结构·c++·算法·红黑树
码匠许师傅18 小时前
【C++ 面试真题】20. 聊聊 C++ 的标准库常用算法
c++·算法·面试
白色冰激凌19 小时前
[SECS/GEM研究] (六)SML与数据序列化
c++·secs/gem