[go学习笔记.第五章.流程控制] 4.多重循环控制

介绍:

1).将一个循环放入另一个循环体内,就形成了嵌套循环,在外面的for称为外层循环,在里面的for循环称为内层循环(建议一般使用两层,最多不超过三层)

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

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

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

//案例1
//统计三个班学生成绩情况,每个班5名学生,求出各个班的平均分和所以班级的平均分(学生成绩从键盘输入)
//分析思路:
//1.统计一个班的学生成绩,每个班5名学生,求出该班平均分(先易后难)
//2.学生人数就5个(先死后活)
//3.声明一个变量sum统计班级平均分

sum := 0.0
for i := 1; i <= 5; i++ {
    var score float64 
    fmt.Println("请输入第%d个学生的成绩:", i)
    fmt.Scanln(&score)
    //累计分数
    sum += score
}
fmt.Printf("该班平均分为: %v", sum / 5)

//分析思路2
//1.统计三个班成绩情况,每个班5名学生,求出每个班平均分和所以班级的平均分
//2.j表示第几个班级,totalSum表示总成绩
//3.定义一个变量存放总成绩
//4.流程:实际上就是把上面的代码循环3次

totalSum := 0.0
for j := 1; j <= 3; j++ {  
    sum := 0.0
    for i := 1; i <= 5; i++ {
        var score float64 
        fmt.Println("请输入第%d个班的第%d个学生的成绩:", j,i)
        fmt.Scanln(&score)
        //累计分数
        sum += score
    }
    fmt.Printf("第%d个班平均分为: %v", j, sum / 5)
    totalSum += sum
}
fmt.Printf("3个班平均分为: %v", totalSum / 15)

//分析思路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.Println("请输入第%d个班的第%d个学生的成绩:", j, i)
        fmt.Scanln(&score)
        //累计分数
        sum += score
    }
    fmt.Printf("第%d个班平均分为: %v", j, sum / 5)
    totalSum += sum
}
fmt.Printf("%d个班平均分为: %v", classNum , totalSum / float64(stuNum * classNum))

//案例2
//统计三个班及格人数,每个班5名学生
//在上面代码的基础上,声明一个变量passCount保存及格人数
var classNum int = 3
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.Println("请输入第%d个班的第%d个学生的成绩:", j, i)
        fmt.Scanln(&score)
        //累计分数
        sum += score
        if score >= 60 {
            passCount++    
        }
    }
    fmt.Printf("第%d个班平均分为: %v", j, sum / 5)
    totalSum += sum
}
fmt.Printf("%d个班平均分为: %v", classNum , totalSum / float64(stuNum * classNum))
fmt.Printf("及格人数为%v \n", passCount)
//案例
//打印金字塔
//使用for循环打印金字塔:编写一个程序,接收一个整数,表示层数,打印金字塔
//    *
//   ***
//  *****
// *******
//编程思路:
//1.打印一个矩形
// ***
// ***
// ***
for j := 1; j <= 3; j++ {
    for i := 1; i <= 3; i++ {
        fmt.Print("*")
    }
    fmt.Prinln()
}
//2.打印半个金字塔
// *    1个*   规律: 层数
// **   2个*   规律: 层数
// ***  3个*   规律: 层数
for j := 1; j <= 3; j++ {
    for i := 1; i <= j; i++ {
        fmt.Print("*")
    }
    fmt.Prinln()
}
//3.打印整个金字塔
//    *    1层 1个*  规律: 2 * 层数 - 1  空格 3 规律: 总层数 - 当前层数
//   ***   2层 3个*  规律: 2 * 层数 - 1  空格 2 规律: 总层数 - 当前层数
//  *****  3层 5个*  规律: 2 * 层数 - 1  空格 1 规律: 总层数 - 当前层数
// ******* 4层 7个*  规律: 2 * 层数 - 1  空格 0 规律: 总层数 - 当前层数
for j := 1; j <= 3; j++ {
    for k := 1; k <= 3 - j; k++ {
        fmt.Print(" ")
    }
    for i := 1; i <= 2 * j - 1; i++ {
        fmt.Print("*")
    }
    fmt.Prinln()
}
//4.做活金字塔
//1.定义一个变量,表示层数
var totalLevel int = 6
for j := 1; j <= totalLevel ; j++ {
    for k := 1; k <= totalLevel - j; k++ {
        fmt.Print(" ")
    }
    for i := 1; i <= 2 * j - 1; i++ {
        fmt.Print("*")
    }
    fmt.Prinln()
}
//4.打印空心金字塔
//    *
//   * *
//  *   *
// *******
//分析:
//在给每一行打印*时,需要考虑是打印*还是空格
//分析结果:
//每层的第一个和最后一个打印*,其他打印空格,不过有一个列外:第一层和最后一层全部打印*
var totalLevel int = 6
for j := 1; j <= totalLevel ; j++ {
    for k := 1; k <= totalLevel - j; k++ {
        fmt.Print(" ")
    }
    for i := 1; i <= 2 * j - 1; i++ {
        if i == 1 || j = 2 * j -1 || i == totalLevel {
            fmt.Print("*")
        } else {
            fmt.Print(" ")
        } 
    } 
    fmt.Prinln()
}

//案例
//打印99乘法表
//1 * 1 = 1						               第一层: 1 规律: 1 * 层数 = 结果
//1 * 2 = 2  2 * 2 = 4			               第二层: 2 规律: 1 * 层数 = 结果 2 * 层数 = 结果
//1 * 3 = 3  2 * 3 = 6  3 * 3 = 9              第三层: 3 ...
//1 * 4 = 4  2 * 4 = 8  3 * 4 = 12  4 * 4 = 16 第四层: 4 ...
//思路:
//1.定义一个整数num表示层数
//2.先打印一层,二层,看以上规律
//第一层
for i := 1; i <= 1; i++ {
    fmt.Printf("%v * %v  = %v   ", i, i, i * i)
}
fmt.Println()
//第二层
for j := 1; j <= 2; j++ {
    for i := 1; i <= j; i++ {
        fmt.Printf("%v  * %v  = %v  ", i, j, i * j)
    }
    fmt.Println()
}
//第num层
var num int = 9
for j := 1; j <= num; j++ {
    for i := 1; i <= j; i++ {
        fmt.Printf("%v * %v = %v  ", i, j, i * j)
    }
    fmt.Println()
}

	//案例
    //判断一个年份是否为闰年
    //闰年:能被4整除并且不能被100整除,或者能被400整除
    var num int32
	fmt.Println("请输入一个年份:")
	fmt.Scanln(&num)
	if (num % 4 == 0 && num % 100 != 0) || (num % 400 == 0) {
	    fmt.Println("湿润年:")
	} else {
	 	fmt.Println("不是闰年:")
	}
    //案例
    //实现对3个整数排序,输出时按从小到大排序
	var a, b, c int
	fmt.Println("请输入3个数,以空格间隔:")
	fmt.Scanf("%d %d %d", &a, &b, &c)
	var temp int
	if a > b {
		temp = a
		a = b
		b = temp
	} 

	if b > c {
		temp = b
		b = c
		c = temp
	} 

	if a > c {
		temp = a
		a = c
		c = temp
	} 

	fmt.Printf("3个数从小到大为:%v, %v, %v",a,b,c)

上一节:[go学习笔记.第五章.流程控制] 3.for,while和dowhile基本介绍

下一节:[go学习笔记.第五章.流程控制] 5.break,continue,goto和return

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值