0

新しい質問: しかし、なぜ式 from n == number, from firstFactorPtr == factor1 ?

これがどのように機能するか、誰かが私に説明できますか:

戻ります (要因 == 1 );

これは "factor == 1 " で "main" に戻りますが、なぜ "isPrime" は true を返すのですか?
また、"*firstFactorPtr" と "*secondFactorPtr" の場合に false を返すのはなぜですか? 素数と非素数を検索しています。
「main」には「int 要素」がありませんが、どのような式で「main」に戻すことができますか?

 #include <stdio.h>
 #include <stdbool.h>
 #include <math.h>


    bool Factor( int number, int *firstFactorPtr, int *secondFactorPtr );

    int main(int argc, const char * argv[])
   {
    int n;

for ( n = 5; n <= 20; n++ ) {
    bool isPrime;
    int factor1, factor2;
    
    isPrime = Factor( n, &factor1, &factor2 );
    if ( isPrime )
        printf( "the number %d is prime\n", n );
    else
        printf( "the number %d has %d and %d as factors\n", n, factor1, factor2 );
    }

  return 0;
 }


 bool Factor( int number, int *firstFactorPtr, int *secondFactorPtr )
 {
if ( number < 1 )
    return false;   

int factor; 
for ( factor = sqrt(number); factor > 1; factor-- ) {
    if ( (number % factor) == 0 ) {
        break;
    }
}

*firstFactorPtr = factor;
*secondFactorPtr = number / factor;
return ( factor == 1 );
 }
4

5 に答える 5

0

関数の要約Factor:

bool Factor( /* ... */ )
{
    int factor;
    /* ... */
    factor = /* some value */;
    /* ... */
    return ( factor == 1 );
}

簡単な説明は、式がと等しい( factor == 1 )場合は真、等しくない場合は偽であるということです。この値は、true または false のいずれかで、関数から返されます。関数の呼び出しはブール式であり、 isを返す関数の呼び出しと同様です。つまり、次のように記述できます。factor1intint

/* some computations */
if (factor == 1) {
    /* do something */
}

あなたはこれを書くことができます:

if (Factor( /* arguments */ )) {
    /* do something */
}

関数内で実行される計算を使用しFactorます。

「true」や「false」などのブール値は単なる値であり、やなどの他の値と同様に操作でき42ます1.23

しかし、それはそれよりも少し複雑です。

==等値演算子です。特に特別なことは何もありません。他の演算子 (+加算、/除算など) と同様に、何らかの型の 1 つ以上のオペランドを取り、何らかの型の結果を生成します。

+オペランドの合計を返します。結果の型は、オペランドの型によって異なります。

==タイプ の結果が得られintます。その結果は1、オペランドが互いに等しい0場合、そうでない場合です。この場合、オペランドfactor1は同じ数値型 でintあるため、比較は有効です。他のスカラー型にはかなり複雑なルールがありますが==、ここでは気にする必要はありません。

歴史的な理由から、結果はtypeではありませんboolが、その方が理にかなっています。C には、1999 年の標準までブール型さえありませんでした。むしろ、タイプintです。任意のスカラー (整数、浮動小数点、またはポインター) 式をブール コンテキスト ( 、 など) で使用でき、if等しいwhile場合は false として扱われ、0そうでない場合は true として扱われます。

したがって、 return ステートメントが実行されたときにの値がfactorたまたまある場合、 value が返されます。11

あなたの関数は、 ではなくFactorタイプ の結果を返すように定義されています。したがって、式の値は暗黙のうちに(によって生成される型) から(関数の結果の型) に変換されます。その変換の結果は単にですが、タイプではなく です。その値は、マクロとして定義されているsince you've dと綴ることもできます。boolintint==bool1boolinttrue#include<stdbool.h>true

(他のいくつかの言語は、最初からブール型を持っていました。そのような言語では、式( factor == 1 )は「true」のブール値を生成し、その値は変換を必要とせずに関数によって返されます。動作は概念的にはC で起こるより単純ですが、結果は本質的に同じです.<stdbool.h>が言語に追加されたとき、型_Boolとマクロfalseおよびtrueとともに、新しく構築された-in Boolean値と演算にまたは他のスカラー型を使用する既存のコードを壊すことなく、Boolean 型に変換します。)int

于 2013-08-03T21:32:19.473 に答える