第一个问题,正如@user3386109 指出的那样,您应该使用n<100 而不是n<=100,因为Number_Given[97] 是数组本身,所以最后一次迭代过去了它,这对输出没有任何影响,但是避免使用这样的做法是未来代码的好习惯。
这里的问题是,在内部循环中,您似乎使用条件i<Numbers_Given[i-2] 运行它,但问题是当您使用i++ 增加i 的值时,Number_given[i-2] 的值会发生变化,所以它永远不会到达终点。假设我们进行第一次迭代i=2,然后在第一次迭代后i++ 将其更改为i=3,但现在Number_given[i-2] 被称为Number_given[1],即4,所以仍然是i<4,并且条件遵循所以循环运行然后下一个循环i=4,但又是Numbers_Given[i-2],将是Numbers_Given[2] = 5,所以它再次满足条件i<5。每个循环也是如此。所以你一遍又一遍地得到数字范围。
为了解决这个变化 Numbers_Given[i-2] 到 Numbers_Given[n] 现在在 i 增量之后,n 独立于它,因此不会更改值并严格条件。
此外,即使将 Numbers_Given[i-2] 替换为 Numbers_Given[n] 后,问题仍然是未能遵循“if (Numbers_Given[n]%i==0)”语句后 else 运行并输出数字,但它会继续这样做对于i 的每个值,输出将如下所示
3 5 5 5 7 7 7 7 7 9 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 15 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 21 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 25 25 25 27 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 33 35 35 35 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 39 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 45 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 49 49 49 49 49 51 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 55 55 55 57 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 63 65 65 65 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 69 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 75 77 77 77 77 77 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 81 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 85 85 85 87 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 91 91 91 91 91 93 95 95 95 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 99
所以为了解决这个问题,我们只需在循环到达 else 语句时简单地 break 我们的循环,这意味着我们在第一次得到质数时就得到它,然后不再检查它。
所以最终的代码看起来像这样,它输出从 3 到 100 的数组中的所有素数。
#include <stdio.h>
#include <stdbool.h>
int main()
{
int Numbers_Given[98];
int n;
for (n=3;n<=100;++n)
{
Numbers_Given[n-3]=n;
// printf("%d ", Numbers_Given[n-3]);
}
int i;
for (n=0;n<97;n++)
{
bool flag = 1;
for(i=2;i<Numbers_Given[n];i++){
if (Numbers_Given[n]%i==0){
flag = 0;
break;
}
}
if (flag) {
printf("%d ", Numbers_Given[n]);
}
}
return 0;
}
谁的输出:
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
P.S:- 正如其他人所说,使用完整信息提出问题,例如您期望什么,而不是出现什么,您得到的错误代码(如果有的话)等,最后编辑问题,以便人们更容易解释。
还有一件事 2 也是质数,:) 只是一个侧面信息。