如何在整数和双精度数组中找到最大双精度数(C ++)?

问题描述 投票:-1回答:2

我有一个数组:values [],用以下格式的整数和双精度填充:

学生人数,学生ID,成绩,1年级...... n年级,......

所以2 1534 3 90.0 76.8 100.0 1245 1 99.0将被解释为2名学生,学生ID 1534有3个等级(90.0,76.8,100.0),学生ID 1245有1年级(99.0)。

我需要编写一个函数来找到这个数组中最大的等级。我的思维过程是这样的:

double max_grade = -1.0;

for(int i = 0; i < size; ++i) {
    if(values[i] > max_grade){
       max_grade = values[i];
    }
}

但是我认为这会比较数组中的所有值,我只想比较双打。

我如何只检查混合了双精度和整数的数组中的双精度数?

c++ arrays integer double max
2个回答
2
投票

我有一个数组:values [],用整数和双精度填充

你好扎里案,

首先,在C或C ++中没有“混合型数组”这样的东西。如果你的数组需要双精度数,那么你需要一个双精度数组,这意味着你的所有数组元素都是double类型。

那不是问题,因为您可以通过指定0小数来表示十进制形式的整数,如下所示:

  • 5 -> 5.0
  • 1337 -> 1337.0
  • 0 -> 0.0

等等。

所以2 1534 3 90.0 76.8 100.0 1245 1 99.0将被解释为2名学生,学生ID 1534有3个等级(90.0,76.8,100.0),学生ID 1245有1年级(99.0)。

如果您需要这种确切的语法,那么您可以快速编写一个解析器,该解析器将通过您的条目并为您获得每个学生的最高分。 我想你需要这样的东西(我将数据附加到你的数组中,例如):

#include <stdio.h>

double highest_mark(double *mark_array, int number_of_marks)
{
    double max_grade = -1.0;
    for (int i = 0; i < number_of_marks; i++)
        if (mark_array[i] > max_grade)
            max_grade = mark_array[i];
    return max_grade;
}

int main()
{
    double student_info[] = {5.0, 1534.0, 3.0, 90.0, 76.8, 100.0, 1245.0, \
1.0, 99.0, 5555.0, 7.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 42.0, 2, 99.0, 98.0, \
1337.0, 1.0, 0.0};
    int number_of_students = (int)student_info[0], number_of_marks, student_id;
    int current_index = 1;

    printf("Number of students: %d\n---\n", number_of_students);
    while (number_of_students--) {
        student_id = student_info[current_index];
        number_of_marks = student_info[current_index + 1];
        printf("Student ID: %d\n", student_id);
        printf("Number of marks: %d\n", number_of_marks);
        for (int i = 0; i < number_of_marks; i++)
            printf("\tMark %d: %.1f\n", i + 1, student_info[current_index + i + 2]);
        printf("\t\tMax grade: %.1f\n", highest_mark(&student_info[current_index + 2], number_of_marks));
        current_index += (2 + number_of_marks);
    }

    return 0;
}

这将产生这个输出:

Number of students: 5
---
Student ID: 1534
Number of marks: 3
    Mark 1: 90.0
    Mark 2: 76.8
    Mark 3: 100.0
        Max grade: 100.0
Student ID: 1245
Number of marks: 1
    Mark 1: 99.0
        Max grade: 99.0
Student ID: 5555
Number of marks: 7
    Mark 1: 1.0
    Mark 2: 2.0
    Mark 3: 3.0
    Mark 4: 4.0
    Mark 5: 5.0
    Mark 6: 6.0
    Mark 7: 7.0
        Max grade: 7.0
Student ID: 42
Number of marks: 2
    Mark 1: 99.0
    Mark 2: 98.0
        Max grade: 99.0
Student ID: 1337
Number of marks: 1
    Mark 1: 0.0
        Max grade: 0.0

如果这有助于您,请不要犹豫,询问您是否有更多问题,或者将问题标记为已解决。

J.史密斯


0
投票
double max_grade = -1.0;

for(int i = 0; i < size; ++i) {
    if(values[i] != int(values[i]) && values[i] > max_grade){
       max_grade = values[i];
    }
}

如果values [i]是double(例如5.2),则5.2!= int(5.2)因为int cast将向下舍入

但如果values [i]是整数(例如5.0),则5.0 = int(5.0),因为向下舍入5.0与5.0相同

因此,如果我们想确保values [i]是double,我们需要确保将值[i]转换为“int”不等于原始值

这就是为什么我在比较最大值之前添加了这个条件(values [i]!= int(values [i]))

© www.soinside.com 2019 - 2024. All rights reserved.