[英]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
。 因此,在这些表达式中num1
为0
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.