如何成功输出函数调用?

时间:2016-02-07 00:22:09

标签: c function numbers call function-call

我的任务是检查一个数字是否为素数,但我必须使用三个部分来完成它。第一个是代码的主体,后面跟着两个函数。第一个检查数字是否为偶数,第二个检查数字是否为素数。我知道这是一个相当繁琐的方法来检查一个数字是否是素数,但它是为了让我们介绍函数和函数调用!

更新

除了打印非素数的最小除数之外,我已经完成了所有工作。我认为从第二个函数使用i会起作用但它不会输出。我已通过以下代码复制 - 如果您有任何建议,请提供帮助!

#include <stdio.h>
#include <math.h>
int even (int);
int find_div (int);
int main() {
    int num, resultEven, resultPrime, i;

    printf("Enter a number that you think is a prime number (between 2 and 1000)> \n");
    scanf("%d", &num);

    while (num < 2 || num > 1000) {
        if (num < 2) {
            printf("Error: number too small. The smallest prime is 2.\n");
            printf("Please reenter the number > \n");
            scanf("%d", &num);
    }
        else if (num > 1000) {
            printf("Error: largest number accepted is 1000.\n");
            printf("Please reenter the number > \n");
            scanf("%d", &num);
    }
        else {
    }
    }

        resultEven = even(num);

    resultPrime = find_div(num);

        if (resultEven == 1) {
            printf("2 is the smallest divisor of %d. Number not prime\n", num);
        }
        else if (resultPrime == 1) {
            printf("%d is the smallest divisor of %d. Number not prime\n", i, num);
        }
        else {
            printf("%d is a prime number.\n", num);
        }


    return 0;
}
int even(int num) {
    if (num % 2 == 0) {
        return 1;
    }
    else {
        return 0;
    }
}
int find_div(int num) {
    int i;

    for (i = 2; i <= (num/2); i++) {
        if (num % i == 0) {
            return 1;
        }
        if (num == i) {
            return 0;
        }
    }
    return i;
}

2 个答案:

答案 0 :(得分:1)

我会为Wilsons定理创建一个函数(p-1)! = 1(mod p)iff p是素数,首先是关闭,为了使函数更好,更容易,你只需要一个。对于小于1000的数字,它应该可以正常工作。

之类的,

//it will return 1 iff p is prime
int wilson(int p)
{
    int i, result = 1;
    for (i = 0; i < p; i++)
    { 
         result *= i;
         result = result % p;
    }

    return result;
}

但是,如果您没有打印支票,请在文件顶部

 #include <stdio.h>

你的

resultEven = even(num) 

需要一个;最后但是评论中提到了这一点,除了你的方法虽然奇怪是正确的,你也不需要其他的,可以简单地删除你的好

<强>更新

//if return value == 1 its prime, else not prime, and 
//return value = smallest divisor
int findDiv(int p)
{
    int i= 0;
    for (; i <= n/2; i++)
    {
        //you number is a multiple of i
        if (num % i == 0)
        {
            //this is your divisor
            return num;
        }
    }
    //1 is the largest divisor besides p itself/smallest/only other 
    return 1;
} 

答案 1 :(得分:0)

你的函数调用是正确的,但你需要在结尾处使用分号(;)

resultEven = even(num)

否则该程序会有效地检查均匀度。检查主要方法是确保数字除了一个和它自身之外没有其他因素。这是通过使用for循环找到每个整数的div从2到一半被测试的数字来完成的。如果一个数字产生一个div为0,那么它不是素数,因为t的因子不是1,而是它本身。