当前位置: 首页 > 知识库问答 >
问题:

向函数传递数组的问题

温智明
2023-03-14
#include <iostream>
#include <string>

using namespace std;

// Function Prototypes
void getMonthlyRainfall(double[], int);
double getTotal(const double[], int);
double getHighestAmount(const double[], int);
double getLowestAmount(const double[], int);

int main()
{
    const int MONTHS = 12;
    string monthNames[MONTHS] = { "January", "February", "March", "April", 
    "May", "June", "July", "August", "September", "October", "November", 
    "December" };
     double rainfall[MONTHS], // Array
        total,
        average,
        lowestAmount,
        highestAmount;

    //Get rainfall input from user
    getMonthlyRainfall(rainfall, MONTHS);

    // Get the total amount of rain for the year
    total = getTotal(rainfall, MONTHS);

    // Get the average rainfall
    average = total / MONTHS;

    // Get the month with the lowest rainfall
    lowestAmount = getLowestAmount(rainfall, MONTHS);

    // Get the month with the highest rainfall
    highestAmount = getHighestAmount(rainfall, MONTHS);

    cout << "Total rainfall: " << total << endl;
    cout << "Average rainfall: " << average << endl;
    cout << "Least rainfall in: " << getLowestAmount << endl;
    cout << "Most rainfall in: " << getHighestAmount << endl;
    return 0;
}

void getMonthlyRainfall(double rain[], int size) 
{
    int index;
    for (index = 0; index < 12; index++)
    {
        cout << "Enter rainfall for " << (index + 1) << ": ";
        cin >> rain[index];
    }
}

double getTotal(const double numbers[], int size) 
{
    double total = 0; // Accumulator
    for (int count = 0; count < size; count++)
        total += numbers[count];
    return total;
}

double getHighestAmount(const double numbers[], int size) 
{
    double highest; // Holds highest value
    // Get array's first element
    highest = numbers[0];
    // Step through array
    for (int count = 0; count < size; count++) 
    {
        if (numbers[count] > highest)
            highest = numbers[count];
    }
    return highest;
}

double getLowestAmount(const double numbers[], int size) 
{
    double lowest; // Holds lowest value
    // Get array's first element
    lowest = numbers[0];
    // Step through array
    for (int count = 0; count < size; count++)
    {
        if (numbers[count] < lowest)
            lowest = numbers[count];
    }
    return lowest;
}

总而言之,字符串数组输出月份名称,用户输入存储在单独的数组中用于计算。这些计算输出的是总量和平均值,但总降雨量需要与相应实体的月份进行比较,最高和最低的输出需要是字符串,而不是数字。

共有1个答案

罗鸿福
2023-03-14

这是一个简单的名字混淆。您有函数的名称(它将打印为一个“随机”数字),而不是您正在使用的变量的名称。

cout << "Least rainfall in: " << getLowestAmount << endl;

应该是

cout << "Least rainfall in: " << lowestAmount << endl;

至于你的第一个quesiton,改变

cout << "Enter rainfall for " << (index + 1) << ": ";
cout << "Enter rainfall for " << monthNames[index] << ": ";
void getMonthlyRainfall(double[], string[], int);
//Get rainfall input from user
getMonthlyRainfall(rainfall, monthNames, MONTHS);
void getMonthlyRainfall(double rain[], string monthNames[], int size) 
{
    ...

编辑

因此,要输出最低月降雨量和降雨量最低月份的名称,您应该更改getloWestamount函数,以返回降雨量最低月份的索引。您还应该更改这个函数的名称,因为它现在正在执行与原始函数不同的操作,并且旧的名称不能准确地描述新函数,但为了清楚起见,我将保持不变。你可以稍后再决定一个新名字。

// this function returns a month index, not a rainfall amount,
// so it's return type is int not double
int getLowestAmount(const double[], int);

以下是更新后的函数

int getLowestAmount(const double numbers[], int size) 
{
    double lowest; // Holds lowest value
    int lowestIndex; // Holds the index of the lowest value
    // Get array's first element
    lowest = numbers[0];
    lowestIndex = 0;
    // Step through array
    for (int count = 0; count < size; count++)
    {
        if (numbers[count] < lowest)
        {
            lowest = numbers[count];
            lowestIndex = count;
        }
    }
    return lowestIndex;
}
// Get the month with the lowest rainfall
lowestIndex = getLowestAmount(rainfall, MONTHS);

...

cout << "Least rainfall in: " << monthNames[lowestIndex] << 
    " is " << rainfall[lowestIndex] << endl;
 类似资料:
  • Go 语言数组 如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明: 方式一 形参设定数组大小: void myFunction(param [10]int) { . . . } 方式二 形参未设定数组大小: void myFunction(param []int) { . . . } 实例 让我们看下以下实例,实例中函数接收整型数组参数,另一个参数

  • 我正在尝试将参数传递给作为参数传递的函数指针。 代码: 我得到了这个错误: 类型"void"的参数与类型"void(*)(wchar_t*,wchar_t*)"的参数不兼容 如何解决此问题以完成我想要实现的目标? 编辑:对不起,不清楚。我实际上试图完成的是将函数注入子进程并传递两个参数(wchar_t*、wchar_t*),以便我可以使用它们。但主函数可以是void或int argc、char**

  • C++ 数组 C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针。 C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。 如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。 方式 1 形式参数是一个指针:

  • 清单2.4中,向std::thread构造函数中的可调用对象,或函数传递一个参数很简单。需要注意的是,默认参数要拷贝到线程独立内存中,即使参数是引用的形式,也可以在新线程中进行访问。再来看一个例子: void f(int i, std::string const& s); std::thread t(f, 3, "hello"); 代码创建了一个调用f(3, "hello")的线程。注意,函数f需

  • 要将数组参数传递给函数,需指定不带方括号的数组名。例如,如果数组hourlyTemperatures声明如下: int hourlyTemperatures[24]; 则下列函数调用语句: modifyArray(hourlyTemperatutes,24); 将数组 hourlyTemperatures 及其长度传递给函数 modifyArray。将数组传递给函数时,通常也将其长度传递给函数,使

  • 我编写了一个代码来传递函数指针列表(按其名称)作为参数。但我有错误。你能解释为什么我在做地图时有错误吗? 错误: 34:18:错误:无法将'void(Bar::)(int, int)'转换为'std::map, void(*)(int, int) 35:18:错误:无法将“无效(foo::)(整数,整数)”转换为“标准::映射,无效(*)(整数,整型) 41:70:错误:没有用于调用“std::v