第13章基础知识练习(自测)
章前总览 覆盖:break / continue 模拟、质数计数、switch 贯穿、while(1) 退出。先作答再提交。
怎么用:
- 选择题 10 道 + 判断题 11 道。
- 遇 continue 要想:本轮后面还做不做、i 还会不会变。
- 错题回到 B65–B67 复习。
选择题选一个选项;判断题选「正确」或「错误」。
cnt = 0;
for (int i = 1; i < 20; i++) {
if (i % 2)
continue;
else if (i & 3 == 0 && i % 5 == 0)
break;
cnt += i;
}
cout << cnt;i&3==0 因优先级变成 i&(3==0),恒为假,break 不会触发;奇数 continue,偶数全部累加得 90。
N = 10;
cnt = 0;
while (1) {
if (N == 0) break;
cnt += 1;
N -= 2;
}
cout << cnt;N 依次为 10,8,6,4,2 时各加一次 cnt,共 5 次后 N 变为 0 再 break。
cin >> N;
cnt = 0;
for (int i = 1; i < N + 1; i++)
if (N % i == 0)
________;
if (cnt == 2)
cout << N << "是质数。";
else
cout << N << "不是质数。";统计因数个数,每找到一个因数就 cnt+=1;质数恰好有 2 个因数。
进入 case 'C' 输出 3,再落到 case 'D' 输出 5 后 break。
for (int i = 1; i < N + 1; i++)
if (________________)
cnt += 1;能整除才计数,条件是 N%i==0。
N=2 时 Flag 先被设为 true,for 条件 i<2 不成立,循环体不执行,仍输出是质数。
int N = 0;
for (int i = 1; i < 10; i += 2) {
if (i % 2 == 1)
continue;
N += 1;
}
cout << N;i 取 1,3,5,7,9 全是奇数,每次都 continue,N 始终为 0。
int tnt = 0;
for (int i = 5; i < 100; i += 5) {
if (i % 2 == 0)
continue;
tnt += 1;
if (i >= 50)
break;
}
cout << tnt;奇数 i:5,15,25,35,45,55;到 55 时 tnt 变为 6 且 i≥50 后 break。
int i;
for (i = 1; i < 100; i += 5)
continue;
cout << i << endl;i 按 1,6,…,96 递增,再 +5 得 101,条件失败退出,输出 101。
int tnt = 0;
for (int i = 5; i < 100; i += 5) {
if (i % 2 == 0)
continue;
tnt += 1;
if (i % 3 == 0 && i % 7 == 0)
break;
}
cout << tnt << endl;奇数且为 5 的倍数共 10 个;其中没有同时被 3、7 整除的,不会 break,tnt=10。
for (int i = 1; i < 10; i++) continue;
for 的 i++ 仍会执行,循环会正常结束。
条件恒真且没有任何 break,会一直循环。
break 对 for / while / do-while 都适用。
for 与 while 中都可以用 break。
一般在满足某条件时才 continue。
一般在满足某条件时才 break。
int N = 0;
for (int i = 0; i < 10; i++) {
continue;
N += 1;
}
cout << N;每次都 continue,N+=1 达不到,输出 0。
int i;
for (i = 0; i <= 100; i++)
continue;
cout << i;循环结束时 i 为 101,不是 100。
先执行到 break 就会离开循环,不会“抵消”。
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
printf("偶数");
continue;
} else
printf("奇数");
}if-else 已经互斥;去掉 continue 后偶数分支仍不会落入 else。
提前结束整个循环是 break;continue 只结束本次循环。