C:在Array中存储一个int列表

时间:2014-06-18 03:57:08

标签: c

我在这里要解决的是将一个素数列表打印到一个数组中。我对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而不是素数

4 个答案:

答案 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)

您似乎发布的代码不是原创代码。它包含许多语法错误。 先纠正它。

  1. #inlude <stdio.h>必须为#include <stdio.h>

  2. ;放在int i, j, arr[40]

  3. 之后
  4. 数组索引必须以0开头,但在这里使用i=2初始化数组。

  5. 同样使用两个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,而ijarr的声明需要;在最后一行。

有了这个,代码编译,但它不会产生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开始循环,则所有数字都将无法通过测试