我在这里要解决的是将一个素数列表打印到一个数组中。我对C有点新鲜,以下代码是我到目前为止的代码,它似乎没有完成我正在寻找的素数列表。
#inlude <stdio.h>
int main(void) {
int i, j, arr[40]
for (i=2; i<40; i++){
for (j=1; j<i; j++) {
if (i%j == 0){
arr[i] = 0;
}
else
arr[i] = i;
}
printf("%d\n", arr[i]);
}
}
此代码打印列表0而不是素数
答案 0 :(得分:2)
试试这个
#include <stdio.h>
#include <string.h>
int main(void) {
int i, j, arr[40]; // you forgot ';' here
int flg =0; // use an additional flag
for (i=2; i<40; i++)
{
for (j=2; j<i; j++) // don't start from j=1? every number is divisable by 1
{
if (i%j == 0) flg=1; // flage raises whenever divisor found
}
if(flg == 0) arr[i]=i; // no divisor ==> prime number
else arr[i] =0; // there are divisors ==> not prime number
flg = 0; // reset flag to use in next iteration, next number
printf("%d\n", arr[i]);
}
}
答案 1 :(得分:1)
您似乎发布的代码不是原创代码。它包含许多语法错误。 先纠正它。
#inlude <stdio.h>
必须为#include <stdio.h>
将;
放在int i, j, arr[40]
数组索引必须以0
开头,但在这里使用i=2
初始化数组。
同样使用两个for循环看起来很糟糕的编码风格,而不是你可以使用一个函数,如果它的素数与否则返回数字的状态。喜欢
#include <stdio.h>
int prime(int n){
int j;
for (j=2;j<=n/2;j++)
if((n%j)==0)
return 0;
return 1;
}
void main(){
int i,p,index, arr[40];
for (i=2;index=0,i<=40;i++,index++)
{
p=prime(i);
if(p==1)
arr[index]=i;
else
arr[index]=0;
printf ("%d\n", arr[index]);
}
}
答案 2 :(得分:0)
这可能是你想要的:
#include <stdio.h>
int main(void) {
int i, j, arr[40]={0};
for (i=2; i<40; i++){
for (j=2; j<i; j++) {
if (i%j == 0){
arr[i] = 0;
break;
}
arr[i] = i;
}
}
for(i = 1; i < 40; i++ )
printf("%d\n", arr[i]);
}
答案 3 :(得分:0)
首先,您提供的代码无法编译。您在第一行写了inlude
而不是include
,而i
,j
和arr
的声明需要;
在最后一行。
有了这个,代码编译,但它不会产生0 - 它产生
0
3
4
5
6
...
等。你的内部循环在每次迭代时设置arr[i]
,因此你的printf
只会看到它在上一次循环中的设置。在循环的最后一次,您有j
= i-1
,只有在if
= 2时才会满足i
(所以j
= 1)< / p>
要解决此问题,您需要做两件事:
0
。j=2
而不是j=1
开始内循环。请记住1
是素数(以及其他所有整数)的除数,因此如果从1开始循环,则所有数字都将无法通过测试