B72
第14章基础知识练习(自测)
引入
章前总览 覆盖:枚举因数、奇数求和、完全平方 / 兄弟数、位增数取位。先作答再提交。
怎么用:
- 选择题 5 道。
- 填空类题目先看循环上下界是否含两端。
- 错题回到 B69–B71 复习。
第14章自测
每题选一个选项。
1. 求正整数所有因数的代码中,横线处应填( )。
cin >> n;
for (_____________)
if (n % i == 0)
cout << i << endl;要因数含 n 自身,须枚举到 n;且要用 i++ 真正递增。i<n+1 等价于 i≤n。
2. 下面代码求 1~N 内所有奇数之和。有关描述错误的是( )。
int i = 1, Sum = 0;
while (i <= N) {
if (i % 2 == 1)
Sum += i;
i += 1;
}
cout << i << \" \" << Sum;A、B 模拟正确;D 用步长 2 累加奇数可行。把 i+=1 挪到 if 前会先加后判,漏掉 1 且结果错误。
3. 判断 N 是否为完全平方数,横线处应填( )。
for (int i = 0; i <= N; i++)
if (___________________)
cout << N << \"是一个完全平方数\n\";完全平方数即存在 i 使 i*i==N。
4. “兄弟数”指 N 能写成 X*(X+1)。下列填空中,有几个能完成功能?( )
i)N==i*(i+1)
ii)N==i*(i-1)
iii)N/(i+1)==i
iv)N/(i-1)==i
i)N==i*(i+1)
ii)N==i*(i-1)
iii)N/(i+1)==i
iv)N/(i-1)==i
i)直接对应定义;ii)令 i=X+1 时等价。iii、iv 用整除会产生误判,且 iv 在 i=1 时还有除零风险。
5. 判断位增数(从高位到个位逐渐增大)时,横线处应填( )。
cin >> N;
__________________;
while (N) {
n1 = N % 10;
if (n1 >= n2) {
cout << 0;
return 1;
}
n2 = n1, N /= 10;
}
cout << 1;先取出个位作为右侧参照 n2,并去掉个位;再从右往左比较:若左侧数字不小于右侧数字则不是位增数。