编程中的函数返回值与数组使用
在编程里,我们常常需要定义和运用各类函数,其中能返回值的函数尤为重要。
1. 创建返回值的函数
在同一个程序中,我们可以定义并使用多个函数,数量上没有限制。函数可分为返回值的函数和无返回值的
void
函数,并且在同一程序里能同时定义和使用这两种类型的函数。
下面通过一个将浮点数四舍五入到指定小数位的例子来详细说明。
1.1 浮点数精度问题
浮点数在某些情况下精度不准确,特别是在小数位较小时。例如:
println(3.0/9.0);
输出结果是
0.33333334
,而正确结果应为
0.33333333
。并且,有时处理过多小数位不太方便,比如处理货币金额时,通常只需要保留两位小数。
1.2 四舍五入公式
对于一个带小数的数,如
3.168
,将其四舍五入到十分位的步骤如下:
1. 该数乘以 10:
3.168 * 10 = 31.68
2. 将结果四舍五入为整数:
round(31.68) = 32
3. 整数除以 10:
32 / 10.0 = 3.2
在 Processing 代码中可表示为:
round(numberToRound * 10) / 10.0
注意这里除以
10.0
是为了避免整数除法。
同理,将其四舍五入到百分位的步骤为:
1. 该数乘以 100:
3.168 * 100 = 316.8
2. 将结果四舍五入为整数:
round(316.8) = 317
3. 整数除以 100:
317 / 100.0 = 3.17
Processing 代码表示为:
round(numberToRound * 100) / 100.0
更通用的公式是,如果要将数四舍五入到
n
位小数:
1. 该数乘以
10^n
2. 将结果四舍五入为整数
3. 整数除以
10^n
Processing 代码表示为:
round(numberToRound * pow(10, places)) / pow(10, places)
由于
pow()
函数返回浮点数,所以无需担心整数除法问题。
1.3 编写四舍五入函数
定义函数时,函数头需要包含三个信息:
1. 返回值类型:因为四舍五入后的结果仍为浮点数,所以返回类型为
float
。
2. 函数名:这里命名为
roundPlaces()
。
3. 参数列表:需要传入要四舍五入的浮点数和指定的小数位数。
完整的函数定义如下:
float roundPlaces(float numberToRound, int places)
{
float result;
result = round(numberToRound * pow(10, places)) / pow(10, places);
return result;
}
在
setup()
函数中调用该函数:
void setup()
{
float unrounded = 3.168;
int decimals = 2;
float rounded;
rounded = roundPlaces(unrounded, decimals);
println(unrounded + " --> " + rounded);
}
若要使程序具有交互性,让用户输入要四舍五入的数和小数位数,可添加如下代码:
import static javax.swing.JOptionPane.*;
void setup()
{
String input;
String output;
float unrounded;
int decimals;
float rounded;
char rightArrow = char(8594);
input = showInputDialog("Enter a number to be rounded:");
unrounded = float(input);
input = showInputDialog("Enter a number of decimal places");
decimals = int(input);
rounded = roundPlaces(unrounded, decimals);
output = unrounded + " " + rightArrow + " " + rounded;
showMessageDialog(frame, output);
}
2. 函数总结
- 能返回值的函数通常简称为“函数”。
-
定义返回值的函数需要指定非
void的返回类型,并且要有return语句。 -
与
void函数一样,返回值的函数可在同一程序中多次调用,也能定义一个或多个参数。 -
同一程序中可定义和使用多个
void或非void函数。
3. 相关练习
以下是一些相关的编程练习:
1. 编写
randomMonth()
函数,返回 1 到 12 之间的随机整数,并在
setup()
函数中调用该函数,将结果赋值给
month
变量,然后在控制台显示
month
的值。
2. 编写
circum()
函数,接收一个
float
类型的
diameter
参数,利用 Processing 内置的
PI
常量计算并返回直径为
diameter
的圆的周长。在
setup()
函数中声明变量
diam
并赋值,调用
circum()
函数,将结果赋值给
circumference
变量,最后在控制台显示
diam
和
circumference
的值。
3. 修改上一题的程序,随机选取 1 到 100 之间的直径。
4. 编写
circleArea()
函数,接收一个
float
类型的
circleRadius
参数,计算并返回半径为
circleRadius
的圆的面积。在
setup()
函数中声明变量
radius
并赋值,调用
circleArea()
函数,将结果赋值给
area
变量,最后在控制台显示
radius
和
area
的值。
5. 修改上一题的程序,随机选取 1 到 100 之间的直径。
6. 编写
sphereVolume()
函数,接收一个
float
类型的
sphereRadius
参数,计算并返回半径为
sphereRadius
的球体的体积。在
setup()
函数中声明变量
radius
并赋值,调用
sphereVolume()
函数,将结果赋值给
volume
变量,最后在控制台显示
radius
和
volume
的值。
7. 修改上一题的程序,随机选取 1 到 100 之间的直径。
8. 编写
coneVolume()
函数,接收
float
类型的
coneRadius
和
coneAltitude
参数,计算并返回半径为
coneRadius
、高为
coneAltitude
的圆锥的体积。在
setup()
函数中声明变量
radius
和
altitude
并赋值,调用
coneVolume()
函数,将结果赋值给
volume
变量,最后在控制台显示
radius
、
altitude
和
volume
的值。
9. 编写
yardsToMeters()
函数,接收一个
float
类型的码数作为参数,返回对应的米数(1 码 = 0.9144 米)。在
setup()
函数中随机选取 1 到 100 之间的整数作为码数,赋值给
yards
变量,调用
yardsToMeters()
函数,将结果赋值给
meters
变量,最后在控制台显示选取的码数和对应的米数。
10. 修改上一题的程序,允许用户在对话框中输入要转换的码数。
11. 编写
monthDays()
函数,接收一个月份数字,返回表示该月天数的字符串。在
setup()
函数中随机选取 1 到 12 之间的整数,调用
monthDays()
函数,在控制台显示选取的月份和对应的天数。
12. 修改上一题的程序,允许用户在对话框中输入月份数字。
4. 数组的使用
当需要处理一组相关且类型相同的数据时,使用数组是个不错的选择。
4.1 数组的概念
数组是由固定数量、相同类型的元素按特定顺序排列而成的。具体特点如下:
1.
固定数量
:数组存储的元素数量是固定的,其存储容量一般不会改变。
2.
相同类型
:数组中所有元素的类型必须相同。
3.
特定顺序
:数组中的元素按特定顺序排列。
数组中的每个元素都有一个索引,在计算机编程中,数组索引通常从 0 开始。例如,有一组温度数据
57, 10, 32, 78, 212, 101
,若将其存储在名为
temperatures
的数组中,要访问数组中索引为 3 的元素,可使用
temperatures[3]
,该元素的值为
78
。
4.2 数组的声明
在 Processing 中创建数组变量,首先要进行声明。声明数组变量时,先指定元素类型,然后在类型后面添加左右方括号。例如:
int[] temperatures;
此语句只是让 Processing 创建一个名为
temperatures
的变量,用于存储一个
int
类型数组在计算机内存中的地址,但数组并未实际创建,内存地址也未知。
4.3 数组的初始化
有时候,我们在创建数组时就知道其初始值。这时,可以在数组声明语句中使用赋值运算符
=
来初始化数组。例如:
int[] temperatures = {57, 10, 32, 78, 212, 101};
需要注意的是,不能分开声明数组变量和指定初始值,以下代码会产生错误:
int[] temperatures;
temperatures = {57, 10, 32, 78, 212, 101}; // 错误!
当在一个语句中声明并初始化数组时,Processing 会完成以下三件事:
1. 在计算机内存中为新数组分配空间。
2. 将列出的值插入到数组的相应位置。
3. 将新数组在计算机内存中的地址存储在数组变量中。
我们可以通过调用
print()
函数来验证数组变量存储的是数组的内存地址:
int[] temperatures = {57, 10, 32, 78, 212, 101};
print(temperatures);
运行程序后,控制台输出类似
[I@2a139a55
的内容,
@
符号后面的字符表示数组在内存中的十六进制地址。
综上所述,数组变量并不直接包含实际的数组,而是存储数组在计算机内存中的地址。通过合理运用数组,我们可以更高效地处理大量同类型的数据。希望大家通过本文的介绍和练习,能更好地掌握创建返回值的函数和数组的使用。
编程中的函数返回值与数组使用(续)
5. 数组的操作示例
为了更好地理解数组的使用,下面给出一些具体的操作示例。
5.1 遍历数组
遍历数组就是依次访问数组中的每个元素。在 Processing 中,可以使用
for
循环来实现。以下是遍历
temperatures
数组并打印每个元素的示例代码:
int[] temperatures = {57, 10, 32, 78, 212, 101};
for (int i = 0; i < temperatures.length; i++) {
println("Index " + i + ": " + temperatures[i]);
}
在上述代码中,
temperatures.length
表示数组的长度,即数组中元素的个数。
for
循环从索引 0 开始,依次访问数组中的每个元素,并将其索引和值打印到控制台。
5.2 修改数组元素
可以通过索引直接修改数组中的元素。例如,将
temperatures
数组中索引为 2 的元素修改为 35:
int[] temperatures = {57, 10, 32, 78, 212, 101};
temperatures[2] = 35;
println("Modified temperatures: ");
for (int i = 0; i < temperatures.length; i++) {
println("Index " + i + ": " + temperatures[i]);
}
运行上述代码后,会发现数组中索引为 2 的元素值变为了 35。
5.3 数组求和
可以通过遍历数组并累加每个元素的值来计算数组中所有元素的和。以下是计算
temperatures
数组元素和的示例代码:
int[] temperatures = {57, 10, 32, 78, 212, 101};
int sum = 0;
for (int i = 0; i < temperatures.length; i++) {
sum += temperatures[i];
}
println("Sum of temperatures: " + sum);
在上述代码中,使用
sum
变量来累加数组中的每个元素的值,最终得到数组元素的总和。
6. 多维数组
除了一维数组,还可以使用多维数组来存储更复杂的数据结构。例如,二维数组可以看作是一个表格,有行和列。
6.1 二维数组的声明和初始化
以下是声明和初始化一个二维数组的示例代码:
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
在上述代码中,
matrix
是一个 3 行 3 列的二维数组。可以通过两个索引来访问二维数组中的元素,第一个索引表示行,第二个索引表示列。例如,要访问第二行第三列的元素,可以使用
matrix[1][2]
(注意索引从 0 开始)。
6.2 遍历二维数组
可以使用嵌套的
for
循环来遍历二维数组。以下是遍历
matrix
二维数组并打印每个元素的示例代码:
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
println("Element at row " + i + ", column " + j + ": " + matrix[i][j]);
}
}
在上述代码中,外层
for
循环控制行,内层
for
循环控制列,通过嵌套循环可以依次访问二维数组中的每个元素。
7. 数组的应用场景
数组在编程中有广泛的应用场景,以下是一些常见的应用场景:
| 应用场景 | 描述 |
|---|---|
| 数据存储 | 可以使用数组来存储一组相关的数据,如温度、成绩、坐标等。 |
| 排序算法 | 许多排序算法(如冒泡排序、选择排序、快速排序等)都需要使用数组来存储待排序的数据。 |
| 图像处理 | 在图像处理中,数组可以用来存储图像的像素值,通过对数组元素的操作来实现图像的处理和变换。 |
| 游戏开发 | 在游戏开发中,数组可以用来存储游戏中的角色位置、道具信息等。 |
8. 总结
本文详细介绍了编程中创建返回值的函数和数组的使用。通过将浮点数四舍五入到指定小数位的例子,我们学习了如何定义和调用返回值的函数,以及函数头中需要包含的信息。同时,我们还了解了数组的概念、声明、初始化和操作,包括一维数组和二维数组的使用。数组在编程中是一种非常重要的数据结构,能够帮助我们更高效地处理大量同类型的数据。希望读者通过本文的学习,能够掌握这些知识,并在实际编程中灵活运用。
以下是一个简单的流程图,展示了创建返回值函数和使用数组的基本流程:
graph TD;
A[开始] --> B[创建返回值函数]
B --> C[定义函数头(返回类型、函数名、参数列表)]
C --> D[编写函数体]
D --> E[返回结果]
B --> F[调用函数]
F --> G[使用返回值]
A --> H[使用数组]
H --> I[声明数组]
I --> J[初始化数组]
J --> K[操作数组(遍历、修改、求和等)]
K --> L[结束]
G --> L
通过这个流程图,我们可以更清晰地看到创建返回值函数和使用数组的整个过程。在实际编程中,我们可以根据具体需求灵活运用这些知识,提高编程效率和代码质量。
超级会员免费看

被折叠的 条评论
为什么被折叠?



