理论试题
一、选择题
-
下面哪个循环会至少执行一次循环体? A) while循环
B) for循环
C) do...while循环
D) 以上都不是
答案: C
解析: do...while循环就像"先上车后补票",不管条件如何都会先执行一次循环体,while和for都是先看条件再决定执不执行。 -
这段代码会输出什么?
int i = 5; while(i > 0){ System.out.print(i + " "); i--; }A) 5 4 3 2 1
B) 4 3 2 1 0
C) 5 4 3 2 1 0
D) 无限循环
答案: A
解析: 循环从i=5开始,每次输出i的值后减1,当i=0时条件不成立退出循环,所以不会输出0。 -
想要打印1到100的偶数,for循环空白处应该填什么?
for(int i = 1; _______; i++){ if(i % 2 == 0){ System.out.println(i); } }A) i <= 100
B) i < 100
C) i >= 100
D) i == 100
答案: A
解析: 要包含100这个数,所以用i<=100而不是i<100,i从1开始每次加1,通过if条件筛选出偶数。
二、填空题
-
下面代码输出结果是________。
int count = 3; do { System.out.print(count * 2 + " "); count++; } while(count < 5);答案: 6 8
解析: 第一次count=3输出6,count变成4;第二次count=4输出8,count变成5后不满足条件退出。 -
下面代码空白处应该填________才能输出3次"Hello"。
for(int i = 0; ________; i++){ System.out.println("Hello"); }答案: i < 3
解析: i从0开始,i=0,1,2时循环,共3次,i=3时退出。 -
下面while循环等价于for循环:________。
int j = 10; while(j > 0){ System.out.println(j); j -= 2; }答案:
for(int j = 10; j > 0; j -= 2){ System.out.println(j); }解析: 把while循环的初始化、条件判断和迭代部分整合到for循环的三个表达式中。
三、程序分析题
- 下面代码有什么问题?如何修改?
答案:int k = 1; while(k < 10) System.out.println(k); k++;解析: 原代码缺少大括号,导致只有println在循环内,k++在循环外,会造成无限循环。加上大括号把两条语句都包含在循环体内。int k = 1; while(k < 10){ System.out.println(k); k++; } - 下面两个循环的输出结果相同吗?为什么?
答案: 输出结果相同,都是"0 1 2 "// 循环1 for(int m = 0; m < 3; m++){ System.out.print(m + " "); } // 循环2 int n = 0; do { System.out.print(n + " "); n++; } while(n < 3);
解析: 虽然一个是for循环一个是do...while,但循环条件和迭代方式相同,在初始条件相同的情况下输出结果一致。区别在于do...while至少执行一次,而这里条件满足所以不影响结果。
编程题
编写一个Java程序,使用for循环输出如下数字金字塔:
1
222
33333
4444444
555555555
参考答案:
# 源文件保存为“Pyramid.java”
public class Pyramid {
public static void main(String[] args) {
for(int i = 1; i <= 5; i++) {
// 打印空格
for(int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
// 打印数字
for(int k = 1; k <= 2 * i - 1; k++) {
System.out.print(i);
}
System.out.println();
}
}
}
解析:外层循环控制行数,第一个内层循环控制每行前面的空格数量(随行数增加而减少),第二个内层循环控制每行数字的个数(呈奇数增长)。这种嵌套循环是处理图形输出的典型方法,外层控制行,内层控制每行的内容。
操测题
程序填空
- 补全代码,实现1-100所有7的倍数的和
public class SevenMultiples {
public static void main(String[] args) {
int sum = 0;
int number = 1;
while(________) {
if(________) {
sum += number;
}
________;
}
System.out.println("1-100所有7的倍数的和为:" + sum);
}
}
答案:
while(number <= 100) {
if(number % 7 == 0) {
sum += number;
}
number++;
}
解析:while循环条件控制数字范围在1-100,if判断是否能被7整除,别忘了每次循环后number要自增,不然会死循环。就像数钱时数完一张得拿下一张,不能老盯着同一张看。
- 用do...while改写下列for循环
for(int i=10; i>0; i-=2){
System.out.print(i + " ");
}
答案:
int i = 10;
do {
System.out.print(i + " ");
i -= 2;
} while(i > 0);
解析:do...while就像"先斩后奏",先把事情做了再判断要不要继续。这里先把i=10输出,再减2,然后判断是否大于0。注意初始值要放在循环外面,步长调整放在循环体内。
程序改错
- 找出下面代码中的3处错误
public class LoopError {
public static void main(String[] args) {
int count = 1;
do
System.out.println("正在执行第" + count + "次循环");
count++
while count < 5
}
}
答案:
public class LoopError {
public static void main(String[] args) {
int count = 1;
do {
System.out.println("正在执行第" + count + "次循环");
count++;
} while (count < 5);
}
}
解析:do...while循环体没加花括号就像没穿外套出门,count++少了分号相当于话没说完,while条件缺少括号和小括号。这就像写作文少了标点符号,计算机可看不懂。
- 下面代码想输出5行星号,每行递增,但实际会无限循环,请修正
int stars = 1;
while(stars <= 5) {
for(int j=1; j<=stars; j++); {
System.out.print("*");
}
System.out.println();
}
答案:
int stars = 1;
while(stars <= 5) {
for(int j=1; j<=stars; j++) {
System.out.print("*");
}
System.out.println();
stars++;
}
解析:原代码有三个问题:for循环后面误加分号成了空语句,while循环里忘了stars++导致条件永远成立,就像电梯卡在某一层不动了。内层for循环控制每行星号数量,外层while控制行数,各行其是才能画出漂亮图形。
编程实现
- 用嵌套循环打印九九乘法表(只需要下半部分)
参考答案:1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 ... 9*1=9 9*2=18 ... 9*9=81解析:外层循环i控制行数和被乘数,内层循环j控制每行的列数和乘数,注意j的范围是1到i。打印时用制表符\t对齐更美观,就像表格的列对齐。每完成一行记得换行,好比写完一行字要另起一行。# 源文件保存为“MultiplicationTable.java” public class MultiplicationTable { public static void main(String[] args) { for(int i = 1; i <= 9; i++) { for(int j = 1; j <= i; j++) { System.out.print(i + "*" + j + "=" + (i*j) + "\t"); } System.out.println(); } } } - 编写一个猜数字游戏,随机生成1-100的整数,用户输入猜测,提示"大了"或"小了",直到猜中为止,统计猜测次数。
参考答案:
解析:用Random.nextInt(100)+1生成1-100随机数,就像抽奖箱里摸号码。do...while循环确保至少猜一次,每次记录猜测次数。提示信息要友好,最后公布战绩时要有点仪式感,毕竟猜中不容易。Scanner记得放在循环外避免重复创建,就像不用每次问问题都找个新话筒。import java.util.Scanner; import java.util.Random; public class GuessNumber { public static void main(String[] args) { Random rand = new Random(); int target = rand.nextInt(100) + 1; Scanner sc = new Scanner(System.in); int guess, count = 0; do { System.out.print("请输入你的猜测(1-100):"); guess = sc.nextInt(); count++; if(guess > target) { System.out.println("大了"); } else if(guess < target) { System.out.println("小了"); } } while(guess != target); System.out.println("恭喜!你猜了" + count + "次终于猜中了!"); } }