以 -1 作为退出整数的 n 个数字的总和和平均值
Sum and average for n numbers with -1 as exit integer
您好,我的代码有一个小问题,我想了解一下。我的任务是编写一个程序,使用 while 循环或带有 if 条件的嵌套 while 循环对 n 个数字求和和平均值,当你想退出代码时,你应该输入 -1。代码在下面。 我遇到的问题是无法从计算中排除 -1。我究竟做错了什么。它应该是一个简单的代码。
int main(void) {
int count;
float sum, average, number;
sum = 0;
count = 0;
printf("Calculate sum and average (-1 to quit)\n");
while (number!=-1) {
scanf("%f", &number);
sum = sum + number;
count = count + 1;
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
在 while 块中,您读取数字,然后将其添加到您的平均计算中,只有在重复迭代之后,您才会检查它是否不同于 -1 以停止迭代:
显然有不同的解决方法:
一种方法是使用 while(true) 并在读取数字后的 while 块中添加一个 if 语句以将其与 -1 进行比较并跳出循环
while (true) {
scanf("%f", &number);
if (number == -1) break;
sum = sum + number;
count = count + 1;
}
重新排序不同的步骤可以解决这个问题:
int main(void) {
int count;
float sum, average, number=0.0f;
sum = 0;
count = -1;
printf("Calculate sum and average (-1 to quit)\n");
while (number!=-1) {
sum = sum + number; // first time no effect with 0
count = count + 1; // first time "no effect" counting to 0
scanf("%f", &number); // will not be counted or summed if -1
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
想通了马上输入-1:
- sum为0+0,适合无数相加
- count为-1+1==0,适合无数
- 应避免除以 0,但这是一个单独的问题
用一个数想通:
- 用 sum==0 和 count==0 读入数字
- 不是-1,所以循环再次迭代
- sum 和 count 有意义地更新
- -1个入场
- 循环结束而不处理-1
顺便说一下,比较浮点数的身份是有风险的。如果你可以更“慷慨”地比较,你会更安全,例如while (number>-0.5)
.
我认为你应该在循环的最后接受输入,因为它将在下一次迭代中得到检查。当-1出现时,它不会被添加。
#include <stdio.h>
int main(){
int count=0;
float sum=0, average=0, number=0;
printf("Calculate sum and average (-1 to quit)\n");
while(number!=-1){
sum = sum + number;
count = count + 1;
scanf("%f", &number);
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
代码需要将 number
测试为 -1 ,然后 将其包含在求和中。 OP的代码测试几乎可以做到这一点。 OP 在 number
之前对 -1
的代码测试甚至被分配导致 未定义的行为 (UB)。
float number;
while (number!=-1) { // UB!
也可以测试 scanf()
的 return 代码是否成功。
while (scanf("%f", &number) == 1 && number != -1) {
sum = sum + number;
count = count + 1;
}
您好,我的代码有一个小问题,我想了解一下。我的任务是编写一个程序,使用 while 循环或带有 if 条件的嵌套 while 循环对 n 个数字求和和平均值,当你想退出代码时,你应该输入 -1。代码在下面。 我遇到的问题是无法从计算中排除 -1。我究竟做错了什么。它应该是一个简单的代码。
int main(void) {
int count;
float sum, average, number;
sum = 0;
count = 0;
printf("Calculate sum and average (-1 to quit)\n");
while (number!=-1) {
scanf("%f", &number);
sum = sum + number;
count = count + 1;
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
在 while 块中,您读取数字,然后将其添加到您的平均计算中,只有在重复迭代之后,您才会检查它是否不同于 -1 以停止迭代:
显然有不同的解决方法:
一种方法是使用 while(true) 并在读取数字后的 while 块中添加一个 if 语句以将其与 -1 进行比较并跳出循环
while (true) {
scanf("%f", &number);
if (number == -1) break;
sum = sum + number;
count = count + 1;
}
重新排序不同的步骤可以解决这个问题:
int main(void) {
int count;
float sum, average, number=0.0f;
sum = 0;
count = -1;
printf("Calculate sum and average (-1 to quit)\n");
while (number!=-1) {
sum = sum + number; // first time no effect with 0
count = count + 1; // first time "no effect" counting to 0
scanf("%f", &number); // will not be counted or summed if -1
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
想通了马上输入-1:
- sum为0+0,适合无数相加
- count为-1+1==0,适合无数
- 应避免除以 0,但这是一个单独的问题
用一个数想通:
- 用 sum==0 和 count==0 读入数字
- 不是-1,所以循环再次迭代
- sum 和 count 有意义地更新
- -1个入场
- 循环结束而不处理-1
顺便说一下,比较浮点数的身份是有风险的。如果你可以更“慷慨”地比较,你会更安全,例如while (number>-0.5)
.
我认为你应该在循环的最后接受输入,因为它将在下一次迭代中得到检查。当-1出现时,它不会被添加。
#include <stdio.h>
int main(){
int count=0;
float sum=0, average=0, number=0;
printf("Calculate sum and average (-1 to quit)\n");
while(number!=-1){
sum = sum + number;
count = count + 1;
scanf("%f", &number);
}
average = sum / count;
printf("Sum=%f", sum);
printf(" Average=%f", average);
}
代码需要将 number
测试为 -1 ,然后 将其包含在求和中。 OP的代码测试几乎可以做到这一点。 OP 在 number
之前对 -1
的代码测试甚至被分配导致 未定义的行为 (UB)。
float number;
while (number!=-1) { // UB!
也可以测试 scanf()
的 return 代码是否成功。
while (scanf("%f", &number) == 1 && number != -1) {
sum = sum + number;
count = count + 1;
}