1.定义方式有两种
1)先声明/定义,再赋值
var 数组名[大小][大小]类型
func main() {
//二维数组示例演示
/*
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
*/
//定义、声明二维数组
var arr [4][6]int
arr[1][2] = 1
arr[2][1] = 2
arr[2][3] = 3
//遍历二维数组,按照要求输出图形
for i := 0; i < 4; i++ {
for j := 0; j < 6; j++ {
fmt.Print(arr[i][j], " ")
}
fmt.Println()
}
}
2)直接初始化
var 数组名[大小][大小]类型 = [大小][大小]类型{{初值...},{初值...}}
var 数组名[大小][大小]类型 = [...][大小]类型{{初值...},{初值...}}
var 数组名 = [大小][大小]类型{{初值...},{初值...}}
var 数组名 = [...][大小]类型{{初值...},{初值...}}
数组名 := [...][大小]类型{{初值...},{初值...}}
func main() {
var arr1 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}
fmt.Println(arr1)
}
2.二维数组遍历:for遍历和for-range遍历
func main() {
var arr1 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}
//for循环遍历
for i := 0; i < len(arr1); i++ {
for j := 0; j < len(arr1[i]); j++ {
fmt.Printf("%v\t", arr1[i][j])
}
fmt.Println()
}
//for-range来遍历二维数组
for _, v := range arr1 {
for _, v2 := range v {
fmt.Printf("%v\t", v2)
}
fmt.Println()
}
}
3.输入3个班每个班5个人的成绩,输出每个班的平均分和总平均分
func main() {
var arr [3][5]float64
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("请输入%v班第%v个学生的成绩:\n", i+1, j+1)
fmt.Scanln(&arr[i][j])
}
}
//求每个年级的平均分及总平均分
var arrsum [3]float64
var arravg [3]float64
var n1 int
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
arrsum[i] += arr[i][j]
if arr[i][j] != 0 {
n1++
}
}
arravg[i] = arrsum[i] / float64(len(arr[i]))
}
var sum float64
for _, v := range arrsum {
sum += v
}
avg := sum / 15
fmt.Printf("一共输入了%v学生的分数", n1)
fmt.Println("每个班的平均分是:", arravg)
fmt.Println("所有班级的平均分是:", avg)
}
4.随机生成一个[0,100)的数组,求其倒叙数组,平均值,最大值最大值下标,最小值,最小值下标,里面是否有55。
package main
import (
"fmt"
"math/rand"
"time"
)
func ran() {
var num [10]int
for i := 0; i < 10; i++ {
rand.Seed(time.Now().UnixNano())
num[i] = rand.Intn(100)
}
fmt.Println("数组num为:", num)
var numf [10]int
var sum int
var max int = num[len(num)-1]
var maxindex int
var min int = num[len(num)-1]
var minindex int
var b1 bool = false
for i := 0; i < 10; i++ {
numf[i] = num[10-1-i]
sum += numf[i]
if max < numf[i] {
max = numf[i]
maxindex = i
}
if min > numf[i] {
min = numf[i]
minindex = i
}
if numf[i] == 55 {
b1 = true
}
}
fmt.Printf("倒叙数组为:%v\n 平均值为:%v\n 最大值为:%v\n 最大值下标为:%v\n 最小值为:%v\n 最小值下标为:%v\n 里面是否有55:%v\n ",
numf, sum/10, max, maxindex, min, minindex, b1)
}
5.已知有个排好序(升序)的数组,要求插入一个元素,最后打印该数组,顺序依然是升序
func sx() {
arr := []int{1, 4, 6, 8, 20}
n1 := 18
for i := 0; i < len(arr); i++ {
if n1 < arr[i] {
arr = append(arr[:i], append([]int{n1}, arr[i:]...)...)
break
}
}
fmt.Println(arr)
}
6.定义一个3行4列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0
func erwei() {
var arr [3][4]int
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("请输入%v行%v列的数据:\n", i+1, j+1)
fmt.Scanln(&arr[i][j])
if i == 0 || j == 0 || i == (len(arr)-1) || j == (len(arr[i])-1) {
arr[i][j] = 0
}
}
}
fmt.Println("输出四周的数据清0的数组:\n")
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("%v ", arr[i][j])
}
fmt.Println()
}
}
7.定义一个4行4列的二维数组,从键盘输入值,然后将第一行和第四行进行交换,第二行和第三行进行交换。
func chg() {
var arr [4][4]int
//给数组输入数组
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("请输入%v行%v列的数据:\n", i+1, j+1)
fmt.Scanln(&arr[i][j])
}
}
//输出源数组
fmt.Println("原数组的数据:\n")
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("%v ", arr[i][j])
}
fmt.Println()
}
//当为第一行或者第二行时进行交换
for i := 0; i < len(arr); i++ {
var temp [4]int
for j := 0; j < len(arr[i]); j++ {
if i == 0 || i == 1 {
temp[j] = arr[i][j]
arr[i][j] = arr[4-1-i][j]
arr[4-1-i][j] = temp[j]
}
}
}
//输出交换后的数组
fmt.Println("交换后数组的数据:\n")
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("%v ", arr[i][j])
}
fmt.Println()
}
}
8.保存1 3 5 7 9 五个奇数到数组,并倒叙打印
func jishu() {
n1 := 5
var arr []int
for i := 0; i < n1; i++ {
arr = append(arr, (2*i + 1))
}
fmt.Println(arr)
temp := 0
for i := 0; i < len(arr)/2; i++ {
temp = arr[i]
arr[i] = arr[len(arr)-1-i]
arr[len(arr)-1-i] = temp
}
fmt.Println(arr)
}
9.写出查找的核心代码,比如已知数组arr [10] string里面保存了十个元素,现要查找"AA"在其中是否存在,打印提示,如果有多个"AA",也要找到对应的下标。
func fncz() {
var arr [10]string = [10]string{"CA", "AA", "HG", "BY", "AA", "CD", "RE", "AA", "OU", "AT"}
a1 := "AA"
var n1 []int
for i, v := range arr {
if v == a1 {
n1 = append(n1, i)
}
}
fmt.Printf("下标为%v有字符%v", n1, a1)
}
10.随机生成10个整数(1-100之间),使用冒泡排序法进行排序,然后使用二分法查找,查找是否有55这个数,如果有则显示下标,没有则提升找不到该数。
func erfen(arr *[10]int, maxindex int, minindex int, cz int) {
if maxindex < minindex {
fmt.Println("找不到该数")
return
}
middleindex := (maxindex + minindex) / 2
if (*arr)[middleindex] == cz {
fmt.Printf("找到该数%v,下标为%v", cz, middleindex)
} else if (*arr)[middleindex] > cz {
erfen(arr, middleindex-1, minindex, cz)
} else {
erfen(arr, maxindex, middleindex+1, cz)
}
}
func suier() {
var arr [10]int
//生成随机数组
for i := 0; i < len(arr); i++ {
rand.Seed(time.Now().UnixNano())
arr[i] = rand.Intn(100)
}
fmt.Println("随机数组为:", arr)
//冒泡排序
temp := 0
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < (len(arr) - 1 - i); j++ {
if arr[j+1] < arr[j] {
temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
}
}
fmt.Println("排序后的数组为:", arr)
//二分法查找
var cz int = 55
erfen(&arr, len(arr)-1, 0, cz)
}
11.编写一个函数,可以接收一个数组,该数组有五个数,请找出最大数和最小数和对应的下标是多少
func f1(arr *[5]int) {
var min int = (*arr)[0]
var max int
var minindex int
var maxindex int
for i := 0; i < len(*arr); i++ {
if min > (*arr)[i] {
min = (*arr)[i]
minindex = i
}
if max < (*arr)[i] {
max = (*arr)[i]
maxindex = i
}
}
fmt.Printf("最大值为:%v,最大值下标为:%v,最小值为:%v,最小值下标为:%v", max, maxindex, min, minindex)
}
func main() {
var arr [5]int = [5]int{34, 2, 8, 12, 54}
fmt.Println("数组为:%v", arr)
f1(&arr)
}
12.定义一个数组,并给出8个整数,求该数组中大于平均值的数的个数,和小于平均值的数的个数。
func f2() {
var arr [8]float64 = [8]float64{23, 45, 1, 8, 29, 34, 90, 12}
fmt.Printf("数组为:%v\n", arr)
sum := 0.0
for i := 0; i < len(arr); i++ {
sum += arr[i]
}
avg := sum / float64(len(arr))
var dy int
var xy int
for j := 0; j < len(arr); j++ {
if arr[j] > avg {
dy++
} else if arr[j] < avg {
xy++
}
}
fmt.Printf("平均值为:%v,大于平均值的个数是:%v,小于平均值的个数是:%v\n", avg, dy, xy)
}
13.跳水比赛,8个评委打分,运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后的得分,使用一维数组实现如下功能:
1)请把打最高分的评委和最低分的评委找出来
2)找出最佳评委和最差评委,最佳评委就是打分和最后得分最接近的评委,最差评委就是打分和最后得分相差最大的。
func f3() {
var arr1 []float64 = []float64{5, 1, 8.3, 7, 6, 9.1, 7.8, 9.5}
fmt.Println("原始数组为:", arr1)
var min float64 = arr1[0]
var minindex int
var max float64
var maxindex int
for i := 0; i < len(arr1); i++ {
if min > arr1[i] {
min = arr1[i]
minindex = i
}
if max < arr1[i] {
max = arr1[i]
maxindex = i
}
}
fmt.Printf("最大值为:%v,最大值下标为:%v,最小值为:%v,最小值下标为:%v\n", max, maxindex, min, minindex)
var arr2 []float64
var arr3 []float64
var arr4 []float64
var arr5 []float64
if maxindex < minindex {
arr2 = append(arr1[0:maxindex])
arr3 = append(arr1[maxindex+1 : minindex])
arr4 = append(arr1[minindex+1:])
} else {
arr2 = append(arr1[0:minindex])
arr3 = append(arr1[minindex+1 : maxindex])
arr4 = append(arr1[maxindex+1:])
}
arr5 = append(arr2, arr3...)
arr5 = append(arr5, arr4...)
fmt.Println("去除一个最大值一个最小值之后的最终数组为:\n", arr5)
sum := 0.0
for _, v := range arr5 {
sum += v
}
avg := sum / float64(len(arr5))
fmt.Println("选手评分为:", avg)
zj := 10.0
zjindex := 0
zc := 0.0
zcindex := 0
for i := 0; i < len(arr1); i++ {
if math.Abs(arr1[i]-avg) > zc {
zc = math.Abs(arr1[i] - avg)
zcindex = i
}
if math.Abs(arr1[i]-avg) < zj {
zj = math.Abs(arr1[i] - avg)
zjindex = i
}
}
fmt.Printf("最佳评委为:%v,最差评委为:%v\n", arr1[zjindex], arr1[zcindex])
}