我坚持练习编程课程。我实际上不希望代码我想要更多的提示。
我有一个分数数组,我需要找到数组中最大的分数。此外,我有一个函数decimal(),它将分数转换为十进制。我的想法是这样的:
struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
double greatestValue = 0.0;
for (int i = 0; i < arrayLength; i++) {
if (decimal(fractionArray[i]) > greastestValue) {
greatestValue = i;
}
}
return fractionArray[];
}
将分数转换为十进制但我必须返回一个结构。我不知所措。
答案 0 :(得分:2)
你应该选择第一个元素作为最大值,因为如果数组中的所有元素都是负数,那么你的灵魂就是错误的。
struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
double greatestValue = fractionArray[0].numer / (double) fractionArray[0].denumer;
size_t maxIndex = 0;
for (size_t i = 1; i < arrayLength; ++i) {
double tmpVal = fractionArray[i].numer / (double) fractionArray[i].denumer;
if (tmpVal > greatestValue) {
maxIndex = i;
}
}
return fractionArray[maxIndex];
}
如果您需要更准确的比较,您可以这样做:
bool greater(struct fraction& a, struct fraction& b) {
return a.numer * b.denumer > a.denumer * b.numer;
}
struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){
double greatestValue = fractionArray[0];
size_t maxIndex = 0;
for (size_t i = 1; i < arrayLength; ++i) {
if (greater(fractionArray[i], greatestValue)) {
maxIndex = i;
}
}
return fractionArray[maxIndex];
}
答案 1 :(得分:0)
试试这个:
struct fraction& greatestFraction(struct fraction fractionArray[], int arrayLength)
{
double greatestValue = decimal(fractionArray[0]);
int greatestValueIndex = 0;
for (int i=1; i<arrayLength; i++)
{
double value = decimal(fractionArray[i]);
if (greastestValue < value)
{
greastestValue = value;
greatestValueIndex = i;
}
}
return fractionArray[greatestValueIndex];
}