繁体   English   中英

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

[英]C program gives incorrect output?

我正在编写一个计算平均成绩并告诉您是否通过或失败的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的平均水平。 这是确切的输出:

Enter number of attempts: 2
Enter your mark for subject one: 49
Enter your mark for subject two: 96
You have failed
Enter your mark for subject one: 22
Enter your mark for subject two: 100
You have failed
Average for all 0 attempts is 0.00

您的循环将迭代直到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保持不变。

您将平均计算部分放在错误的位置。 一旦退出while循环, num1的值将为0 ,因此所有相关的计算将返回0。

您正在减少num1直到它变为0

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

然后自然

 average = num1*num2*num3;

变成

average = 0*num2*num3;

那是0

首先,因为您将num1减1直到0。

您应该使用for循环:

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

{ Your code here }

您正在递减变量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循环之后,您的num1将为0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM