首页 文章

GP中的GPA计算器帮助

提问于
浏览
1

我目前正在学习C,在章节结尾处的一个挑战问题是我 Build 了一个GPA计算器 . 这是挑战:

创建学生GPA平均计算器 . 该程序应提示用户输入最多30个GPA,这些GPA存储在一维数组中 . 每次他或她输入GPA时,用户都应该可以选择计算当前的GPA平均值或输入另一个GPA . 此程序的示例数据:GPA:3.5 GPA:2.8 GPA:3.0 GPA:2.5提示:小心不要将空数组元素计算到学生GPA平均值中 .

我有程序似乎有点工作,但当它计算GPA平均值时,它计算错误 . 有人请看看我的源代码,让我知道我做错了什么?

源代码

#include <stdio.h>

int main() 
{
    float fGrades[30] = {0};
    float fAverage = 0;
    int x;
    int y = 0;
    float fSum = 0;
    char cResp = '\0';

    printf("\nGPA Calculater");
    printf("\nYou can enter up to 30 grades");

    do 
    {
        printf("\nPlease enter a grade and press enter: ");
        scanf("%f", &fGrades[x]);

        printf("\nDo you want to calculate the GPA? (Y or N): ");
        scanf("\n%c", &cResp);

    } while (x < 30 && cResp != 'Y' && cResp != 'y');//end do while loop

    for (x = 0; x < 30; x++) 
    {
        fSum += fGrades[x];
    }//end for loop

    fAverage = fSum / x;

    printf("\nYour final GPA is: %.2f\n", fAverage);
    return 0;
}//end main function

我得到的输出如下:

GPA Calculater
You can enter up to 30 grades
Please enter a grade and press enter: 3.22

Do you want to calculate the GPA? (Y or N): n

Please enter a grade and press enter: 3.13

Do you want to calculate the GPA? (Y or N): n

Please enter a grade and press enter: 2.89

Do you want to calculate the GPA? (Y or N): n

Please enter a grade and press enter: 3.05

Do you want to calculate the GPA? (Y or N): y

Your final GPA is: 0.10

5 回答

  • 0

    你的问题是,你总是总结30个元素 no matter what .

    您应该只添加用户输入的任意数量的项目 .

    所以类似于:

    #include <stdio.h>
    
    int main() 
    {
    
    float fGrades[30] = {0};
    float fAverage = 0;
    int x;
    int y = 0;
    int counter = 0;
    float fSum = 0;
    char cResp = '\0';
    
    printf("\nGPA Calculater");
    printf("\nYou can enter up to 30 grades");
    
    do 
    {
        printf("\nPlease enter a grade and press enter: ");
        scanf("%f", &fGrades[counter]);
        counter++;
    
        printf("\nDo you want to calculate the GPA? (Y or N): ");
        scanf("\n%c", &cResp);
    
    } while (counter < 30 && cResp != 'Y' && cResp != 'y');//end do while loop
    
    for (x = 0; x < counter; x++) 
    {
        fSum += fGrades[x];
    }//end for loop
    
    fAverage = fSum / x;
    
    printf("\nYour final GPA is: %.2f\n", fAverage);
    return 0;
    }//end main function
    
  • 3

    一些建议:

    • 初始化 x 为0
      在初始的do / while循环中

    • ,在数组中扫描后增加 x

    • 在计算 fSum 的循环中,使用另一个计数器并从 counter = 0; counter < x; ++counter 开始并使用 fSum += fGrades[counter]; .

  • 0

    更改计算fSum的循环以使用另一个变量而不是x

    int i;
    for ( i = 0; i < x; i++) 
    {
        fSum += fGrades[ i ];
    }//end for loop
    
  • 0

    有很多问题
    1)x未初始化,因此do-while中的scanf可能会导致代码崩溃
    2)x在do-while中没有增加
    3)在计算平均值时,您应该仅对输入的值求和,而不是全部30个值,否则您的平均值将是错误的

    修改后的代码如下,请检查

    int main() 
    {
    
    float fGrades[30] = {0};
    float fAverage = 0;
    int x;
    int y = 0;
    float fSum = 0;
    char cResp = '\0';
    
    printf("\nGPA Calculater");
    printf("\nYou can enter up to 30 grades");
    x = 0;
    do 
    {
        printf("\nPlease enter a grade and press enter: ");
        scanf("%f", &fGrades[x]);
    
        printf("\nDo you want to calculate the GPA? (Y or N): ");
        scanf("\n%c", &cResp);
        x++;
    } while (x < 30 && cResp != 'Y' && cResp != 'y');//end do while loop
    
    for (y = 0; y < x; y++) 
    {
        fSum += fGrades[y];
    }//end for loop
    
    fAverage = fSum / x;
    
    printf("\nYour final GPA is: %.2f\n", fAverage);
    return 0;
    }//end main function
    
  • 0

    您可以删除'for'循环来计算所有值的总和 . 您可以计算'do while'循环的总和 . 它将使您的代码更有效 .

    #include <stdio.h>
    
    int main() 
    {
    
    float fGrades[30] = {0};
    float fAverage = 0;
    int x;
    int y = 0;
    float fSum = 0;
    char cResp = '\0';
    int count = 0;
    
    printf("\nGPA Calculater");
    printf("\nYou can enter up to 30 grades");
    
    do 
    {
        printf("\nPlease enter a grade and press enter: ");
        scanf("%f", &fGrades[x]);
        fSum += fGrades[x];
        count++;
    
        printf("\nDo you want to calculate the GPA? (Y or N): ");
        scanf("\n%c", &cResp);
    
    } while (x < 30 && cResp != 'Y' && cResp != 'y');//end do while loop
    
    fAverage = fSum / count;
    
    printf("\nYour final GPA is: %.2f\n", fAverage);
    return 0;
    }//end main function
    

相关问题