一、题目
编写一个同时可求最大最小值、平均值的函数,给一组数据(float型数组),求出这组数据的最大最小、平均值。要求使用引用作为形参。(提示,这个函数需要返回多个数据,引用相当于多个返回值,考察引用和数组作为形参)
二、解题
(1)解题思路:定义两个函数,分别是输入函数和求数据函数,返回值为无,但求数据函数使用引用可以直接操作实参,相当于间接返回多个返回值,求数据函数中分别求平均数和最值,最值可以在一个循环内判断,最后主调函数输出结果。
(2)运行结果:
(3)代码:
//同时可求最大值、最小值、平均数的函数,引用做形参,多个返回值(引用),给一组float数组数据
#include<iostream>
using namespace std;
void q_max_min_aver(float a[], float &q_max, float &q_min, float &q_aver,int n)//使用引用返回多个返回值
{
int i = 0;
int m = n;//后面还要使用 n,所以暂时不能改变 n
while (m--)//先把数组所有数据加到q_aver
{
q_aver += a[i];
++i;
}
q_aver /= n;
for (i = 1; i < n; ++i)//传值过来时数组第一个元素就已经被认为是最大值和最小值
{
if (q_max < a[i]) q_max = a[i];//先判断最大值
else
{
if (q_min > a[i]) q_min = a[i];//再判断最小值,若当前 a[i] 即不大于最大值也不小于最小值,则不操作,查看下一元素
}
}
return;
}
void input_float(float (&a)[20],int n)//数组的引用做形参,直接操作实参,无括号就变为引用的数组
{
cout << "请输入float型数据:";
for (int i = 0; i < n; ++i) cin >> a[i];
return;
}
int main()
{
float a[20] = { 0 };
int n;//输入的数据个数
cout << "要输入的数据个数:";
cin >> n;
input_float(a, n);//输入数组
float MAX = a[0], MIN = a[0],aver = 0;//默认首元素为最大且最小
q_max_min_aver(a, MAX, MIN, aver, n);
cout << "最大值、最小值、平均数依次为:" << MAX << ' ' << MIN << " " << aver;
return 0;
}
(4)分析总结:
①尝试使用while(0 != (cin >> a[i]))输入数组失败最后妥协使用传统循环方法
②计算平均值时不可以除以sizeof(a)/sizeof(float),这里算出来的是定义时的数组长度