二维数组应用实例|学习笔记

简介: 快速学习二维数组应用实例

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:二维数组应用实例】与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9654


二维数组应用实例

内容介绍

一、二维数组应用实例要求

二、实现功能分析


一、二维数组应用实例要求

要求:定义二维数组,用于保存三个班,每个班五名同学成绩,定义一维数组是没办法区分那个班级的,所以这里要定义二维数组。并求出每个班级平均分、以及所有班级平均分。

image.png

输出结果为:

请输入:第1班的第1个学生的成绩1

请输入:第1班的第2个学生的成绩1

请输入:第1班的第3个学生的成绩1

请输入:第1班的第4个学生的成绩1

请输入:第1班的第5个学生的成绩1

请输入:第2班的第1个学生的成绩2

请输入:第2班的第2个学生的成绩2

请输入:第2班的第3个学生的成绩2

请输入:第2班的第4个学生的成绩2

请输入:第2班的第5个学生的成绩1

请输入:第3班的第1个学生的成绩3

请输入:第3班的第2个学生的成绩3

请输入:第3班的第3个学生的成绩3

请输入:第3班的第4个学生的成绩3

请输入:第3班的第5个学生的成绩3

从输出结果来看应该是要动态的给每个班学生赋值,循环的从控制台来输入同学的成绩,下面来完成案例。


二、实现功能分析

新建 main.go,分析如下:

1、定义一个二维数组 scores[3][5],第一个3表示3个一维数组,第二个5表示每个一维数组里面有5个元素,然后数据类型 float64

2、循环输入成绩,要循环输入成绩就要用到遍历,for 循环i初始值为0,i小于len,算出 scores 的大小,然后i++,再进行二次遍历一维数组,因为每个学生都要输入成绩,for 循环 j 等于0,后面 j 小于 len,len 中值为 scores[i],然后 j++。最后打印出“请输入第%d班的第%d个学生的成绩\n”,第一个%d 应该是 i+1,再+1是因为数组下标是从0开始,但不能打印第0个班,第二个%d 代表第几个学生。输出后 Scanln 进行接收,通过学生成绩 scores[i][j]地址进行接收,这时所有学生成绩应该都计算出来了,可以打印观察,代码如下:

package main

import (

fmt"

)

func main() {

//1.定义一个二维数组

var scores [3][5]float64

//2.循环的输入成绩

for i := 0; i < len(scores); i++ {

for j := e; j < len(scores[1]); j++ {

fmt. Printf("请输入第%d班的第%d个学生的成绩\n", i+1, j+1)

fmt. ScanIn(&scores[i][j])

}

}

fmt. Println(scores)

}

通过管理员命令进行运行:

>cd exercise

>go run main.go

这时会提示输入第一个班的第一个学生成绩,接下来分别快速输入第一个班五名学生成绩都为1.1,第二个班五名学生成绩都为3,第三个班五名学生成绩都为4,输入完毕后会看到三个班的五名学生成绩如下:

[[1.1 1.1 1.1 1.1 1.1] [3 3 3 3 3] [4 4 4 4 4]

接下面开始进行求出每个班的平均分。

3、遍历输出成绩后的二维数组,统计平均分首先要统计平均分,就要知道总分,要想得到总分可以定义 sum 为0.0,因为进行 for 循环就是在遍历每个班级的成绩了,所以在这里定义一个变量,用于累计各个班级的总分,累计总分则是sum +=scores[i][j]即可,然后输出第几班为%d,取值为i+1,总分为%v,就按原值输出,平均分为%v,总分为 sum,平均分就为 sum 除以总人数5,但这里为除以 len,人数写固定死了不好,班级总人数写 len(scores[i])更合理,scores[i]表示当前班级有几个学生,保存时 sum/ len(scores[i])会出现错误,因为 sum 是 float64的类型,而后面 len(scores[i])是 int 类型,需要在len前面转化为 float64类型,前面提过 Golang 在进行运算的时候要进行强制转化,不会默认的进行隐式转化,这时每个班的平均分就完成了。

但还要完成所有班级的平均分,而要求所有班级的平均分,就要累计出每一次的sum,所以在for循环外面再定义一个变量 totalSum,等于0.0,这一步就是定义一个变量,用于累计所有班级的总分,在第二次for循环后将每次 sum 值累计到totalSum 中,如 totalSum +=sum,意味着双循环完成后 totalSum 就是所有班级总分,以上功能完成后再次输出所有班级的总分%v,平均分%v,第一个%v的sum就该为 totalSum,第二个%v为 totalSum/15,总人数直接写15,如果要使用len(scores[i])每个班级总人数,就要进行累加每个班人数,可以再定义一个变量,把各个班级总人数统计出来再写到这里。

这里有一个小技巧,如果输出太长可以换行处理,但在要换行位置前一个必须是”,”号,如果“,”在换行之后会报错,而且这样的代码看着更简洁。

代码:

//3.遍历输出成绩后的二维数组,统计平均分

totalsum := 0.0

//定义一个变量,用于累计所有班级的总分

for i := 0; i< len(scores); i++ {

sum := 0.0

//定义一个变量,用于累计各个班级的总分

for j := 0; j< len(scores[i]); j++ {

sum += scores [i][j]

totalsum += sum

fmt.Printf("第%d班级的总分为%v,平均分%v\n", i+1, sum,

sum / float64(len(scores[i])))

}

fmt. Printf("所有班级的总分为%v,所有班级平均分%v\n",

totalSum, totalSum /15 )

}

下面进行运行:

D: \goproject\src\go_code\chapter08\exercise>go run main.go

再快速输入值,第一个班级五名学生成绩都为1,第二个班级五名学生成绩都为2,第三个班级五名学生成绩都为3,此时运行结果为:

1班级的总分5,平均分1

2班级的总10,平均分2

3班级的总15,平均分3

所有班级的总分为30,所有班级平均分2

以上结果与输入值计算后应得值相同,是正确的,所以功能实现成功。

相关文章
|
算法 编译器 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits 判断 Lambda表达式类型?
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits 判断 Lambda表达式类型?
237 4
|
NoSQL Redis Docker
在docker中安装redis,并且阿里云服务器配置
在docker中安装redis,并且阿里云服务器配置
510 1
|
12月前
实现多态的多种方式
【10月更文挑战第19天】这些多态的实现方式各有特点,在不同的场景中可以灵活运用,以提高代码的灵活性、可扩展性和复用性。
292 63
|
机器学习/深度学习 传感器 自动驾驶
未来之路:大模型技术在自动驾驶的应用与影响
本文深入分析了大模型技术在自动驾驶领域的应用和影响,万字长文,慢慢观看~ 文中首先概述了大模型技术的发展历程,自动驾驶模型的迭代路径,以及大模型在自动驾驶行业中的作用。 接着,详细介绍了大模型的基本定义、基础功能和关键技术,特别是Transformer注意力机制和预训练-微调范式。 文章还介绍了大模型在任务适配性、模型变革和应用前景方面的潜力。 在自动驾驶技术的部分,详细回顾了从CNN到RNN、GAN,再到BEV和Transformer结合的技术迭代路径,以及占用网络模型的应用。 最后,文章重点讨论了大模型如何在自动驾驶的感知、预测和决策层面提供赋能,突出了其在该领域的重要性和影响力。
2102 56
|
SQL Java Spring
【MybatisPlus异常】The SQL execution time is too large, please optimize
【MybatisPlus异常】The SQL execution time is too large, please optimize
492 0
【MybatisPlus异常】The SQL execution time is too large, please optimize
|
Oracle 关系型数据库 Windows
如何彻底卸载 IDEA,将IDEA完全删除
本文提供了一个详细的教程,指导用户如何彻底卸载 IntelliJ IDEA,包括使用Uninstall.exe程序和通过注册表删除残留项的步骤。
6841 3
如何彻底卸载 IDEA,将IDEA完全删除
|
11月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
418 7
Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
|
Android开发 开发者
Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题
【6月更文挑战第25天】Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题,首先在`styles.xml`中定义新主题,如`MyAppTheme`,然后在`AndroidManifest.xml`中设置`android:theme`。可应用于全局或特定Activity。运行时切换主题需重置Activity,如通过`setTheme()`和`recreate()`方法。这允许开发者定制界面以匹配品牌或用户偏好。
260 2
|
存储 Linux 网络安全
软考网络规划师复习第五章:认识虚拟化
软考网络规划师复习第五章:认识虚拟化