编写一个读入所有命令行参数的程序并打印平均值c ++

时间:2014-11-09 08:07:00

标签: c++

//review3
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;

double average;
int main(int argc, char* argv[])
{
    int num1 = atoi (argv[1]);
    int num2 = atoi (argv[2]);
    int num3 = atoi (argv[3]);
    average = ((num1 + num2 + num3) / 3);
    cout << average << endl;
}

如果我需要计算所有命令行参数的平均值,我不知道如何解决这个问题?这就是我用3个CLA做的方式,但我不确定如果不知道这个问题的CLA定量,我该怎么做。如果你必须找到中位数,是否有人也知道如何做到这一点?

3 个答案:

答案 0 :(得分:1)

以下是简单程序。

int sum = 0 ;
for ( int i = 1; i < argc; i++ )
{
  sum = sum + atoi(argv[i]) ;  //Exclusion of argv[0] is no incidence...
}

然后你可以做任何你想做的事情

答案 1 :(得分:1)

在main int argc的声明中,给出了参数的数量。您可以使用for循环遍历参数并计算平均值:

// Your includes here
// ...

int main(int argc, char* argv[])
{
    int average = 0;

    for(int i = 1; i < argc; i++) // argv[0] is the name of your program, so we are skipping it
    {
        average += atoi(argv[i]);
    }

    average = average / (argc - 1);
}

答案 2 :(得分:1)

argc将为您提供给main()的参数数量。

请注意,如果不提供参数,argc将为ONE,而不是零,因为argv [0]是可执行文件的文件名。

要获得中位数,以下应该可以解决问题:

float median;

// Get a sorted list of the integers
std:list<int> args;
for(int i = 1; i < argc; i++)
{
    args.push_back(atoi(argv[i]));
}
args.sort();

// Extract median from the sorted array of integers
int middle_index = args.size() / 2;
if (args.size() % 2 == 1)
{
    // For odd number of values, median is middle value
    median = args[middle_index];
}
else
{
    // For even number of values, median is average of the two middle values
    median = (args[middle_index-1] + args[middle_index]) / 2.0;
}