0

これは私のコードです:

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

int num_mezzo_1(int num_orig);
int num_mezzo_2(int num_orig);

int main(int argc, char *argv[]){
    int num,contatore,tmp=0,tmp_1,tmp_2;
    num=atoi(argv[1]);
    if(num <= 3){
        printf("%d è primo\n", num);
        exit(0);
    }
    else{
        num_mezzo_1(num);
        num_mezzo_2(num);
        tmp=tmp_1+tmp_2;
            //using printf to debug
        printf("t1 %d, t2 %d\n", tmp_1,tmp_2);
        if(tmp>2){
            printf("%d NON è primo\n", num);
        }
        else{
            printf("%d è primo\n", num);
        }
    }
    exit(0);
}

int num_mezzo_1(int num_orig){
    int tmp_1=0,cont_1;
    for(cont_1=1; cont_1<=(num_orig/2); cont_1++){
        if((num_orig % cont_1) == 0){
            tmp_1++;
        }
    }
    //using printf to debug
    printf("\n%d\n", tmp_1);
    return tmp_1;
}

int num_mezzo_2(int num_orig){
    int tmp_2=0,cont_2;
    for(cont_2=((num_orig/2)+1); cont_2<=num_orig; cont_2++){
        if((num_orig % cont_2) == 0){
            tmp_2++;
        }
    }
    //using printf to debug
    printf("\n%d\n\n", tmp_2);
    return tmp_2;
}

このプログラムは、数が素数であるかどうかを計算します。
数値 13 を入力として指定すると、関数num_1には値1tmp_1あり、関数num_2には値1tmp_2あり、両方とも正しいです。
問題は、大きな大きなtmp=tmp_1+tmp_2値を返すことであり、その理由がわかりません。

4

1 に答える 1

6

num_mezzo_1()関数を呼び出してnum_mezzo_2()いますが、戻り値を保存していないため、変数tmp_1と初期化されていませんtmp_2

編集:コードを変更してみてください

    num_mezzo_1(num);
    num_mezzo_2(num);

    tmp_1 = num_mezzo_1(num);
    tmp_2 = num_mezzo_2(num);

else ブロックで、期待どおりの結果が得られるかどうかを確認します。

作業コード:

tmp=(num_mezzo_1(num)+num_mezzo_2(num));
于 2012-06-09T17:01:42.380 に答える