C程序给出不正确的输出?

Posted

技术标签:

【中文标题】C程序给出不正确的输出?【英文标题】:C program gives incorrect output? 【发布时间】:2015-10-14 16:06:35 【问题描述】:

我正在编写一个 C 程序,它计算平均成绩并告诉你是否通过或失败。用户可以根据需要选择尽可能多的尝试,他们将获得所有尝试的最终平均值。这是我的代码:

#include <stdio.h>

int main(void)

    int num1;
    double num2, num3, average, average_1;

    printf("Enter number of attempts: ");
    scanf("%d", &num1);

    while (num1 > 0) 
        printf("Enter your mark for subject one: ");
        scanf("%lf", &num2);

        printf("Enter your mark for subject two: ");
        scanf("%lf", &num3);

        if (num2 < 50 || num3 < 50) 
            printf("You have failed \n");
         else 
            printf("You have passed \n");
        

        num1--;
    

    average = num1 * num2 * num3;
    average_1 = average / 100;

    printf("Average for all %d attempts is %.2f \n", num1, average_1);

这段代码的问题是最终输出,即最后的 printf 行,给我 0 表示尝试,0 表示平均。这是确切的输出:

输入尝试次数:2 输入你的主题一的分数:49 输入你的科目二的分数:96 你失败了 输入你的主题一的分数:22 输入科目二的分数:100 你失败了 所有 0 次尝试的平均值为 0.00

【问题讨论】:

我认为你需要阅读更多关于平均值的内容,因为这不是你要计算的。 平均值一般是一个集合的总和,除以集合中的个数。所以你的平均计算应该是average = (num1 + num2 + num3) / 3 这是一个有趣的平均概念……不管怎样,你写while (num1 &gt; 0) ... num1--; 之后你期望num1是什么? 另一个问题可以通过最微不足道的调试尝试发现并轻松修复。 :( 【参考方案1】:

您正在递减变量 num1。因此,当您完成循环时,您将拥有 num1 = 0。

我建议您使用“for”而不是“while”。像这样:

#include <stdio.h>

int main(void) 

int num1, i;
double num2,num3,average,average_1;

printf("Enter number of attempts: ");
scanf("%d", &num1);

for(i = num1; i > 0; i--) 

        printf("Enter your mark for subject one: ");
        scanf("%lf", &num2);

        printf("Enter your mark for subject two: ");
        scanf("%lf", &num3);

        if (num2 < 50 || num3 < 50) 

                printf("You have failed \n");
        
        else 
                printf("You have passed \n");
        


average = num1*num2*num3;
average_1 = average / 100;
printf("Average for all %d attempts is %.2f \n", num1, average_1);

【讨论】:

非常感谢您的指正。你能告诉我为什么 while 循环在这种情况下不起作用,但 for 循环起作用了。我实际上是在没有任何老师的情况下自学 C 编程,因为我是一名全职系统管理员,但我想为我的职业生涯增加新技能。谢谢! 那么 while 循环是这样工作的:“当这个条件成立时,我会继续做这个循环”。因此,如果您在循环结束时减量,并且您的条件是在它不大于 0 时停止,那么在最后一个循环阶段,它会将“num1”减为 0,并且它会退出 while 语句。您的变量将具有 0 值,而不是初始值。 ''for'' 循环有效,因为我使用不同的变量来更改它的值。著名的“我”。所以“num1”在代码开头继续具有相同的值。 如果你减少一个辅助变量,你的 while 循环可以工作!!我建议您通过大量练习来练习编程。搜索在线法官,他们会给你各种从易到难的问题,你可能会更多地了解特定语言的特定案例。坚持下去,不要放弃!!【参考方案2】:

你把平均计算部分放错了地方。退出 while 循环后,num1 的值将是 0,因此所有相关计算都将返回 0。

【讨论】:

【参考方案3】:

你正在减少num1直到它变成0

while (num1 > 0) 
    // other code
    num1--;

那么自然

 average = num1*num2*num3;

变成

average = 0*num2*num3;

那就是 0

【讨论】:

【参考方案4】:

首先,因为你将 num1 减一直到 0。

你应该使用 for 循环:

for(int counter = num1; num1 > 0; num--)

Your code here

【讨论】:

【参考方案5】:

您的循环将迭代直到 num1 大于 0 。随着它递减并变为 0 程序退出循环,但 num1 具有值 0 。因此,在这些表达式中,num10-

average = num1*num2*num3;    // 0*num2*num3 therefore , 0
average_1 = average / 100;    // as average is 0 , thus result is 0

average_1 的计算公式也是错误的。应该是-

average_1=average/3;    // you calculate average of 3 numbers

要获得正确的输出,请创建一个临时变量 -

int i=num1;
while(i>0)
 // your code 
 i--;

这样num1保持不变。

【讨论】:

好的,我明白了,但我至少应该得到输入的尝试次数,因为它是在循环之前输入的。 @Batool 原始值递减,你看。在循环中打印num1 的值并自己查看值。【参考方案6】:

在 while 循环之后,您的 num1 将为 0。

【讨论】:

以上是关于C程序给出不正确的输出?的主要内容,如果未能解决你的问题,请参考以下文章

C语言,dev cpp,编写的计算阶乘程序,数值较大时输出不正确,求助.

C语言中如何实现验证输入的是不是为数字?

它是C程序的正确输出吗[重复]

请问有往届蓝桥杯试题吗,C本科组的,最好有答案呀~~~发我邮箱:447472614@qq.com

给定一个不多于5位的正整数,求它是几位数并且按逆序分别输出每一位数字的C语言程序如何编写?

在 C 中进行二进制到十进制转换的程序没有像预期的那样工作,而是给出了一些随机输出