golang 二维数组及数组练习
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]) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?