我可以回复'主变量的结果?

时间:2018-03-31 01:58:54

标签: c

所以我有这个练习,我需要显示N个第一个素数,但我需要专门创建一个函数来知道数字是否是素数

#include <stdio.h>
#include <stdlib.h>

int prime(int num){
    int cont,i,j=0,b;

    b=num;

    do{
        j++;
        i=0;
        for(cont=1;cont<j;cont++){
            if(j%cont == 0)
                i++;
        }
        if(i == 1){
            return(j);
            c=j;
            b--;
        }
    } while (b > 0);
}

int main(){
    int *v,n,cont;

    do{
        printf("Input an integer: ");
        scanf("%d",&n);
    } while (n <= 0);

    v = (int *)malloc(n *  sizeof(int));    

    for(cont=0;cont<n;cont++){
        v[cont] = prime(n);
    }


    for(cont=0;cont<n;cont++){
        printf("%d ",v[cont]);
    }

}

我这样做的方式的问题是,当我再次调用该函数时变量J被设置为0,我试图设置类似c = j的东西,所以当程序回到主要功能,它将具有以前的&#39; j值,但它得到一个奇怪的随机数。所以我想知道是否有办法返回&#39;结果在主要功能的主要功能,我找不到任何帮助我的东西,而不是我至少可以理解

1 个答案:

答案 0 :(得分:2)

你的函数prime()没有按预期工作,还有很多其他错误 -

1)由于最小素数为2,因此变量cont应从2开始。

2)scanf在这种情况下不需要处于循环中

3)仅在v确认为素数时才在cont中输入值。

请参阅此函数prime2(为清晰起见,未进行优化):

bool prime2(int n)
{
    for(int i = 2 ; i<n-1;i++)
        if( n% i == 0) return false;
    return true;
}

int main(){
    int *v,n,cont,cc=0;
    printf("Input range: ");
    scanf("%d",&n);
    v = malloc(n *  sizeof(int));    

    for(cont=2;cc<n;cont++){
        if( prime2(cont) == true )
        {
            v[cc] = cont;
            cc++;
        }        
    }

    for(cont=0;cont<n;cont++){
        printf("%d ",v[cont]);
    }

    delete v;
}

输出:

enter image description here