信奥AC之路-1级
-
第1课 开发环境与基础输出5 主题|小节
-
第2课 算术运算符7 主题|小节
-
第3课 printf与运算输出7 主题|小节
-
第4课 数的进制与拆位6 主题|小节
-
第5课 变量与基础运算17 主题|小节
-
第6课 常量与取整运算8 主题|小节
-
第7课 关系运算8 主题|小节
-
第8课 逻辑运算9 主题|小节
-
第9课 输入与计算进阶10 主题|小节
-
第10课 if语句及双分支语句8 主题|小节
-
第11课 if语句及双分支进阶11 主题|小节
-
第12课 三目运算9 主题|小节
-
第13课 多分支、多if和switch语句11 主题|小节
-
第14课 循环(基本输出)7 主题|小节
-
第15课 循环(While+If)8 主题|小节
-
第16课 循环(计数、求和、求乘积)10 主题|小节
-
第17课 循环进阶(While+)8 主题|小节
-
第18课 do-while及while其他用法8 主题|小节
-
第19课 For循环基础9 主题|小节
-
第20课 For循环进阶8 主题|小节
练习题1:输出1~n中是3的倍数或5的倍数的数
题目描述: 输入一个正整数n,输出1到n中所有是3的倍数或5的倍数的数。
样例输入:
20
样例输出:
3 5 6 9 10 12 15 18 20
代码框架:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// 请补充代码,输出1到n中所有是3的倍数或5的倍数的数
return 0;
}
答案:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int i = 1; // 从1开始
while(i <= n) { // 循环到n
// 判断i是否为3的倍数或5的倍数
if(i % 3 == 0 || i % 5 == 0) {
cout << i << " "; // 满足条件则输出
}
i++; // 更新循环变量
}
return 0;
}
解析: 这道题要求输出1到n中所有是3的倍数或5的倍数的数。使用while循环从1遍历到n,对每个数字判断是否能被3整除或被5整除。若满足条件,则输出该数。
练习题2:输出m~n中所有同时是2和3倍数的数
题目描述: 输入两个正整数m和n (m <= n),输出m到n之间所有是2和3的倍数的数。
样例输入:
10 30
样例输出:
12 18 24 30
代码框架:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
// 请补充代码,输出m到n中所有同时是2和3倍数的数
return 0;
}
答案:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int i = m; // 从m开始
while(i <= n) { // 循环到n
// 判断i是否同时是2和3的倍数
if(i % 2 == 0 && i % 3 == 0) {
cout << i << " "; // 满足条件则输出
}
i++; // 更新循环变量
}
return 0;
}
解析: 这道题要求输出m到n中所有同时是2和3倍数的数。实际上,这相当于找6的倍数,因为一个数若同时被2和3整除,则它必定能被6整除。使用while循环从m遍历到n,对每个数判断是否同时满足被2整除和被3整除的条件。
练习题3:输出m~n中所有十位比个位大的数
题目描述: 输入两个正整数m和n (10 <= m <= n <= 99),输出m到n之间所有十位数字大于个位数字的两位数。
样例输入:
20 50
样例输出:
20 21 30 31 32 40 41 42 43 50
代码框架:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
// 请补充代码,输出m到n中所有十位大于个位的数
return 0;
}
答案:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int i = m; // 从m开始
while(i <= n) { // 循环到n
int shi = i / 10; // 取出十位数字
int ge = i % 10; // 取出个位数字
// 判断十位是否大于个位
if(shi > ge) {
cout << i << " "; // 满足条件则输出
}
i++; // 更新循环变量
}
return 0;
}
解析: 这道题要求输出m到n中所有十位数字大于个位数字的两位数。通过整除和取余运算分别获取十位数字和个位数字,然后判断十位是否大于个位。使用while循环遍历范围内的所有数字,判断条件满足后输出。
练习题4:输出m~n中所有能被3整除且个位为2的数
题目描述: 输入两个正整数m和n (m <= n),输出m到n之间所有能被3整除且个位数字为2的数。
样例输入:
10 100
样例输出:
12 42 72
代码框架:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
// 请补充代码,输出m到n中所有能被3整除且个位为2的数
return 0;
}
答案:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int i = m; // 从m开始
while(i <= n) { // 循环到n
int ge = i % 10; // 取出个位数字
// 判断是否能被3整除且个位为2
if(i % 3 == 0 && ge == 2) {
cout << i << " "; // 满足条件则输出
}
i++; // 更新循环变量
}
return 0;
}
解析: 这道题要求输出m到n中所有能被3整除且个位数字为2的数。需要同时满足两个条件:能被3整除(i % 3 == 0)且个位是2(i % 10 == 2)。使用while循环遍历范围内的所有数字,判断是否满足这两个条件,满足则输出。
练习题5:输出所有十位与个位之和为奇数的两位数
题目描述: 输出所有十位数字和个位数字之和为奇数的两位数。
样例输出:
10 12 14 16 18 21 23 25 27 29 30 32 34 36 38 ...
代码框架:
#include <iostream>
using namespace std;
int main() {
// 请补充代码,输出所有位数和为奇数的两位数
return 0;
}
答案:
#include <iostream>
using namespace std;
int main() {
int i = 10; // 从10开始(第一个两位数)
while(i <= 99) { // 循环到99(最后一个两位数)
int shi = i / 10; // 取出十位数字
int ge = i % 10; // 取出个位数字
// 判断位数和是否为奇数
if((shi + ge) % 2 != 0) {
cout << i << " "; // 满足条件则输出
}
i++; // 更新循环变量
}
return 0;
}
解析: 这道题要求输出所有十位数字和个位数字之和为奇数的两位数。使用while循环从10遍历到99,计算每个数的十位和个位之和,判断是否为奇数(即除以2余数不为0),如果是则输出该数。
判断题
判断题1:在while+if结构中,如果循环体内的if条件永远不满足,则循环内的语句永远不会执行。
答案:错误
解析: 在while+if结构中,if语句只控制其子句的执行,不影响整个循环的执行。如果if条件永远不满足,那么if的子句不会执行,但循环体中if之外的语句仍然会正常执行。例如:
int i = 1;
while(i <= 5) {
cout << "循环执行" << endl; // 这条语句会执行5次
if(false) { // 永远不满足
cout << "条件满足" << endl; // 这条语句永远不会执行
}
i++;
}
判断题2:判断一个数是否是3和5的倍数,可以用if(i % 3 == 0 || i % 5 == 0)
来实现。
答案:错误
解析: 这个条件表达式检查的是i是3的倍数或者是5的倍数,而不是同时是3和5的倍数。如果要判断一个数同时是3和5的倍数,应该使用逻辑与(&&
):if(i % 3 == 0 && i % 5 == 0)
。实际上,一个数同时是3和5的倍数等价于这个数是15的倍数。
判断题3:在循环中,使用if(i % 2 == 0)
可以筛选出所有的偶数。
答案:正确
解析: 表达式i % 2 == 0
判断i除以2的余数是否为0,这正是偶数的定义。因此,该条件可以准确筛选出所有的偶数。
判断题4:如果要判断一个数的十位数字是否为3,可以使用条件 if(i / 10 % 10 == 3)
。
答案:正确
解析: 对于任意整数i,可以通过 i / 10 % 10
提取十位数字。先用i除以10(整除)去掉个位,再对10取余得到十位数字。因此,条件 i / 10 % 10 == 3
可以正确判断一个数的十位数字是否为3。
判断题5:要输出1到100中所有不是3的倍数的数,可以使用条件if(i % 3 != 0)
。
答案:正确
解析: 表达式i % 3 != 0
判断i除以3的余数是否不为0,这正是”不是3的倍数”的定义。因此,该条件可以准确筛选出所有不是3倍数的数。
选择题6:下面代码的输出结果是什么?
int i = 1;
while(i <= 15) {
if(i % 3 == 0 && i % 5 == 0) {
cout << i << " ";
}
i++;
}
A. 3 5 9 15 B. 15 C. 3 6 9 12 15 D. 5 10 15
答案:B. 15
解析: 这段代码输出1到15之间同时是3和5的倍数的数。一个数同时是3和5的倍数,也就是15的倍数。在1到15范围内,只有15满足这个条件。
选择题7:要输出1到100中所有个位数字是6的数,应该使用哪个条件?
A. if(i == 6)
B. if(i / 10 == 6)
C. if(i % 10 == 6)
D. if(i % 6 == 0)
答案:C. if(i % 10 == 6)
解析: 要判断一个数的个位是否为6,需要用该数除以10的余数。表达式i % 10
正是获取个位数字的方法,因此i % 10 == 6
可以判断个位是否为6。
选择题8:下面代码会输出哪些数?
int i = 22;
while(i <= 50) {
if(i / 10 > i % 10 && i % 3 == 0) {
cout << i << " ";
}
i++;
}
A. 21 30 42 B. 30 42 C. 21 24 27 30 42 45 D. 30 36 42 48
答案:B. 30 42
解析: 这段代码输出20到50之间满足两个条件的数:十位大于个位(i / 10 > i % 10
)且能被3整除(i % 3 == 0
)。在这个范围内,只有30和42满足条件。
- 30: 十位是3,个位是0,3>0且30能被3整除
- 42: 十位是4,个位是2,4>2且42能被3整除
其他数要么十位不大于个位,要么不能被3整除,所以不满足条件。
选择题9:如果要输出10到50之间所有能被3整除或能被4整除的数,应该使用哪个条件?
A. if(i % 3 == 0 && i % 4 == 0)
B. if(i % 3 == 0 || i % 4 == 0)
C. if(i % 12 == 0)
D. if(i % 7 == 0)
答案:B. if(i % 3 == 0 || i % 4 == 0)
解析: 要判断一个数能被3整除或能被4整除,需要检查它是否满足”能被3整除”或”能被4整除”这两个条件中的至少一个。使用逻辑或(||
)连接这两个条件:i % 3 == 0 || i % 4 == 0
。
选择题10:下面代码的输出结果是什么?
int i = 10;
while(i <= 20) {
if((i / 10 + i % 10) % 2 == 0) {
cout << i << " ";
}
i++;
}
A. 10 12 14 16 18 20 B. 11 13 15 17 19 C. 11 13 15 19 D. 10 12 14 16 18
答案:B
解析: 这段代码输出10到20之间所有十位数字和个位数字之和为偶数的数。对于两位数,使用i / 10
获取十位数字,使用i % 10
获取个位数字,计算它们的和并判断是否为偶数。在10到20范围内,满足条件的数是:11 13 15 17 19。
选择题
选择题1:下面代码的输出结果是什么?
int i = 1;
while(i <= 10) {
if(i % 2 == 0) {
cout << i * i << " ";
}
i++;
}
A. 1 4 9 16 25 36 49 64 81 100 B. 2 4 6 8 10 C. 4 16 36 64 100 D. 1 9 25 49 81
答案:C. 4 16 36 64 100
解析: 这段代码从i=1开始循环到i=10,每次判断i是否为偶数,如果是则输出i的平方。偶数有:2, 4, 6, 8, 10,它们的平方分别是:4, 16, 36, 64, 100。
选择题2:要输出1到n中所有不是7的倍数的数,应该使用哪个条件?
A. if(i != 7)
B. if(i % 7 == 0)
C. if(i % 7 != 0)
D. if(i / 7 == 0)
答案:C. if(i % 7 != 0)
解析: 判断一个数不是7的倍数,需要检查它除以7的余数是否不等于0。因此,正确的条件是i % 7 != 0
。
选择题3:下面的代码输出结果是什么?
int i = 10;
while(i <= 30) {
if(i % 10 == i / 10) {
cout << i << " ";
}
i++;
}
A. 10 11 12 13 B. 11 22 C. 10 20 30 D. 11 22 33
答案:B. 11 22
解析: 这段代码输出10到30之间所有个位数字等于十位数字的数。使用 i % 10
获取个位数字,使用 i / 10
获取十位数字。在10到30的范围内,满足条件的数只有11和22。
选择题4:下面代码输出哪些数?
int i = 1;
while(i <= 20) {
if(i % 3 == 0 && i % 2 != 0) {
cout << i << " ";
}
i++;
}
A. 3 9 15 B. 3 6 9 12 15 18 C. 6 12 18 D. 2 4 8 10 14 16 20
答案:A. 3 9 15
解析: 这段代码输出1到20中同时满足”是3的倍数”和”不是2的倍数”的数,即奇数的3倍数。这样的数有:3, 9, 15。
选择题5:如果要输出100到999中所有个位和百位相同的数,应该使用哪个条件?
A. if(i / 100 == i % 10)
B. if(i / 100 == i / 10 % 10)
C. if(i % 100 == i / 10)
D. if(i % 10 == i / 10 % 10)
答案:A. if(i / 100 == i % 10)
解析: 对于三位数,百位数字可以通过i / 100
获取,个位数字可以通过i % 10
获取。因此,判断百位和个位相同的条件是i / 100 == i % 10
。
判断题6:在while+if结构中,如果循环条件和if条件都满足,循环体内的所有语句都会执行。
答案:正确
解析: 在while+if结构中,循环条件决定循环体是否执行,而if条件只决定if语句块内的语句是否执行。即使循环条件满足,如果if条件不满足,那么if语句块内的代码不会执行,但循环体中if之外的代码仍会执行。
判断题7:下面代码片段可以输出1到100中所有是7的倍数的数。
int i = 1;
while(i <= 100) {
if(i % 7 == 0) {
cout << i << " ";
}
i++;
}
答案:正确
解析: 这段代码从1遍历到100,使用条件i % 7 == 0
判断i是否是7的倍数。如果满足条件,则输出i。这正确地输出了1到100中所有7的倍数:7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98。
判断题8:要判断一个三位数的个位和百位是否相同,可以使用条件if(i % 10 == i / 100)
。
答案:正确
解析: 对于一个三位数i,i % 10
可以获取个位数字,i / 100
可以获取百位数字。因此,条件i % 10 == i / 100
可以正确判断个位和百位是否相同。
判断题9:下面代码片段可以输出100到999中所有个位比十位小的数。
int i = 100;
while(i <= 999) {
if(i % 10 < (i / 10) % 10) {
cout << i << " ";
}
i++;
}
答案:正确
解析: 这段代码从100遍历到999,使用i % 10
获取个位数字,使用(i / 10) % 10
获取十位数字,然后判断个位是否小于十位。如果满足条件,则输出i。这正确地输出了所有个位比十位小的三位数。
判断题10:对于一个两位数,如果个位和十位的和是奇数,则这个数一定是奇数。
答案:错误
解析: 一个两位数的奇偶性只取决于其个位的奇偶性,与十位无关。例如,数字25的个位和十位之和为2+5=7(奇数),但25本身是奇数;而数字34的个位和十位之和为3+4=7(奇数),但34本身是偶数。因此,个位和十位的和是奇数,不能确定这个数一定是奇数。