From eb58d69b3e99540f35d39eb6c881f10aee7a589b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=B3=E7=90=A6?= Date: Thu, 10 Feb 2022 15:10:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4:=201,2?= =?UTF-8?q?,3=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main.go" | 70 ++++++ .../main.go" | 207 ++++++++++++++++++ .../main.go" | 40 ++++ 3 files changed, 317 insertions(+) create mode 100644 "homework/\347\254\254\344\270\200\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" create mode 100644 "homework/\347\254\254\344\270\211\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" create mode 100644 "homework/\347\254\254\344\272\214\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" diff --git "a/homework/\347\254\254\344\270\200\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" "b/homework/\347\254\254\344\270\200\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" new file mode 100644 index 0000000..edc5432 --- /dev/null +++ "b/homework/\347\254\254\344\270\200\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" @@ -0,0 +1,70 @@ +package main + +import ( + "fmt" + "math" + "strings" +) + +// ⭐️ 输出一个int32对应的二进制表示 +// 基本思路: c的二进制, 从1000..000(2^31), 到 000...001(2^0) +func BinaryFormat(n int32) string { + a := uint32(n) + sb := strings.Builder{} + c := uint32(math.Pow(2, 31)) + // fmt.Println(a, c) + for i := 0; i < 32; i++ { + if a & c > 1 { + sb.WriteString("1") + } else { + sb.WriteString("0") + } + c >>= 1 + // fmt.Printf("c: %d\n", c) + } + return sb.String() +} + +func BinaryFormat8(n int8) string { + a := uint8(n) + sb := strings.Builder{} + c := uint8(math.Pow(2, 7)) + for i := 0; i < 8; i++ { + if a & c > 0 { + sb.WriteString("1") + } else { + sb.WriteString("0") + } + c >>= 1 + } + return sb.String() +} + +func PrintBinStr8(n int8) { + binStr := BinaryFormat8(n) + fmt.Printf("%d binary string: %s\n", n, binStr) +} + +func PrintBinStr(n int32) { + binStr := BinaryFormat(n) + fmt.Printf("%d binary string: %s\n", n, binStr) +} + +// 完成两行填空,然后写一个main函数调用BinaryFormat,看一下0、1、-1、260、-260对应的二进程表示是什么 + +func main() { + var i int8 = -128 + for ; i <= 127; i++ { + PrintBinStr8(i) + if i == 127 { + break + } + } + // PrintBinStr8(-8) + // PrintBinStr8(-1) + // PrintBinStr8(0) + // PrintBinStr8(1) + // PrintBinStr(8) + // PrintBinStr(260) + // PrintBinStr(-260) +} diff --git "a/homework/\347\254\254\344\270\211\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" "b/homework/\347\254\254\344\270\211\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" new file mode 100644 index 0000000..fffb194 --- /dev/null +++ "b/homework/\347\254\254\344\270\211\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" @@ -0,0 +1,207 @@ +// 1.随机初始化两个8*5的矩阵,求两个矩阵的和(逐元素相加) +// 2.给定月份,判断属于哪个季节。分别用if和switch实现 +// 3.创建一个student结构体,包含姓名和语数外三门课的成绩。用一个slice容纳一个班的同学,求每位同学的平均分和整个班三门课的平均分,全班同学平均分低于60的有几位 + +package main + +import ( + "fmt" + "math" + "math/rand" +) + +// 1.随机初始化两个8*5的矩阵,求两个矩阵的和(逐元素相加) +type Matrix struct { + value [][]int + row int + column int +} + +func (m *Matrix) add(m1 *Matrix) *Matrix{ + maxRow := int(math.Max(float64(m.row), float64(m1.row))) + maxColumn := int(math.Max(float64(m.column), float64(m1.column))) + resM := generateMatrixWithFunc(maxRow, maxColumn, func() int { + return 0 + }) + for i := 0; i < maxRow; i++ { + for j := 0; j < maxColumn; j++ { + resM.value[i][j] = m.value[i][j] + m1.value[i][j] + } + } + return resM +} + +func generateMatrixWithFunc(row, column int, genFn func() int) *Matrix { + arr := make([][]int, row) + for idx, _ := range(arr) { + arr[idx] = make([]int, column) + for cIdx, _ := range(arr[idx]) { + arr[idx][cIdx] = genFn() + } + } + m := &Matrix{ + value: arr, + row: row, + column: column, + } + return m +} + +func generateMatrix(row, column int) *Matrix { + return generateMatrixWithFunc(row, column, func() int { + return rand.Intn(32) + }) +} + +// 2.给定月份,判断属于哪个季节。分别用if和switch实现 +func getSeasonByMonth(m int) string { + if m < 0 || m > 12 { + return "err" + } else if m < 4 { + return "spring" + } else if m < 7 { + return "summer" + } else if m < 10 { + return "autumn" + } else { + return "winter" + } +} + +func getSeasonByMonth1(m int) string { + var season string + switch true { + case m > 0 && m < 4: + season = "spring" + case m > 3 && m < 7: + season = "summer" + case m > 6 && m < 10: + season = "autumn" + case m > 9 && m <= 12: + season = "winter" + } + return season +} + + +// 3.创建一个student结构体,包含姓名和语数外三门课的成绩。用一个slice容纳一个班的同学,求每位同学的平均分和整个班三门课的平均分,全班同学平均分低于60的有几位 + +type student struct { + name string + chineseScore float32 + mathScore float32 + englishScore float32 +} + +func (s *student) avg () float32 { + return (s.chineseScore + s.mathScore + s.englishScore) / 3 +} + +func (s *student) mockScore (prop string) float32 { + halfList := [2]float32{0, 0.5} + score := float32(rand.Intn(100)) + halfList[rand.Intn(2)] + switch prop { + case "chineseScore": + s.chineseScore = score + case "mathScore": + s.mathScore = score + case "englishScore": + s.englishScore = score + } + return score +} + +type class struct { + students []student +} + +func (c *class) entrance(n uint8) *class{ + var students []student = make([]student, n) + for idx, stu := range(students) { + stu.mockScore("chineseScore") + stu.mockScore("mathScore") + stu.mockScore("englishScore") + students[idx] = stu + } + c.students = students + return c +} + +func (c class) everyoneAvg() []float32{ + var avgList []float32 + for _, stu := range(c.students) { + avgList = append(avgList, stu.avg()) + } + return avgList +} + +func (c class) classAvg() float32 { + avgList := c.everyoneAvg() + var sum float32 + for _, v := range avgList { + sum += v + } + return sum / float32(len(avgList)) +} + +func (c class) passCount() int { + avgList := c.everyoneAvg() + var count int + for _, val := range avgList { + if val >= 60 { + count++ + } + } + return count +} + +func (c class) chineseScore() float32 { + students := c.students + var sum float32 + for _, stu := range students { + sum += stu.chineseScore + } + return sum / float32(len(students)) +} + +func (c class) mathScore() float32 { + students := c.students + var sum float32 + for _, stu := range students { + sum += stu.mathScore + } + return sum / float32(len(students)) +} + +func (c class) englishScore() float32 { + students := c.students + var sum float32 + for _, stu := range students { + sum += stu.englishScore + } + return sum / float32(len(students)) +} + +func main() { + // 1 + m1 := generateMatrix(8, 5) + m2 := generateMatrix(8, 5) + fmt.Println("矩阵1: ", m1, "\n矩阵2: ", m2) + resM := m1.add(m2) + fmt.Println("结果: ", resM) + // 2 + fmt.Println("if季节: ", getSeasonByMonth(4)) + fmt.Println("switch季节: ", getSeasonByMonth1(4)) + // 3 + c := class{} + c.entrance(5) + fmt.Println("学生列表: ", c.students) + avgList := c.everyoneAvg() + fmt.Println("每个人的平均分: ", avgList) + fmt.Println("平均分及格人数: ", c.passCount()) + classAvg := c.classAvg() + fmt.Println("班级平均分: ", classAvg) + fmt.Println("语文平均分: ", c.chineseScore()) + fmt.Println("数学平均分: ", c.mathScore()) + fmt.Println("英语平均分: ", c.englishScore()) +} \ No newline at end of file diff --git "a/homework/\347\254\254\344\272\214\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" "b/homework/\347\254\254\344\272\214\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" new file mode 100644 index 0000000..652c13f --- /dev/null +++ "b/homework/\347\254\254\344\272\214\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" @@ -0,0 +1,40 @@ +// 1. 创建一个初始长度为0、容量为10的int型切片,调用rand.Intn(128)100次,往切片里面添加100个元素,利用map统计该切片里有多少个互不相同的元素。 +// 2. 实现一个函数func arr2string(arr []int) string,比如输入[]int{2,4,6},返回“2 4 6”。输入的切片可能很短,也可能很长。 + +package main + +import ( + "fmt" + "math/rand" + "strconv" + "strings" +) + +func test1() map[int]int { + s := make([]int, 0, 10) + for i := 0; i < 100; i++ { + s = append(s, rand.Intn(128)) + } + m := make(map[int]int) + for _, val := range(s) { + count, _ := m[val]; + m[val] = count + 1 + } + return m +} + +func arr2string(arr []int) string { + sb := strings.Builder{} + for _, val := range(arr) { + str := strconv.Itoa(val) + " " + sb.WriteString(str) + } + return sb.String() +} + +func main() { + m := test1() + fmt.Println(m) + str := arr2string([]int{1, 2, 3}) + fmt.Println(str) +} \ No newline at end of file -- Gitee From 9fc80e6aa0ccc51941a9b9a0f68b0f6e01ca1bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=B3=E7=90=A6?= Date: Fri, 11 Feb 2022 09:58:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?7099:=20=E7=AC=AC=E5=9B=9B=E5=91=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main.go" | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 "homework/\347\254\254\345\233\233\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" diff --git "a/homework/\347\254\254\345\233\233\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" "b/homework/\347\254\254\345\233\233\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" new file mode 100644 index 0000000..6d25c96 --- /dev/null +++ "b/homework/\347\254\254\345\233\233\345\221\250/GO-7\346\234\237-7099-\344\275\263\347\220\246/main.go" @@ -0,0 +1,113 @@ +// 1.实现一个函数,接受若干个float64(用不定长参数),返回这些参数乘积的倒数,除数为0时返回error +// 2.上题用递归实现 +// 3.定义两个接口:鱼类和爬行动物,再定义一个结构体:青蛙,同时实现上述两个接口 +// 4.实现函数func square(num interface{}) interface{},计算一个interface{}的平方,interface{}允许是4种类型:float32、float64、int、byte + +package main + +import ( + "errors" + "fmt" + "strconv" +) + +// 1.实现一个函数,接受若干个float64(用不定长参数),返回这些参数乘积的倒数,除数为0时返回error +func test1(f ...float64) (float64, error) { + // fmt.Println(f, reflect.TypeOf(f)) + var result float64 = 1 + for _, num := range f { + result *= num + } + if result == 0 { + return 0, errors.New("除数不能为0") + } else { + return 1 / result, nil + } +} + +// 2.上题用递归实现 +func test2(f ...float64) (float64, error) { + if len(f) == 0 || f[0] == 0 { + return 0, nil + } + var result = f[0] + var error error + if len(f) > 1 { + resNext, errNext := test2(f[1:]...) + result *= resNext + error = errNext + } else { + result = 1 / result + } + return result, error +} + +// 3.定义两个接口:鱼类和爬行动物,再定义一个结构体:青蛙,同时实现上述两个接口 +type fish interface { + say (conent string) +} + +// 爬行动物 +type reptile interface { + run (distance int) +} + +// 两栖动物 +type amphibian interface { + fish + reptile +} + +type frog struct { + color string +} + +func (f *frog) say(content string){ + fmt.Println("咕嘟嘟oO0~" + content) +} + +func (f *frog) run(distance int){ + fmt.Println("跑了" + strconv.Itoa(distance) + "米") +} + +func gua (a amphibian) { + a.say("hi") + a.run(3) +} + +// 4.实现函数func square(num interface{}) interface{},计算一个interface{}的平方,interface{}允许是4种类型:float32、float64、int、byte +func square(num interface{}) interface{} { + switch v := num.(type) { + case float32: + return v * v + case float64: + return v * v + case int: + return v * v + case byte: + n := uint16(v) // todo 这种处理方式是不是有问题... + return n * n + default: + return "type error" + } +} + +func main() { + // 1 + s := []float64{1, 2} + fmt.Println(test1(s...)) + // 2 + fmt.Println(test2(s...)) + // 3 + fg := frog{"green"} + gua(&fg) + // 4 + var f32 float32 = 3 + var f64 float64 = 6 + var i int = 1 + var b byte = 97 + fmt.Println(square(f32)) + fmt.Println(square(f64)) + fmt.Println(square(i)) + fmt.Println(square(b)) +} \ No newline at end of file -- Gitee