【发布时间】:2015-03-26 16:19:08
【问题描述】:
所以,我正试图让这个 C 代码工作。它编译,但产生不正确的输出。它应该列出 1 和所选值之间的所有完美平方数。 它做错了,经过大量试验和错误后,我认为问题出在模数运算上……就像它提前截断或做一些其他奇怪的事情一样。
// C Code
/*This program will identify all square numbers between one and a chosen integer*/
#include <stdio.h>
#include <math.h>
int main(){
int i, upper, square_int;
float square;
printf("This program will identify all square numbers between one and a chosen integer");
printf("Please enter the upper limit integer:");
scanf("%d", &upper);
upper = 13; /*scanf is the primary integer input method; this is here just to test it on codepad*/
for (i = 1; i<= upper; ++i) /*i want to run through all integers between 1 and the value of upper*/
{
square = sqrt(i); /* calc square root for each value of i */
square_int = square; /* change the root from float to int type*/
if (i % (int)square_int == 0) /*check if i divided by root leaves no remainder*/
printf("%d\n", i); /*print 'em*/
}
printf("This completes the list of perfect squares between 1 and %d",upper);
return 0; /*End program*/
}
键盘上的输出是:
This program will identify all square numbers between one and a chosen integerPlease enter the upper limit integer:1
2
3
4
6
8
9
12
This completes the list of perfect squares between 1 and 13
这当然是错误的。我希望得到 1、2、4 和 9 回来。谁能指出我在这里搞砸了?
【问题讨论】:
-
“我希望得到 1、2、4 和 9” -> 2 不是完美的正方形。
-
square_int=square 演员正在搞乱您的算法概念。我想你知道这很狡猾,因为你稍后会再次将 square_int 转换为 int。
-
对,就是写 1、4 和 9。谢谢。
-
如果你不明白发生了什么,为什么不打印所有的值进行调试。 (与
printf。)那么你必须看看有什么不符合你的预期。
标签: c if-statement nested-loops modulus sqrt