在现有代码中添加3个基本功能

时间:2019-03-10 20:38:23

标签: c

我有一个正在构建的成绩簿程序,可以正常运行,但是现在我想在现有代码中添加3个新功能。我无法将自己的大脑围绕着使它起作用所需的逻辑路径。我需要一种简单的方法来同时获得最高,最低和平均分数。这是我的程序...

#include <stdio.h>    
#include <stdlib.h>    
#include <ctype.h>    
#define MAX_GRADE_COUNT 200

int main() {
    int grade[MAX_GRADE_COUNT];
    int i;
    int count = 0;
    char continueResponse;

    printf("Welcome to Gradebooker!\n\n");
    for(i = 0; i < MAX_GRADE_COUNT; i++) {
        printf("Please enter grade (0-100): ");
        scanf(" %d", &grade[i]);
        count++;
        printf("Do you have more grades to enter?(Y/N): ");
        scanf(" %c", &continueResponse);
        if(toupper(continueResponse) != 'Y') {
            printf("\n >> Thank you for using Gradebooker! <<\n");
            break;
        }
    }
    printf("\n\nCurrent Gradebooker listings: \n\n");

    for(i = 0; i < count; i++) {
        printf("\t%5d\n", grade[i]);
    }

    return 0;
}

3 个答案:

答案 0 :(得分:0)

程序需要在第二个循环中计算最大值,最小值和平均值,如下所示:

git

最小值以大于列表中所有值的值开头(例如int sum = 0; int minimum = INT_MAX; int maximum = 0; for(i = 0; i < count; i++) { printf("\t%5d\n", grade[i]); sum += grade[i]; if(grade[i] < minimum) minimum = grade[i]; if(grade[i] > maximum) maximum = grade[i]; } float average = (float)sum / count; printf("min grade: %d\n", minimum); printf("max grade: %d\n", maximum); printf("average: %f\n", average); INT_MAX可以取的最大可能值)。然后,对于数组中的每个等级,如果它小于int变量中当前的等级,则将其替换为该等级。这样,minimum最终将包含最小的成绩。

最大相同,但是相反。

对于平均值,它会累加所有成绩的总和(minimum首先需要初始化为0),最后将其除以成绩数。这在sum中给出了算术平均值。

使用average,将平均值计算为浮点数(因此,平均值可以是非整数)。需要float,以便首先将(float)sum / count转换(转换)为浮点数,并在其上进行浮点除法。否则,使用sum将进行整数除法(返回一个舍入的整数),然后将其作为浮点数存储在sum / count变量中。

答案 1 :(得分:0)

寻找最大值的想法是:首先声明一个变量(比如说MAXX)来存储最大值,并以尽可能小的最小值进行初始化,然后遍历数组,如果有的话在数组中找到的值大于MAXX变量的当前值,而不是用该值更新MAXX的值。

寻找最小值的想法是:首先声明一个变量(假设是MINN)以存储最小值,并以尽可能大的最大值进行初始化,然后遍历数组,如果有的话在数组中找到的值大于MINN变量的当前值,而不是用该值更新MINN的值。

求平均值的想法:将所有年级求和,然后将 sum 除以年级数。

请参阅下面的实现以更好地理解:

<tr key={reply.text}>

答案 2 :(得分:-1)

我看不到您的所有代码(它似乎在底部被截断了),但是在C语言中获取平均值,最大值和最小值的基本过程如下:

int running_total = 0;
int count_grades  = 0;
int max_so_far    = 0;
int min_so_far    = 999;
while( -1 ){ // infinite loop
    // get input (a grade)
    // if input is done, break
    count_grades++;
    running_total += iCurrentGrade; // (iCurrentGrade should be defined during input phase)
    if( iCurrentGrade > max_so_far ) max_so_far = iCurrentGrade;
    if( iCurrentGrade < min_so_far ) min_so_far = iCurrentGrade;
}
printf( "avg: %d  min: %d  max: %d\n", (int)(running_total / count_grades), min_so_far, max_so_far );