持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情
一、二维数组入门
1.1 入门案例
//二维数组介绍
package main
import "fmt"
func main() {
// 声明二维数组
var mulArray [5][5]int
// [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
fmt.Println(mulArray)
// 对数组赋值
mulArray[0][0] = 5
mulArray[1][1] = 5
mulArray[2][2] = 5
mulArray[3][3] = 5
mulArray[4][4] = 5
// [[5 0 0 0 0] [0 5 0 0 0] [0 0 5 0 0] [0 0 0 5 0] [0 0 0 0 5]]
fmt.Println(mulArray)
// 遍历二维数组
for i := 0; i < len(mulArray); i++ {
for j := 0; j < len(mulArray); j++ {
// 或者
// fmt.Printf("%v\t", mulArray[i][j])
// 5 0 0 0 0
// 0 5 0 0 0
// 0 0 5 0 0
// 0 0 0 5 0
// 0 0 0 0 5
fmt.Printf("%v ", mulArray[i][j])
}
fmt.Println()
}
}
1.2 语法
1.2.1 使用语法一(先声明,再赋值),详见 1.1入门案例
var 数组名 [size][size] 类型
// 例
var IntArr [5][5]int
// 赋值
IntArr [0][0] = 1
.....
1.2.2 使用语法二,声明赋值
var 数组名 [size][size]类型 = [size][size]类型{{x,x,x}.....{x,x,x}}
// 例
var intArr [2][2]int = [2][2]int{{1,1},{1,}}
1.2.3 语法三
var 数组名 [size][size]类型 = [...][size]类型{{x,x,x}.....{x,x,x}}
// 例
var intA [2][2]int = [...][2]int{{1, 1}, {1, 1}}
1.2.4 语法四
var 数组名 = [size][size]类型{{x,x,x}{x,x,x}}
// 例
var intA = [2][2]int{{1, 1}, {1, 1}}
1.2.5 语法五
var 数组名 = [...][size]类型{{x,x,x}{x,x,x}}
// 例
var intA = [...][2]int{{1, 1}, {1, 1}}
1.3 在内存中的地址
案例
// 二维数组在内存中的地址
package main
import "fmt"
func main() {
// 定义数组
var intArr [5][5]int
// 查看数组内存地址
// intArr[0]地址 = 0xc000110000
// intArr[1]地址 = 0xc000110028
// 相差 0x28 也就是 16+16+8 = 40字节
// 每个数组中的元素又有5个元素,每个元素占8字节 5*8 = 40字节
fmt.Printf("intArr[0]地址 = %p\n", &intArr[0])
fmt.Printf("intArr[1]地址 = %p\n", &intArr[1])
// 查看内层元素地址
// intArr[0][0]地址 = 0xc000110000
// intArr[0][1]地址 = 0xc000110008
fmt.Printf("intArr[0][0]地址 = %p\n", &intArr[0][0])
fmt.Printf("intArr[0][1]地址 = %p\n", &intArr[0][1])
}
二、二维数组遍历
2.1 for循环遍历
package main
import "fmt"
func main() {
// 定义二维数组
var intArr = [2][5]int{{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}
// for循环遍历
for i := 0; i < len(intArr); i++ {
for j := 0; j < len(intArr[i]); j++ {
// 1 2 3 4 5
// 5 4 3 2 1
fmt.Printf("%v\t", intArr[i][j])
}
fmt.Println()
}
}
2.2 for-range数组遍历
package main
import "fmt"
func main() {
// 定义二维数组
var intArr = [2][5]int{{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}
// for循环遍历
for i := 0; i < len(intArr); i++ {
for j := 0; j < len(intArr[i]); j++ {
// 1 2 3 4 5
// 5 4 3 2 1
fmt.Printf("%v\t", intArr[i][j])
}
fmt.Println()
}
// for-range循环遍历
// 外层循环的v 是一个一维数组
for i, v := range intArr {
for j, v2 := range v {
//intArr[0][0] = 1 intArr[0][1] = 2 intArr[0][2] = 3 intArr[0][3] = 4 intArr[0][4] = 5
// intArr[1][0] = 5 intArr[1][1] = 4 intArr[1][2] = 3 intArr[1][3] = 2 intArr[1][4] = 1
fmt.Printf("intArr[%v][%v] = %v \t", i, j, v2)
}
fmt.Println()
}
}
三、二维数组案例
3.1 案例一,求分数
定义二维数组,用于保存三个班,每个班五名同学的成绩。同时求每个班平均分,所有班级的平均分
package main
import "fmt"
func main() {
// 定义数组
var class [3][5]float64
score_sum := 0.0
stu_sum := 0
for i := 0; i < len(class); i++ {
for j := 0; j < len(class[i]); j++ {
fmt.Printf("请输入%v个班第%v名同学的成绩: ", i+1, j+1)
fmt.Scanln(&class[i][j])
}
}
for i := 0; i < len(class); i++ {
class_sum := 0.0
for j := 0; j < len(class[i]); j++ {
class_sum += class[i][j]
stu_sum += 1
}
fmt.Printf("%v班的总成绩 = %v, 平均成绩 = %v\n", i, class_sum, class_sum/float64(len(class[i])))
score_sum += class_sum
}
fmt.Printf("所有班的总成绩 = %v, 平均成绩 = %v", score_sum, score_sum/float64(stu_sum))
}