Go 多重循环控制及案例

多重循环控制

  • 基本介绍
    • 将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的 for 称为外层循环在里面的 for循环称为内层循环。【建议一般使用两层,最多不要超过 3 层
    • 实质上,嵌套循环就是把内层循环当成外层循环的循环体
      • 只有内层循环的循环条件为 false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
    • 外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n
  • 应用案例

编程时两大绝招
(1) 先易后难, 即将一个复杂的问题分解成简单的问题。
(2) 先死后活
  • 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]
package main
import "fmt"
func main(){
	
	//1)统计3个班成绩情况,每个班有5名同学,
	//求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]

	//分析实现思路
	//1. 统计1个班成绩情况,每个班有5名同学, 求出该班的平均分【学生的成绩从键盘输入】=》先易后难
	//2. 学生数就是5个 [先死后活]
	//3. 声明一个sum 统计班级的总分

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

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

	//统计三个班及格人数,每个班有5名同学
	//分析思路
	//1. 声明以变量 passCount 用于保存及格人数

	var classNum int = 2
	var stuNum int = 5
	var totalSum float64 = 0.0
	var passCount int = 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
			//判断分数是否及格
			if score >= 60 {
				passCount++
			}
		}

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

	fmt.Printf("各个班级的总成绩%v 所有班级平均分是%v\n", totalSum, totalSum / float64(stuNum * classNum))
	fmt.Printf("及格人数为%v\n", passCount)
}

打印金字塔经典案例

package main
import (
	"fmt"
)
func main() {

	//使用 for 循环完成下面的案例请编写一个程序,可以接收一个整数,表示层数,打印出金字塔

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

		***
		***
		***
	*/

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

	//3 打印整个金字塔
	/*
	    *     1层 1 个*  规律: 2 * 层数 - 1   空格 2 规律 总层数-当前层数
	   ***    2层 3 个*  规律:2 * 层数 - 1   空格 1 规律 总层数-当前层数
	  *****   3层 5 个*	 规律:2 * 层数 - 1   空格 0 规律 总层数-当前层数
	*/
	//4 将层数做成一个变量, 先死后活
	//var totalLevel int

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

	*/

	var totalLevel int = 20

	//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()
	}

	
}
  • 输出结果:


打印出九九乘法表案例

//i 表示层数
var num int = 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()
} 
  • 输出结果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值