C程序给出了极其错误的答案

  • 本文关键字:错误 答案 程序 c
  • 更新时间 :
  • 英文 :


程序从键盘上取一个整数输入num,计算从1num(含)所有Ii的平方和。

#include <iostream>
#include <math.h>
int main()
{
int num;
int total;
printf("Please enter a number:");
scanf("%d", &num);
for (double i = 1; i <= num; i++) {
total += (i*i);
printf("%d", total);
}
}

上面的代码编译正确,但是当输入5时,它输出15143055。它为什么这样做?

#include <iostream>是c++。没有使用#include <math>total未初始化。比较浮点值可能不符合您的要求,因此使用(无符号)整数类型代替循环计数器。按照惯例,循环值从0开始,而不是从c中的1开始(你可以在循环中首先增加i,以避免重复的(i+1),但无论如何这将被优化掉)。此外,你的循环不会为负值运行,所以只需要无符号值。当你对整数求和时,结果应该是一个整数,但是double会给你一个更大的范围,所以我就这样留下了。缺失return:

#include <stdio.h>
int main() {
unsigned num;
printf("Please enter a number: ");
scanf("%u", &num);
double total = 0.0;
for (unsigned i = 0; i < num; i++) {
total += (i+1)*(i+1);
}
printf("%lfn", total);
return 0;
}

和结果输出:

Please enter a number: 3
14.000000

最新更新