Question 35
③ 的判定条件
在判断平方数程序中,③ 处应填什么?
正确答案
D. num == i * i
一句话考点
要判断 num 是否是某个 i 的平方,条件必须写成 `num == i * i`。
Shared Context
完善程序(1)判断平方数
补全一个判断完全平方数的函数,重点是循环边界、判定条件和布尔返回值。
算法思想
这是最直接的穷举法,虽然不是最优,但和题意完全一致。
判定边界
如果上界比 `sqrt(num)` 少 1,就会漏掉像 16、25 这样的完全平方数。
语法点
判断条件里一定要用 `==`,写成 `=` 会变成赋值,语义完全错误。
cpp
共享程序片段#include <iostream>
#include <vector>
using namespace std;
bool isSquare(int num) {
int i = ①;
int bound = ②;
for (; i <= bound; ++i) {
if (③) {
return ④;
}
}
return ⑤;
}
int main() {
int n;
cin >> n;
if (isSquare(n)) {
cout << n << " is a square number" << endl;
} else {
cout << n << " is not a square number" << endl;
}
return 0;
}题组阅读提醒
题目希望枚举正整数 x,判断是否存在 `x * x == n`。因此最自然的写法是从 1 开始,枚举到 `floor(sqrt(num))`。
只要在循环中发现平方刚好等于 num 就返回 `true`,枚举完仍没找到则返回 `false`。
Prompt
题目与选项
在判断平方数程序中,③ 处应填什么?
A. num = 2 * i
B. num == 2 * i
C. num = i * i
D. num == i * i
Quick Check
做题抓手
先判断题型
先确定这行代码在整体算法中的职责,再看四个选项谁能完成这个职责。
再核对边界
第一轮很爱在闭区间、下标偏移、递归终止条件和布尔返回值上设陷阱。
最后看输出层次
尤其是阅读程序题,要分清函数返回值、变量值和最终打印值是不是同一件事。
Explanation
详细讲解
Step 1
题目的目标是判断“是否存在 i,使得 `i * i` 恰好等于 `num`”。因此条件必然是比较关系,不是赋值。
Step 2
选项 D `num == i * i` 正好表达了这个意思。
Step 3
A、C 都是赋值语句,不是判断;B 比较的是两倍关系,也不符合完全平方数定义。
Pitfalls
易错点
- 把 `==` 写成 `=`,这是程序补全里的高频失分点。
- 看错题意,把平方误写成二倍。
Extend
拓展补充
- 只要题目问“某个条件是否成立”,优先考虑比较运算符,而不是赋值运算符。
返回总览
回到整套试卷
返回题目总览页,继续从目录、知识图谱或其他分区进入。
所属分区
返回 完善程序
回到首页对应分区,继续顺序刷题或查看同类知识点。
上一题
第 34 题
② 的上界
下一题
第 36 题
④ 的返回值