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 > 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
。因此,在这些表达式中,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
保持不变。
【讨论】:
好的,我明白了,但我至少应该得到输入的尝试次数,因为它是在循环之前输入的。 @Batool 原始值递减,你看。在循环中打印num1
的值并自己查看值。【参考方案6】:
在 while 循环之后,您的 num1 将为 0。
【讨论】:
以上是关于C程序给出不正确的输出?的主要内容,如果未能解决你的问题,请参考以下文章
C语言,dev cpp,编写的计算阶乘程序,数值较大时输出不正确,求助.
请问有往届蓝桥杯试题吗,C本科组的,最好有答案呀~~~发我邮箱:447472614@qq.com