zoukankan      html  css  js  c++  java
  • 数组和切片1

    为什么需要数组?

    问题:
      一个养鸡场有6只鸡,它们的体重分别是3kg, 5kg, 1kg, 3.4kg, 2kg, 50kg。请问这六只鸡的总体重是多少?平均体重是多少?请你编写一个程序。

    使用传统方法解决。

    func main() {

      //分析思路:定义六个变量,分别表示六只鸡的,然后求出和,然后求出平均值
      hen1 := 3.0
      hen2 := 5.0
      hen3 := 1.0
      hen4 := 3.4
      hen5 := 2.0
      hen6 := 50.0

      totalWeight := hen1 + hen2 + hen3 + hen4 + hen5 + hen6
      //fmt.Sprintf("%.2f", totalWeight / 6) 将 totalWeight / 6 四舍五入保留到小数点2位返回值
      avgWeight := fmt.Sprintf("%.2f", totalWeight / 6)
      fmt.Printf("totalWeight=%v avgWeight=%v ", totalWeight, avgWeight)
    }

    对上面代码的说明:

      1)使用传统的方法不利于数据的管理和维护。
      2)传统方法不够灵活,因此我们引出需要学习的数据类型=>数组

    数组快速入门:

    数组可以存放多个同一类型数据。数组也是一种数据类型,在Go中,数组是值类型。

    我们使用数组的方法来解决养鸡场的问题:

    func main() {
      //1.定义一个数组
      var hens [6]float64;
      //2.给数组的每个元素赋值,元素的下标是从0开始的
      hens[0] = 3.0
      hens[1] = 5.0
      hens[2] = 1.0
      hens[3] = 3.4
      hens[4] = 2.0
      hens[5] = 50.0
      //3.遍历数组求出总体重
      totalWeight2 := 0.0
      for i := 0; i < len(hens); i++ {
        totalWeight2 += hens[i]
      }

      //4.求出平均体重
      avgWeight2 := fmt.Sprintf("%.2f", totalWeight2 / float64(len(hens)))
      fmt.Printf("totalWeight2=%v avgWeight2=%v ", totalWeight2, avgWeight2)
    }


    对上面代码的总结:

      1)使用数组来解决问题,程序的可维护性增加了。
      2)而且代码更加清晰,也容易扩展。

    数组的定义和内存布局:

    数组的定义:

      var 数组名 [数组大小]数据类型
      var a [5]int
      赋初值 a[0] = 1 a[1] = 30 ...

    数组内存图(重要)

    例子:
    func main() {
      var intArr [3]int //int占8个字节
      //当我们定义完数组后,其实数组的各个元素已经有默认值 0
      fmt.Println(intArr)   //[0 0 0]
      intArr[0] = 10
      intArr[1] = 20
      intArr[2] = 30
      fmt.Println(intArr)   //[10 20 30]
      fmt.Printf("intArr的地址=%p, intArr[0]的地址%p, intArr[1]的地址%p, intArr[2]的地址%p ", &intArr, &intArr[0], &intArr[1], &intArr[2], )
    }

    上面代码的内存图:

    对上图的总结:

    1)数组的地址可以通过数组名来获取 &intArr
    2)数组的第一个元素的地址,就是数组的首地址
    3)数组的各个元素的地址间隔是依据数组的类型来决定的,比如int64-> 8个字节,int32->4个字节,依次类推。

    数组的使用:

    访问数组元素:

      数组名[下标] 比如:你要使用a数组的第三个元素 a[2]

    快速入门案例:

      从终端循环输入5个成绩,保存到float64数组,并输出

    func main() {
      var score [5]float64
      for i := 0; i < len(score); i++ {
        fmt.Printf("请输入第%d个元素的值 ", i+1)
        fmt.Scanln(&score[i])
      }

      for i := 0; i < len(score); i++ {
        fmt.Printf("score[%d]=%v ", i, score[i])
      }
    }

    四种初始化数组的方式:

    func main() {

      var numsArray01 [3]int = [3]int {1, 2, 3} //第一种
      var numsArray02 = [3]int {1, 2, 3} //第二种
      var numsArray03 = [...]int {6, 7, 8} //第三种 ...必须是3个,固定写法
      //可以指定元素值对应的下标 ...
      var names = [3]string{1:"tom", 0:"jack", 2:"marry"} //第四种

      fmt.Println(numsArray01)
      fmt.Println(numsArray02)
      fmt.Println(numsArray03)
      fmt.Println(names)
    }

     

  • 相关阅读:
    两个List集合过滤出不同集合
    TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
    sql server 查询某个表被哪些存储过程调用
    SQL server字符分割
    oracle 结果集合并
    tree与GridView交互
    oracle job相关
    ImportFileHandler 附件上传
    dt转换List CovertListHelper
    node版本管理mac版
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11355360.html
Copyright © 2011-2022 走看看