程序流程控制4

多重循环控制

介绍:

1)将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for循环称为外层循环,在里面的for循环称为内层循环。【建议一般使用2层,最多不要超过3层】

2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的档次循环,开始下一次的循环。

3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。


应用实例:

1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的评分均【学生的成绩从键盘输入】

编程时两大绝招
(1) 先易后难,即将一个复杂的问题分解成简单的问题。
(2) 先死后活

func main() {

  //分析实现思路
  //1.统计1个班的成绩情况,每个班有5名同学,求出改班的平均分
  //2.学生数就是5个 [先死后活]
  //3.声明一个sum 统计班级的总分

  //分析思路2
  //1.统计3个班的成绩情况,每个班有5名同学,求出每个班的平均分
  //2.j 表示第几个班级
  //3.定义一个变量存放总成绩

  //分析思路3
  //1.我们可以把代码做活
  //2.定义两个变量,表示班级的个数和班级的人数
  //代码实现

  var classNum int = 3
  var stuNum int = 5
  var totalsum float64 = 0.0
  for j := 1; j <= classNum; j++ {
    sum := 0.0
    for i := 1; i <=stuNum; i++ {
      var score float64
      fmt.Printf("请输入第%d班的第%d个学生的成绩 \n", j, i)
      fmt.Scanln(&score)
      //累计班级总分
      sum += score
    }

    fmt.Printf("第%d班级的平均分是%v \n", j, sum / float64(stuNum))
    //将各个班的总成绩累计到totalsum
    totalsum += sum
  }
  fmt.Printf("各个班级的总成绩%v 所有班级的平均分是%v \n", totalsum, totalsum / float64(stuNum * classNum))
}

 

2)打印金字塔经典案例

使用for循环完成下面的案例

1)完成思路,可以先从矩形开始打
2)代码实现


分析编程思路:

func main() {

  //编程思路
  //1.打印一个矩形
  /*
    ***
    ***
    ***
  */

  //2.打印半个金字塔
  /*
    *
    **
    ***
  */

  //3.打印整个金字塔
  /*
    * 1层 1 个* 规律: 2 * 层数 - 1 空格2 规律:总层数-当前层数
    *** 2层 3 个* 规律: 2 * 层数 - 1 空格1 规律:总层数-当前层数
    ***** 3层 5 个* 规律: 2 * 层数 - 1 空格0 规律:总层数-当前层数
  */

  //4 将层数做成一个变量
  //定义变量var totalLevel int

  //5 打印空心金字塔
  /*
    *
    * *
    *****
    分析:在我们给每行打印*号时,需要考虑是打印 * 还是打印 空格
    我们的分析的结果是,每层的第一个和最后一个是打印 *,其它就应该是空的,即打印空格
    我们还分析到一个例外情况,最后层(底层) 是全部打*。
  */

  var totalLevel int = 9
  //i 表示层数
  for i := 1; i <= totalLevel; i++ {
    //打印*前先打印空格
    for k := 1; k <= totalLevel - i; k++ {
      fmt.Print(" ")
    }
    //j 表示每层打印多少*
    for j := 1; j <= 2 * i - 1; j++ {
      if j == 1 || j == 2 * i -1 || i == totalLevel {
        fmt.Print("*")
      } else {
        fmt.Print(" ")
      }
    }
    fmt.Println()
  }
}


4)打印99乘法表

func main() {

  num := 9
  for i := 1; i <= num; i++ {
    for j := 1; j <= i; j++ {
      fmt.Printf("%v * %v = %v \t", j, i, j * i)
    }
    fmt.Println()
  }
}

posted @ 2019-08-13 00:15  我是一只忙碌的小青蛙  阅读(137)  评论(0编辑  收藏  举报