2012-02-18 93 views
0

好的我在这里为我的学校计划感到有点困惑。该程序执行,我得到了我想要的结果,但我只是觉得可能会更好。在我的findLowest()函数中它有一个int返回。那么我在参数中传入的数据类型是double。具有一个返回类型的函数可以具有不同的数据类型参数吗?或者我应该说有没有更好的方法来做到这一点,也许是铸造?我没有问题,但找到最低需要调用calcAverage(),这让我难倒,因为如果我改变了数据成员比显然正确的数据不会传递到每个函数和传递。这里是程序中的代码片断,感谢任何想法提前,如果需要它可以始终保持原样,它的工作原理。函数中返回值的数据类型不同?

//function averages input test scores 
void calcAverage(double score1, double score2, double score3, double score4, double score5) 
{ 
    //call to findLowest() function to decide which score to omit 

     double lowest = findLowest(score1, score2, score3, score4, score5); 

     double average = ((score1 + score2 + score3 + score4 + score5) - lowest)/4; 

     cout << "Average is: " << average << endl; 

} 

//determines which input score is lowest 
int findLowest(double score1, double score2, double score3, double score4, double score5) 
{ 

    double low = score1;  

    if(score2 < low) 
     low = score2; 
    if(score3 < low) 
      low = score3; 
    if(score4 < low) 
     low = score4; 
    if(score5 < low) 
     low = score5; 

    cout << "Lowest score is: " << low << endl; 


return low; 
} 
+0

你有没有学过数组/矢量呢?得分1,得分2等将很快达到理智的限度。 – Duck 2012-02-18 23:33:38

+0

@Duck我希望我可以使用他们,但他们是下一章,我不允许使用他们 – Gmenfan83 2012-02-18 23:34:24

回答

2

为什么不改变findLowest的返回类型加倍?

2

findLowest函数体定义double low但是你回到它作为int,这样就可以再次把它分配给double

将此返回值的类型从int更改为double,一切都会好起来的。

“一个返回类型的函数可以具有不同的数据类型参数吗?”
当然可以。返回值的类型不一定与参数的类型有关。

“问题是在声明它说,使用功能int findLowest问题书”
这本书也许作者想要你做这样的事情:

#include <limits> 
#include <vector> 
... 
int findLowest(vector<double>& v) 
{ 
    int lowest = -1; 
    double lowestValue = numeric_limits<double>::max(); 
    for (int i = 0; i < v.size(); ++i) 
    { 
     if (v[i] < lowestValue) 
     { 
      lowestValue = v[i]; 
      lowest = i; 
     } 
    } 
    cout << "Lowest score is: " << lowestValue << " at index: " << lowest << endl; 
    return lowest; 
} 
... 
    // in calcAverage: 
    vector<double> args; 
    args.resize(5); 
    args[0] = score1; args[1] = score2; args[2] = score3; args[3] = score4; args[4] = score5; 

    int lowest = findLowest(args); 
    args[lowest] = 0; 
    double average = (args[0] + args[1] + args[2] + args[3] + args[4])/4; 
+0

这就是我所困惑的和我的怀疑是正确的,因此我的问题。问题出现在书中,它指出了它对我们说函数int findLowest的问题。因此我不确定它可以改变。问题是它有点被改变,因为我正在处理双打而不是整数 – Gmenfan83 2012-02-18 23:33:15

+1

@ Gmenfan83施法不会帮助你。即使您在函数内部投射,但返回一个int,它也会返回一个“int”,所以除非您更改返回类型,否则可能会丢失数据。 – Sid 2012-02-18 23:35:20

+0

@ Gmenfan83:现在查看我的答案。现在显示可能的解决方案。 – LihO 2012-02-19 00:02:53

1

当然,你可以。您可以通过foo类型并返回bar类型。

在你的例子中,你需要知道一件事。当您将double的值分配给int类型时,可以截断它们。所以你失去了精确度。如果你通过0.254,你可能会得到0。这可能不是被调用者期望的。

我会改变findLowest,这样它会返回一个double,最好尽可能地坚持正确的类型。

根据要求,更好的解决方案可能是返回一个int,表示五个数字中的哪一个较低。所以如果你打电话给findLowest(2.3, 4, 0, 9, 6)它会返回2. findLowest(1, 2, 3, 4, 5) = 0

+0

)我只是把回报改成了两倍,我相信我的教授在处理双打时可以理解,而不是惩罚我。为了尝试把事情搞清楚! – Gmenfan83 2012-02-19 00:20:05

相关问题