Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C+中的调用函数计算均值+;?_C++ - Fatal编程技术网

C++ 如何使用C+中的调用函数计算均值+;?

C++ 如何使用C+中的调用函数计算均值+;?,c++,C++,这些函数是getInputN(),calculateMean()&displayData() 所以说得很清楚,这些是要求 getInputN函数:应接受值的数字,N作为一个整数作为参数,并要求用户输入N number的值。然后,将值的总和返回为双精度 calculateMean函数:应接受值的数目、N和值的总和作为参数。然后将平均值作为双精度返回 displayData函数:应接受平均值作为参数。然后,在屏幕上相应的消息中显示它们。此函数不需要返回值 如果我运行代码,它将显示Average=

这些函数是
getInputN()
calculateMean()
&
displayData()

所以说得很清楚,这些是要求

  • getInputN
    函数:应接受值的数字,N作为一个整数作为参数,并要求用户输入N number的值。然后,将值的总和返回为双精度
  • calculateMean
    函数:应接受值的数目、N和值的总和作为参数。然后将平均值作为双精度返回
  • displayData
    函数:应接受平均值作为参数。然后,在屏幕上相应的消息中显示它们。此函数不需要返回值
如果我运行代码,它将显示Average=inf

p/s:我真的很抱歉一开始的问题让人困惑。我对这个网站很陌生,这是我的第一个问题。在这个平台上,我花了很多时间才弄清楚要问的问题。我希望你们能理解,再次对给你们带来的不便表示歉意。也谢谢你的帮助:)

这是我的密码:

#include <iostream>
using namespace std;

int getInputN(int n);
float calculateMean (int n, float sum);
float displayData(double mean);

int i,n;
float sum = 0.0, num[50];
double mean;

int main()
{
    getInputN(n);
    calculateMean (n, sum);
    displayData(mean);

    return 0;
}

int getInputN(int n)
{
    int i;
    float num[50];

    //User enter the number of value
    cout << "Enter the numbers of data: ";
    cin >> n;
    
    //if user input more than 50 numbers
    while (n > 50 || n <= 0)
    {
        cout << "Invalid! Enter the number in range of (1 to 50)." << endl;
        cout << "Enter the number of data: ";
        cin >> n;
    }

    for(i = 0; i < n; ++i)
    {
        cout << i + 1 << ". Enter number: ";
        cin >> num[i];
        sum += num[i];
    }

    return n;
}

    //function to calculate the mean
    float calculateMean (int n, float sum)
    {
    
        mean = sum/n;
    
        return mean;
    }

    //function to display the mean
    float displayData (double mean)
    {
        cout << "Average = " << mean;
    }
#包括
使用名称空间std;
intgetinputn(intn);
浮点计算器(整数n,浮点和);
浮动显示数据(双平均值);
inti,n;
浮动总和=0.0,数值[50];
双均值;
int main()
{
getInputN(n);
计算表(n,和);
显示数据(平均值);
返回0;
}
int getInputN(int n)
{
int i;
float num[50];
//用户输入值的数目
cout>n;
//如果用户输入的数字超过50个

而函数
getInputN
中的参数
intn
隐藏了全局变量
n
。这会阻止全局变量被更新,并将
sum
除以零(没有显式初始化的gloval变量的默认值)

如果希望使用gloval变量传递数据,则应删除这些参数,因为其中一个(
n
,如上所述)有害,而另一个是冗余的

另外,函数
displayData
被声明为返回
float
,但没有执行任何
return
语句。这会调用未定义的行为。我通过将其返回类型更改为
void
修复了此问题

#include <iostream>
using namespace std;

int getInputN();
float calculateMean ();
void displayData();

int i,n;
float sum = 0.0, num[50];
double mean;

int main()
{
    getInputN();
    calculateMean ();
    displayData();

    return 0;
}

int getInputN()
{
    int i;
    float num[50];

    //User enter the number of value
    cout << "Enter the numbers of data: ";
    cin >> n;
    
    //if user input more than 50 numbers
    while (n > 50 || n <= 0)
    {
        cout << "Invalid! Enter the number in range of (1 to 50)." << endl;
        cout << "Enter the number of data: ";
        cin >> n;
    }

    for(i = 0; i < n; ++i)
    {
        cout << i + 1 << ". Enter number: ";
        cin >> num[i];
        sum += num[i];
    }

    return n;
}

//function to calculate the mean
float calculateMean ()
{

    mean = sum/n;

    return mean;
}

//function to display the mean
void displayData ()
{
    cout << "Average = " << mean;
}
#包括
使用名称空间std;
int getInputN();
float calculateMean();
void displayData();
inti,n;
浮动总和=0.0,数值[50];
双均值;
int main()
{
getInputN();
计算面();
显示数据();
返回0;
}
int getInputN()
{
int i;
float num[50];
//用户输入值的数目
cout>n;
//如果用户输入的数字超过50个

而(n>50 | n函数中使用
int getInputN(int n)
中的变量
n
,而不是声明的全局
n
。因此,使用global
n
(在该点初始化为0之前未初始化)计算
mean=sum/n
将导致
未定义行为
除以0
错误,导致
inf

更多信息:

此外,函数
float displayData(双平均值)
不返回任何值,导致另一个
未定义行为

更多信息:

修改代码:

#include <iostream>
using namespace std;

void getInputN();
void calculateMean();
void displayData();

int i,n;
float sum = 0.0, num[50];
double mean;

int main()
{
    getInputN();
    calculateMean();
    displayData();

    return 0;
}

void getInputN()
{
    int i;
    float num[50];

    //User enter the number of value
    cout << "Enter the numbers of data: ";
    cin >> n;

    //if user input more than 50 numbers
    while (n > 50 || n <= 0)
    {
        cout << "Invalid! Enter the number in range of (1 to 50)." << endl;
        cout << "Enter the number of data: ";
        cin >> n;
    }

    for(i = 0; i < n; ++i)
    {
        cout << i + 1 << ". Enter number: ";
        cin >> num[i];
        sum += num[i];
    }
}

//function to calculate the mean
void calculateMean ()
{
    mean = sum/n;
}

//function to display the mean
void displayData ()
{
    cout << "Average = " << mean;
}
此外,如果您不将这些数字用于其他任何事情,那么声明一个
float num[50];
是毫无意义的。另外,请注意,不建议使用全局变量和

#include <iostream>

const int maxn = 50;
const int minn = 1;

int main()
{
    int n; std::cout << "Enter N : "; std::cin >> n;
    while (n < minn || n > maxn) {std::cout << "Invalid. Re-enter N : "; std::cin >> n;}

    double sum = 0; int tmp;
    for (int i = 0; i < n; i++) { std::cout << "Enter number " << i+1 << " : "; std::cin >> tmp; sum += tmp;}

    std::cout << "Average : " << sum/n;
}

通过了解函数的行为,我们可以编写工作良好且根本不使用任何全局变量的实现

#include <iostream>

double getInputN(int n);
double calculateMean(int n, double sum);
void displayData(double mean);

int main()
{   
    //User enter the number of value
    int numEntries;
    std::cout << "Enter the numbers of data: ";
    std::cin >> numEntries;

    //if user input more than 50 numbers
    while (numEntries > 50 || numEntries <= 0)
    {
        std::cout << "Invalid! Enter the number in range of (1 to 50)." << std::endl;
        std::cout << "Enter the number of data: ";
        std::cin >> numEntries;
    }

    // Get user input
    double sum = getInputN(numEntries);

    double mean = calculateMean(numEntries, sum);

    displayData(mean);

    return 0;
}

double getInputN(int n)
{
    double sum = 0.;

    for (int i = 0; i < n; ++i)
    {
        double userInput;
        std::cout << i + 1 << ". Enter number: ";
        std::cin >> userInput;
        sum += userInput;
    }

    return sum;
}

//function to calculate the mean
double calculateMean(int n, double sum)
{

    double mean = sum / n;

    return mean;
}

//function to display the mean
void displayData(double mean)
{
    std::cout << "Average = " << mean;
}
#包括
双getInputN(intn);
双计算表(整数n,双和);
无效显示数据(双平均值);
int main()
{   
//用户输入值的数目
国际货币基金组织;
标准::cout>numEntries;
//如果用户输入的数字超过50个

while(numEntries>50 | | numEntries有哪些错误?停止使用全局变量永远都不会太早。
getInputN
中的参数
int n
会对全局
int n
进行阴影处理。因此
getInputN
不会更新全局变量,它只会返回一个值。因此,当调用
calculateMean(n,sum)时
使用全局
n
作为参数,它没有任何有效值。您的函数有返回类型,您应该在调用代码中使用它们。calculateMean除以一个和(您从未向其添加任何内容,因此它为零)由一个你从未初始化过的数字n。看起来你根本不知道如何使用返回值。我得到的输出是Average=inf。答案应该是输入数字的平均值。我认为参数和返回值都搞乱了。全局
n
有静态存储持续时间,so它默认初始化为零。(8.5初始值设定项9)
mean=sum/n
调用未定义的行为,因为它被零除。(N3337 5.6乘法运算符)@mikeca我错了,我现在要修改它。哦,好的,我明白了……实际上在问题中,我的讲师说了三个函数getInput(n),calculateMean()&displayData接受参数。那么,这在代码中是如何实现的呢?顺便说一句,非常感谢您的回答!非常感谢。@daisy98如果您对函数的签名应该是什么以及它们应该如何工作有其他要求,请编辑实际问题以包含它们。否则人们将不得不猜测函数的预期行为是。@daisy98“实际上在问题中,我的讲师说getInput(N)、calculateMean()和displayData这三个函数接受参数。“但是为什么呢?我的意思是,
sum
mean
N
都是全局变量,可以被任何函数读取,所以
float calculateMean(整数n,浮点和)
Enter N : 3
Enter number 1 : 25
Enter number 2 : 97
Enter number 3 : 111
Average : 77.6667
#include <iostream>

double getInputN(int n);
double calculateMean(int n, double sum);
void displayData(double mean);

int main()
{   
    //User enter the number of value
    int numEntries;
    std::cout << "Enter the numbers of data: ";
    std::cin >> numEntries;

    //if user input more than 50 numbers
    while (numEntries > 50 || numEntries <= 0)
    {
        std::cout << "Invalid! Enter the number in range of (1 to 50)." << std::endl;
        std::cout << "Enter the number of data: ";
        std::cin >> numEntries;
    }

    // Get user input
    double sum = getInputN(numEntries);

    double mean = calculateMean(numEntries, sum);

    displayData(mean);

    return 0;
}

double getInputN(int n)
{
    double sum = 0.;

    for (int i = 0; i < n; ++i)
    {
        double userInput;
        std::cout << i + 1 << ". Enter number: ";
        std::cin >> userInput;
        sum += userInput;
    }

    return sum;
}

//function to calculate the mean
double calculateMean(int n, double sum)
{

    double mean = sum / n;

    return mean;
}

//function to display the mean
void displayData(double mean)
{
    std::cout << "Average = " << mean;
}