zoukankan      html  css  js  c++  java
  • 07-流程控制

    顺序结构:程序从上到下执行。

    分支结构:

    if-else if - else

    switch-case

    循环结构:

    for

    while

    do-while

    //============================================================================================================================

    1.if-else条件判断结构

    1.1.

    结构一:

    if(条件表达式){

    执行表达式

    }

    结构二:二选一

    if(条件表达式){

    执行表达式1

    }else{

    执行表达式2

    }

    结构三:n选一

    if(条件表达式){

    执行表达式1

    }else if(条件表达式){

    执行表达式2

    }else if(条件表达式){

    执行表达式3

    }

    ...

    else{

    执行表达式n

    }

    1.2.说明:

    1》. else 结构是可选的。

    2.》 针对于条件表达式:

       > 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。

       > 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。

       > 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。

    3》. if-else结构是可以相互嵌套的。

    4》. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。

    2.switch-case选择结构

    switch(表达式){

    case 常量1:

    执行语句1;

    //break;

    case 常量2:

    执行语句2;

    //break;

    ...

    default:

    执行语句n;

    //break;

    }

    2.说明:

    ① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。

      当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构

      末尾结束为止。

    ② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

    ③ switch结构中的表达式,只能是如下的6种数据类型之一:

       byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

    ④ case 之后只能声明常量。不能声明范围。

    ⑤ break关键字是可选的。

    ⑥ default:相当于if-else结构中的else.  

      default结构是可选的,而且位置是灵活的。

    3.如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

    4.break在switch-case中是可选的

    1 练习1:如何获取一个随机数:10 - 99
    2 
    3 int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99]
    4 
    5 System.out.println(value);
    6 
    7 //公式:[a,b]  :  (int)(Math.random() * (b - a + 1) )+ a

    //============================================================================================================================

    1.循环结构的四要素

    ① 初始化条件

    ② 循环条件  --->是boolean类型

    ③ 循环体

    ④ 迭代条件

    说明:通常情况下,循环结束都是因为②中循环条件返回false了。

    2.三种循环结构:

    2.1 for循环结构

    for(①;②;④){

    }

    执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

    2.2 while循环结构

    while(②){

    ③;

    ④;

    }

    执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

    说明:

    写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!

    for和while循环总结:

    1》. 开发中,基本上我们都会从for、while中进行选择,实现循环结构。

    2》. for循环和while循环是可以相互转换的! 

      区别:for循环和while循环的初始化条件部分的作用范围不同。

    3》. 我们写程序,要避免出现死循环。

    2.3 do-while循环结构

    do{

    ③;

    ④;

    }while(②);

    执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②

    说明:

    1》.do-while循环至少会执行一次循环体!

    2》.开发中,使用for和while更多一些。较少使用do-while

    3》.“无限循环”结构: while(true) 或 for(;;)

    总结:如何结束一个循环结构?

    方式一:当循环条件是false时

    方式二:在循环体中,执行break

    4.嵌套循环

    1》.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

      内层循环:循环结构A

      外层循环:循环结构B

    2》.说明:

    ① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次

    ② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次

    ③ 外层循环控制行数,内层循环控制列数

     1 【典型练习】
     2 
     3         //练习一:
     4 
     5         /*
     6 
     7         ******
     8 
     9         ******
    10 
    11         ******
    12 
    13         ******
    14 
    15         */
    16 
    17         for(int j = 1;j <= 4;j++ ){
    18 
    19             for(int i = 1;i <= 6;i++){
    20 
    21                 System.out.print('*');
    22 
    23             }
    24 
    25             System.out.println();
    26 
    27         }
    28 
    29         //练习二:
    30 
    31         /*            i(行号)        j(*的个数)
    32 
    33         *            1            1
    34 
    35         **            2            2
    36 
    37         ***            3            3
    38 
    39         ****            4            4
    40 
    41         *****            5            5
    42 
    43         */
    44 
    45 
    46 
    47         for(int i = 1;i <= 5;i++){//控制行数
    48 
    49             for(int j = 1;j <= i;j++){//控制列数
    50 
    51                 System.out.print("*");
    52 
    53             }
    54 
    55             System.out.println();
    56 
    57         }
    58 
    59 
    60 
    61         //练习三:九九乘法表
    62 
    63 public static void main(String[] args) {
    64 
    65         for(int i =1;i<=9;i++){
    66 
    67             for(int j=1;j<=i;j++){
    68 
    69                 System.out.print(j+"*"+i+"="+(i*j) + "	");
    70 
    71             }
    72 
    73             System.out.println();
    74 
    75         }
    76 
    77     }

    补充:衡量一个功能代码的优劣:

    1.正确性

    2.可读性

    3.健壮性

    4.高效率与低存储:时间复杂度 、空间复杂度 (衡量算法的好坏)

    如何理解流程控制的练习: 流程控制结构的使用 + 算法逻辑

    //============================================================================================================================

    break和continue关键字的使用

    使用范围循环中使用的作用(不同点)相同点

    break:switch-case

    循环结构中结束当前循环关键字后面不能声明执行语句

    continue:循环结构中结束当次循环关键字后面不能声明执行语句

    //============================================================================================================================

    【练习四】

     1 //一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)
     2 //例如6=1+2+3.编程 找出1000以内的所有完数
     3 public static void main(String[] args) {
     4         System.out.println("1-1000之间的完数有:");
     5         for(int i=1;i<=1000;i++){
     6             int sum = 0;
     7             for(int j=1;j<i;j++){
     8                 if(i%j==0){
     9                     sum +=j;
    10                 }
    11             }
    12             if(sum == i){
    13                 System.out.println(i);
    14             }
    15         }
    16     }

    【练习五】

     1 //输入两个正整数m和n,求其最大公约数和最小公倍数
     2 int m = 12, n = 28;
     3 //获取m和n的较大值
     4 int max = (m > n)? m : n;
     5 //获取m和n的较小值
     6 int min = (m < n)? m : n;
     7 
     8 //求m和n的最大公约数
     9 for(int i = min;i >= 1;i--){
    10   if( m % i == 0 && n % i == 0){
    11     System.out.println("m和n的最大公约数是:" + i);
    12     break;
    13   }
    14 }
    15 //求m和n的最小公倍数
    16 for(int i = max;i <= m * n;i++){
    17     if( i % m == 0 && i % n == 0){
    18     System.out.println("m和n的最小公倍数是:" + i);
    19     break;
    20     }
    21 }

    【练习六】

     1 //求调和级数中从第多少项开始值大于10
     2 //调和级数的第n项形式为:1+1/2+1/3+…+1/n
     3 public static void main(String[] args) {
     4         double sum = 0.0;
     5         int i = 1;
     6         while (true) {
     7             sum += 1.0 / i;
     8             if (sum > 10) {
     9                 break;
    10             }
    11             i++;
    12         }
    13         System.out.println(i);
    14 }

    【练习七】

    /**打印如下的图形:三角形
    
       *
       * * *
       * * * * *
       * * * * * * *
       * * * * *
       * * *
       *
    */
    for (int i = 0; i < 7; i++) {
                if (i < 4) {
                    for (int j = 0; j < 2 * i + 1; j++) {
                        System.out.print("* ");
                    }
                    System.out.println();
                } else {
                    for (int k = 0; k < 13 - 2 * i; k++) {
                        System.out.print("* ");
                    }
                    System.out.println();
                }
    }

    【练习八】

    /**打印如下的图形:菱形1
        * 
       * * 
      * * * 
     * * * * 
    * * * * * 
     * * * * 
      * * * 
       * * 
        * 
    */
    // 上半部分
            for (int i = 0; i < 5; i++) {
                // 输出“-”
                for (int j = 0; j < 4 - i; j++) {
                    System.out.print(" ");
                }
    
                // 输出“* ”
                for (int k = 0; k < i + 1; k++) {
                    System.out.print("* ");
                }
                System.out.println();
            }
            // 下半部分
            for (int i = 0; i < 4; i++) {
                for (int j = 0; j < i + 1; j++) {
                    System.out.print(" ");
                }
                for (int k = 0; k < 4 - i; k++) {
                    System.out.print("* ");
                }
                System.out.println();
    
    }

  • 相关阅读:
    【缓慢的自学ing】 自己写一个《Minecraft》记录
    Unity随笔3:按钮的"导航"功能
    【随随随随笔】一些STL的糖
    【算法氵】筛法
    【纯感慨】好吃的蒟蒻
    【随随随随笔】OJ错题记录
    【纯感慨】最不擅长的就是配置软件
    【C++Primer笔记】顶层const、常量指针
    hdu 2475 动态树
    hdu 1281 棋盘游戏 网络流
  • 原文地址:https://www.cnblogs.com/shici/p/13239145.html
Copyright © 2011-2022 走看看