9、For语句

发布时间 2023-03-30 00:19:35作者: 我也有梦想呀

1.for循环概念

程序的流程控制结构一共有三种: 顺序结构,选择结构,循环结构。

  • 顺序结构:代码从上向下逐行的执行
  • 选择结构:条件满足,某些代码才会被执行。0-1次
    if语句,switch语句
  • 循环结构:条件满足,某些代码会被反复的多次执行。0-n次
    for语句

值得注意的是GO语言不像Java等其他语言,还有什么while、dowhile;简单一句话:一个For打天下

2.for的基本用法

/**
	语法结构
	for init;condition;post{

	}
	
	init:初始化语句
	condition:条件判断语句
	post:步进表达式
	
	初始化语句只执行一次。在初始化循环之后,将检查该条件。
	如果条件计算为true,那么仆中的循环体将被执行,然后是post语句。
	post语句将在循环的每次成功迭代之后执行。在执行post语句之后,该条件将被重新检查。
	如果它是正确的,循环将继续执行,否则循环终止。
	*/

	for i := 1; i <= 5; i++ {
		fmt.Println("hello Go")
	}
	// fmt.Println(i)

3.for的其他写法

// 其他写法一:省略初始化语句和步进表达式
	/**
	for 条件语句 {

	}
	等同于Java中的while(条件){}语句
	*/
	// for j := 1; j <= 5; j++ {
	// 	fmt.Println(j)
	// }

	// 变形,相当于提升了作用域
	j := 1
	for j <= 10 {
		fmt.Println(j)
		j++
	}
	fmt.Println(j)

	// 其他写法二:省略三个表达式
	/**
	for{}
	和Java中的写法一样,死循环
	*/
	for {
		fmt.Println(j)
	}
	
	// 其他写法...   省略三个表达式其中的任意组合

4.for的小案例

// for循环小案例
	// 1.打印100-1
	for x := 100; x > 0; x-- {
		fmt.Println("x:", x)
	}

	// 2.求1-100的和
	sum := 0
	for y := 1; y <= 100; y++ {
		sum += y
	}
	fmt.Println("1-100的和为sum:", sum)

	// 3.打印1-100内,能够被3整除,但是不能被5整除的数字,
	// 统计被打印的数字的个数,每行打印5个
	count := 0
	for m := 1; m <= 100; m++ {
		if m%3 == 0 && m%5 != 0 {
			count++
			fmt.Print("m:", m)
			fmt.Print("\t")
			if count%5 == 0 {
				fmt.Println()
			}
		}
	}
	fmt.Println()
	fmt.Println("count:", count)

5.for嵌套

// for循环嵌套
	/**
	案例1:
		打印
		*****
		*****
		*****
		*****
		*****
	案例二:
		九九乘法表
	*/

	// 案例1:
	for i := 0; i < 5; i++ {
		for j := 0; j < 5; j++ {
			fmt.Print("*")
		}
		println()
	}

	// 案例二:
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Print(j, "*", i, "=", i*j, "\t")
		}
		println()
	}

6.break和continue

循环控制语句,这一块和Java中一样的

  • break:彻底的结束循环。。终止
  • continue: 结束了某一次循环,下次继续。。中止

	// break
	for i := 1; i < 10; i++ {
		if i == 5 {
			break
		}
		fmt.Println(i)
	}

	// continue
	for i := 0; i < 10; i++ {
		if i == 5 {
			continue
		}
		fmt.Println(i)
	}

image

7.循环标签名

// 针对循环嵌套处理,取别名实现内外循环控制
out:
	for i := 0; i < 10; i++ {
		for j := 0; j < 5; j++ {
			println(j)
			if j == 2 {
				// break out
				continue out
			}
		}
	}

8、打印水仙花

num := 299
	geWei := num % 10
	fmt.Println(geWei)

	shiWei := num / 10 % 10
	fmt.Println(shiWei)

	baiWei := num / 100
	fmt.Println(baiWei)

	// 打印100-999的水仙花数
	for i := 100; i <= 999; i++ {
		// 拿到一个数的个位
		ge := i % 10
		shi := i / 10 % 10
		bai := i / 100 % 10

		// 复杂写法
		// if i == ge*ge*ge+shi*shi*shi+bai*bai*bai {
		// 	fmt.Print("水仙花数:", i)
		// }

		// math.Pow(float64(ge), 3) : 求一个数的多少次幂
		if float64(i) == math.Pow(float64(ge), 3)+math.Pow(float64(shi), 3)+math.Pow(float64(bai), 3) {
			fmt.Println(i)
		}
	}

	// 打印2-1000内的素数(素数:只能被1和本身整除的数)
	for i := 2; i <= 1000; i++ {
		flag := true
		for j := 2; j < i; j++ {
			if i%j == 0 {
				flag = false // 不是素数
				break
			}
		}
		if flag {
			fmt.Println("是素数", i)
		}
	}

	// 优化写法,
	for i := 2; i <= 100; i++ {
		flag := true
		for j := 2; j < int(math.Sqrt(float64(i))); j++ {
			if i%j == 0 {
				flag = false // 不是素数
				break
			}
		}
		if flag {
			fmt.Println("是素数", i)
		}
	}