Skip to content

选择结构

程序设计有三种基本控制结构:顺序结构、选择结构和循环结构。

顺序结构:程序按语句的顺序依次执行。

选择结构:根据是否满足某个条件确定**选择**执行哪些操作

循环结构:根据是否满足某个条件确定**反复**执行某些操作。

单分支

Java
1
2
3
if (条件表达式) {
    //程序语句组
}

趁热打铁:编写程序,从键盘上读取一个整数,若该数是偶数,输出该数。

双分支

Java
1
2
3
4
5
if (条件表达式) {
    //程序语句组1
} else {
    // 程序语句组2
}

趁热打铁:在求圆面积问题中,要求只有当radius>=0时才计算圆的面积,否则,程序给出错误提示。

多分支

if-else if-else多分支

又称阶梯式if-else结构。

举例:输入学生的百分制成绩,打印输出等级的成绩。等级规定为,90分(包括)以上的为“优秀”,80分(包括)以上的为“良好”,70分(包括)以上的为“中等”,60分(包括)以上的为“及格”,60分以下为“不及格”。

switch多分支

Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
switch (expression) { //byte、short、int、char、enum、String
    case value1// 常量或常量表达式
        statements; // 语句组
        [break;] // 可选,结束switch结构
    case value1
        statements;
        [break;]
    // ...
    case value1
        statements;
        [break;]
    default: //所有case都不匹配
        statements;
}

趁热打铁:编写程序,从键盘输入一个年份(如2016年)和一个月份(如2月),输出该月的天数(29)。

分支嵌套

分支语句中的再分支。

Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
/* 单分支 */
if (条件表达式) {
    //程序语句组
    if (条件){
        //...
    }
}

/* 双分支 */
if (条件表达式) {
    //程序语句组1
} else {
    // 程序语句组2
    if (条件){
        //...
    }
}

趁热打铁:求a、b和c中最大值并将其保存到max中,就可以使用一个嵌套的if结构。

条件运算符

简化版的if-else语句:条件 ?表达式1:表达式2

Java
1
2
3
4
5
6
7
if (a > b) { 
   max = a; 
} else { 
   max = b;
}
// 等价于
max = (a > b)? a : b ;

循环结构

Java语言提供了4种循环结构:

  1. while 循环
  2. do-while 循环
  3. for 循环
  4. for each 循环

一般情况下,一个循环结构包含四部分内容:

1)初始化部分

2)循环条件

3)迭代部分

4)循环体部分

while

Java
1
2
3
4
5
[初始化部分]
 while (条件){
     // 循环体
    [迭代部分]
 }

趁热打铁:随机产生一个100~200之间的整数,用户从键盘上输入所猜的数,程序显示是否猜中的消息,如果没有猜中要求用户继续猜,直到猜中为止。

do while

特点:循环体至少被执行一次

Java
1
2
3
4
5
[初始化部分]
 do{
   // 循环体
   [迭代部分]
 }while(条件);

for

Java
1
2
3
for ([初始化部分];[循环条件]; [迭代部分]){
    // 循环体 
}

趁热打铁:编写程序,显示从100到1000之间所有能被5和6整除的数

for each

主要用于对数组和集合元素迭代。

Java
1
2
3
for ([数据类型] 每个元素: 一组元素){
    // 循环体 
}

循环嵌套

循环体中的循环。

Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
while(条件){
    // 外层循环体
     do{
        // 内层循环体
     }while(条件);
    // 其他语句
}

for(初始化;条件;迭代){
    // 外层循环体
    for(初始化;条件;迭代){
      // 内层循环体
    }
    // 其他语句
}

趁热打铁:打印九九乘法口诀表。

break

跳出循环或switch的执行。

Java
1
2
3
4
5
/* 语法格式1 */
break; 

/* 语法格式2 */
break label;

趁热打铁:编程计算1+2+3+…之和,和超过100结束,输出结果。

continue

终止执行当前的迭代,进入下一次迭代。

Java
1
2
3
4
5
/* 语法格式1 */
continue;

/* 语法格式2 */
continue  label;

趁热打铁:编程计算1到10之间的数的和,能被3整除的数除外。

小试牛刀

开发一个让学生练习一位数加法的程序。程序开始运行随机生成两个一位数,显示题目让学生输入计算结果,程序给出结果是否正确。

问题描述:从一副纸牌中任意抽取一张,并打印出抽取的是哪一张牌。

思路:一副牌有4种花色,黑桃、红桃、方块和梅花。每种花色有13张牌,共有52张牌。可以将这52张牌编号,从0到51。规定编号0到12为黑桃,13到25为红桃,26到38为方块,39到51为梅花。可以使用整数的除法运算来确定是哪一种花色,用求余数运算确定是哪一张牌。例如,假设抽出的数是n,计算n/13的结果,若商为0,则牌的花色为黑桃,若商为1,则牌的花色为红桃,若商为2,则牌的花色为方块,若商为3,则牌的花色为梅花。计算n%13的结果可得到第几张牌。余数为0表示为A,余数为1表示2,…余数为12表示K。

问题描述:求最大公约数。

思路:两个正整数的最大公约数(Greatest Common Divisor,GCD)是能够同时被两个数整除的最大整数。例如,4和2的最大公约数是2,16和24的最大公约数是8。一种方法是,假设求两个整数m和n的最大公约数,显然1是一个公约数,但它可能不是最大的。可以依次检查k(k=2,3,4,…)是否是m和n的最大公约数,直到k大于m或n为止。

问题描述:打印输出若干素数

思路:素数又称质数,有无限个。素数定义为在大于1的正整数中,除了1和它本身以外不再有其他因数的数。判断一个正整数number是否是素数,从2开始判断number是否能被这个数整除,若能被它整除,则不是素数,一直到number-1为止,若都不能整除,则是素数。

问题描述:编写程序,要求用户从键盘上输入一个年份,输出该年是否是闰年。符合下面两个条件之一的年份即为闰年:(1)能被4整除,但不能被100整除;(2)能被400整除。

问题描述:编写程序,计算并输出1-1000之间含有7或者是7倍数的整数之和及个数。