发出「;评分「;C语言教科书上的练习,C的乐趣

发出「;评分「;C语言教科书上的练习,C的乐趣,c,C,我试着用C编程语言教科书《C的乐趣》中给出的代码进行编码,我完全按照书中的内容打字。这段代码对我来说似乎很完美,它工作得很好,除了avg_分数无法正确计算和显示之外 它始终显示为0,因此我认为问题可能是由 total_score = total_score + next_score; 不能正常工作 我要提前感谢任何帮助我的人,特别是那些知道原因的人 编辑1。我为我的错误感到非常抱歉。我想问的是平均分,而不是总分。我确实检查了原因,似乎总分总是0分 编辑2。我的预期结果如下(可能不准确) 输入示

我试着用C编程语言教科书《C的乐趣》中给出的代码进行编码,我完全按照书中的内容打字。这段代码对我来说似乎很完美,它工作得很好,除了avg_分数无法正确计算和显示之外

它始终显示为0,因此我认为问题可能是由

total_score = total_score + next_score;
不能正常工作

我要提前感谢任何帮助我的人,特别是那些知道原因的人

编辑1。我为我的错误感到非常抱歉。我想问的是平均分,而不是总分。我确实检查了原因,似乎总分总是0分

编辑2。我的预期结果如下(可能不准确)

输入示例:

Score? 91
91 - PASS
Score? 70
70 - PASS
Score? 69
69 - FAIL
Score? h
3 score entered, 2 pass
average score is 76.67
源代码

#include<stdio.h> 
#include<stdlib.h>
#define PASSING_SCORE 70

int main()
{
    int next_score;
    int n;
    int score_count;
    int pass_count;
    int fail_count;
    int avg_score;
    int total_score;

    score_count = 0;
    pass_count = 0;
    fail_count = 0;
    total_score = 0;

    printf("Score?");
    n = scanf("%i",&next_score);

    while(n==1)
    {
        score_count = score_count + 1;  
        total_score = total_score + next_score;
        if (next_score >= PASSING_SCORE)    
        {
            printf("%i - PASS\n",next_score);
            pass_count = pass_count + 1;
        }
        else
        {
            printf("%i - FAIL\n",next_score);
            fail_count = fail_count + 1;
        }
        printf("Score?");
        n = scanf("%i",&next_score);
    }

    if (score_count == 0)
        avg_score = 0;
    else
        avg_score = total_score/score_count;

    printf("\n%i score entered, %i pass, %ifail.\n",
        score_count,pass_count,fail_count);
    printf("average score is %.2f\n",avg_score);
    return EXIT_SUCCESS;
}
#包括
#包括
#定义及格分数70
int main()
{
int next_分数;
int n;
int分数\单位计数;
int pass_计数;
int失败计数;
国际平均分数;
int总分;
分数=0;
通过计数=0;
失败计数=0;
总分=0;
printf(“分数?”);
n=扫描频率(“%i”和下一个分数);
而(n==1)
{
分数=分数+1;
总分=总分+下一分;
如果(下一次得分>=通过得分)
{
printf(“%i-PASS\n”,下一个分数);
通过计数=通过计数+1;
}
其他的
{
printf(“%i-失败\n”,下一个分数);
失败计数=失败计数+1;
}
printf(“分数?”);
n=扫描频率(“%i”和下一个分数);
}
如果(分数=0)
平均得分=0;
其他的
平均得分=总得分/得分计数;
printf(“\n输入了%i个分数,%i通过,%i邮件。\n”,
得分、通过、不通过);
printf(“平均分数为%.2f\n”,平均分数);
返回退出成功;
}

查看编译器警告:
avg_score
声明为整数,但打印时使用
%.2f

您可能打算将其声明为浮点数:
double
。或者用
%d
将其打印为整数,我不确定您的代码示例是关于什么的

编辑:

Score? 91
91 - PASS
Score? 70
70 - PASS
Score? 69
69 - FAIL
Score? h
3 score entered, 2 pass
average score is 76.67
要正确计算平均值(如@Mike所评论的),应将其中一个商操作数强制转换为
double

avg_score = total_score/(double)score_count;

如果不是,您将得到整数商。

通过更改两行代码,我相信我得到了正确的输出:

  • avg_得分
    声明为双倍

    double avg_score;
    
  • 在计算
    avg_分数时,将
    total_分数
    转换为double,这样我们就不用整数除法了:

    if (score_count == 0)
        avg_score = 0;
    else
        avg_score = (double) total_score/score_count;
    
  • 让我们尝试使用以下修复程序运行它:

    [8:59pm][wlynch@watermelon /tmp] ./foo
    Score?91
    91 - PASS
    Score?70
    70 - PASS
    Score?69
    69 - FAIL
    Score?h
    
    3 score entered, 2 pass, 1fail.
    average score is 76.67
    

    在你发布的代码中的任何地方,你都没有努力显示
    total_score
    ,因此它不能正确显示也就不足为奇了。您的意思是将其包含在一个
    printf
    调用中并忘记吗?您可能还应该将
    avg_score
    更改为浮点值,因为<1的平均值将使用整数数学显示为
    0
    。这是学习基本调试技能的好机会。在代码中放置更多的
    printf
    语句,查看循环次数并打印出计算的中间值。我在代码中的多个位置尝试了printf以显示总分值。显示的代码是原始代码。顺便说一句,我编码的所有总分也显示为零。是的,如果你关心
    平均分的小数部分,请不要忘记在除以
    分数计数之前将
    总分
    转换为
    双倍
    。绝对(我手头没有这本书,我不确定这会向读者展示什么)令我惊讶的是!这也是我的一个错误,谢谢你!!。。但是平均分数仍然没有正确显示。它工作了!!在我按照你们两人(quantdev和Mike Holt)的建议去做之后。我把计数改为整数,分数改为双倍,一切都很好。非常感谢,非常感谢。我希望我能接受这两个答案:]