【发布时间】:2020-01-01 06:08:55
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100];
int n=0,m=1,k=0,g=0;
for(n=0;n<100;n++) //1
{
a[n]=m;
m=m+1;
}
int b[50]={2,3}; //2
g=2;
for(n=3;n<100;n++) //3
{
for(k=0;k<g;k++) //4
{
if(a[n]%b[k]==0) //5
break;
else if(k=g-1) //6
{
b[g]=a[n];
g=g+1;
}
}
}
printf("the prime nos are \n");
for(m=0;m<50;m++) //7
{
printf("%d \n ",b[m]);
}
return 0;
}
在这个程序中,我必须打印 1 到 100 之间的素数。要遵循的方法是 - 找出素数,将一个数字除以存储在数组中的先前素数。如果给定的数字在除以任何先前的素数时留下 0 作为余数,则它不是素数。如果不是,它是一个素数并将其添加到数组中。
在程序中 - 我初始化了一个包含 100 个数字的数组,并将 1 到 100 个数字存储在数组 a 中(步骤 1)。 b 是我将存储素数的数组。我在(步骤 2)中存储了 b 的前两个值。在(第 3 步)中,我初始化数组 a 以检查素数。在(第 4 步)中,我初始化数组 b 以划分数组 a 元素。在(第 5 步)中,我设置了条件,如果一个数字给出 0 作为余数,则跳出循环并检查下一个数字。在(第 6 步)中,我设置了条件,即当一个数字不能被前面的素数整除时,并检查我们是否将它除以数组中的最后一个素数,如果条件为真,那么它是素数,我们相应地递增。在(第 7 步)中,我正在打印数组 b 的所有元素。
输出不是素数,而是列出所有奇数。我错在哪里以及如何对其进行编码以保持逻辑完整。
【问题讨论】:
-
对于初学者,通过使用最佳实践来帮助您自己和他人,使您的代码可读。使用一致的缩进。使用有意义的变量名,而不仅仅是单个字母。一些放置良好的cmets也不会受到伤害。之后,在调试器中运行您的程序并逐行逐行执行 - 最好学习自己发现问题的工具,而不是让其他人为您做。
-
(k=g-1)应该是(k==g-1)。注意b[]中素数的个数不是 50,而是g。 -
@user207421 得到正确答案谢谢!
-
@kaylum 我会在提问时记住您的意见。我还将学习使用调试器。
-
关于:
for(n=0;n<100;n++) //1 { a[n]=m; m=m+1; }值1根据定义,不是质数。以下是素数的定义: *素数是大于1的整数,其唯一因数是1和它自己。 *