返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 15, 主题|小节 5
进行中

15.4 循环+条件练习题

2025年9月22日
课 进展
0% 完成

练习题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本身是偶数。因此,个位和十位的和是奇数,不能确定这个数一定是奇数。