编程案例

[toc]

编程案例

多重循环控制-for

编写一个程序,可以接收一个整数,表示层数,打印出金字塔。

1
2
3
  *
***
*****
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
import "fmt"
func main() {

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

***
***
***

*/

for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Print("*")
}
fmt.Println("")
}

}

image-20221128165532356

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import "fmt"

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

* 1 个 *
** 2 个 *
*** 3 个 *

*/

func main() {
for i := 1; i <= 3; i++ {
for j := 1; j <= i; j++ {
fmt.Print("*")
}
fmt.Println("")
}
}

image-20221128165738560

但是这个每层的*数目不对

应该是第一层一个,第二层三个,第三层五个,第n层2n-1个。

所以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import "fmt"

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

* 1 个 *
*** 3 个 *
***** 5 个 *

*/

func main() {
for i := 1; i <= 3; i++ {
for j := 1; j <= 2*i-1; j++ {
fmt.Print("*")
}
fmt.Println("")
}
}

image-20221128170735903

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
import "fmt"

// 3.打印个金字塔
/*

* 1 个 * 规律:2 * 层数 - 1 空格2 空格规律:总层数-当前层数
*** 3 个 * 规律:2 * 层数 - 1 空格1
***** 5 个 * 规律:2 * 层数 - 1 空格0

这里使用k提前打印空格打印空格
*/

func main() {
for i := 1; i <= 3; i++ {
for k:= 1; k <= 3 - i;k++{
fmt.Print(" ")
}
for j := 1; j <= 2*i-1; j++ {
fmt.Print("*")
}
fmt.Println("")
}
}

image-20221128171618471

再修改题目,将层数改成一个变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

var totalLevel int = 9

func main() {
for i := 1; i <= totalLevel; i++ {
for k := 1; k <= totalLevel-i; k++ {
fmt.Print(" ")
}
for j := 1; j <= 2*i-1; j++ {
fmt.Print("*")
}
fmt.Println("")
}
}

image-20221128171918526

在修改题目,打印空心金字塔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

// 分析:在我们打印每行 * 号时,需要考虑是打印 * 还是打印 空格
// 分析结果是,每层的第一个和最后一个打印*,其他就应该是空的。
var totalLevel int = 9

func main() {
for i := 1; i <= totalLevel; i++ {
for k := 1; k <= totalLevel-i; k++ {
fmt.Print(" ")
}
for j := 1; j <= 2*i-1; j++ {
if j == 1 || j == 2*i-1 {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
fmt.Println("")
}
}

image-20221128172445711

但是这个打印到最后没封底就很不美观,所以要封底。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"

// 分析:在我们打印每行 * 号时,需要考虑是打印 * 还是打印 空格
// 分析结果是,每层的第一个和最后一个打印*,其他就应该是空的。

var totalLevel int = 9

func main() {
for i := 1; i <= totalLevel; i++ {
for k := 1; k <= totalLevel-i; k++ {
fmt.Print(" ")
}
for j := 1; j <= 2*i-1; j++ {
if j == 1 || j == 2*i-1 || i == totalLevel {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
fmt.Println("")
}
}

image-20221128173341992

打印九九乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"


func main() {
for i := 1; i <= 9; i++ { //打印九行
for j := 1; j <= i; j++ { //有几行就打印几列
fmt.Printf("%v * %v = %v \t", j, i, j*i)
}
fmt.Println("")
}
}

image-20221208200330636