0

私は統計クラスの割り当てを行っていますが、プログラミングは初めてです。ばかげた質問はしたくありませんが、検索しても答えが見つかりません。

これが私のコードです:

#include "stdio.h"
#include "math.h"
#include "stdlib.h"

double pareto(double x, double alpha, double beta)  
{
    double val = beta * pow(alpha, beta) / pow(x, beta+1);

    if( alpha <= 0 ) printf("error");
    else if( beta <= 0 ) printf("error");
    else if( alpha >= x) return(0);
    else return(val);
}

int main()
{
    double x;
    double alpha;
    double beta;
    scanf("%lf", &x);
    scanf("%lf", &alpha);
    scanf("%lf", &beta);
    printf("%f\n", pareto(x,alpha,beta));
    return 0;
}

次のようにコードをテストすると:

echo 3 -2 1 | ./paretodens 

出力が得られます:

error0.000000

単純に「エラー」であってほしい。私の質問が理にかなっていることを願っています。助けてくれてありがとう。

4

3 に答える 3

4

エラーが発生した場合、プログラムを終了させることができます:

if (alpha <= 0)
{ 
    printf("error\n");
    exit(EXIT_FAILURE);
}

そうすれば、関数が返されることはなく、最後の print ステートメントをまったく呼び出す必要はありません。

paretoそれ以外の場合、呼び出し元にエラーを通知する方法がないことに注意してください! エラーが発生した後も実行を継続したい場合は、関数を再設計して、エラー状態が発生し、伝達されるようにする必要があります。


あなたは新しいので、あなたのコードはずっと短くすることができることにも注意しelsereturnくださいexit

double pareto(double x, double alpha, double beta)
{
    if (alpha <= 0 || beta <= 0) { printf("Error\n"); exit(EXIT_FAILURE); }

    return alpha >= 0 ? 0 : beta * pow(alpha, beta) / pow(x, beta + 1);
}

また、計算が必要であるとわかっていない限り、計算を実行する必要がないことに注意してください。

于 2013-01-28T23:36:51.287 に答える
1

これは常に実行されています:

printf("%f\n", pareto(x,alpha,beta));

そのための条件はまったくありません。また、pareto() 関数は、指定された値を返さないことがあります。それを修正して、常に特定の値を返すようにする必要があります。

于 2013-01-28T23:39:44.703 に答える
0

私があなたを正しく理解していれば、「エラー」または関数からの正しい戻り値のいずれかを出力する必要がありますが、両方を出力する必要はありません。問題は、paretoへの呼び出し内から関数を呼び出すことprintfです。関数自体には printf への呼び出しがあります。paretoそのため、コードは「エラー」と戻り値の両方を出力します。

個人的には、次のようにクリーンアップします。

double pareto(double x, double alpha, double beta)  
{
    if (alpha <= 0 || beta <= 0)
        return -1;

    if (alpha >= x)
        return 0;

    return beta*pow(alpha,beta)/pow(x,beta+1);
}

int main()
{
    double x;
    double alpha;
    double beta;
    double val;

    scanf("%lf", &x);
    scanf("%lf", &alpha);
    scanf("%lf", &beta);

    val = pareto(x,alpha,beta);

    if (val < 0)
        printf("error");
    else
        printf("%f\n", val);

    return 0;
}
于 2013-01-28T23:53:55.370 に答える