0

私はいくつかのファイルを持っています:

evaluate_sin.c:

int evaluate_sin(int deg) {
    double j = deg_to_rad(deg);
    j = sin(j);
    printf("sin(%d) =  %d\n", deg, j);
    return j;
}

deg_to_rad.c

double deg_to_rad(int deg) {
    double rad = (3.14 * deg) / 180;
    return rad;
}

evaluate_sin 関数で "deg" 変数 (整数) を deg_to_rad に渡すと、j は -90503293 のような乱数になります。どうしてこれなの?

4

3 に答える 3

1

あなたは宣言していませんdeg_to_rad()

extern double deg_to_rad(int deg);

使用する前に。あなたのコードはそれがを返すと仮定し、それintをに変換しますdouble

ヘッダーが必要degtorad.hです。

degtorad.h

#ifndef DEGTORAD_H_INCLUDED
#define DEGTORAD_H_INCLUDED

extern double deg_to_rad(int deg);

#endif /* DEGTORAD_H_INCLUDED */

(この例では、ヘッダーガードは100%必要ではありませんが、これは、ヘッダーガードが必要なより複雑なケースの良い基盤です。)

次に、プログラムファイルにこのヘッダーが含まれます。どこかで、あなたも宣言する必要がありevaluate_sin()ます。同じヘッダーに入る可能性があります。

Evaluation_sin.c:

#include <math.h>
#include <stdio.h>
#include "degtorad.h"

double evaluate_sin(int deg)
{
    double j = deg_to_rad(deg);
    j = sin(j);
    printf("sin(%d) =  %.6f\n", deg, j);
    return j;
}

double(の代わりに)リターンタイプの変更にも注意してくださいint。π/2の正確な奇数倍を渡すことができない限り、0を返します(-1または+1を返す場合)。また、double値の形式の変更(整数を出力する%.6fの代わりに)。%d

GCCを使用している場合は、コンパイル警告をオンにする必要があります。少なくとも-Wall

deg_to_rad.c

#include "deg_to_rad.h"

double deg_to_rad(int deg)
{
    double rad = (3.14 * deg) / 180;
    return rad;
}
于 2013-03-06T04:28:59.747 に答える
1

j は整数ではなく double であることに注意してください

したがってprintf("sin(%d) = %d\n", deg, j);、配置する必要がありますprintf("sin(%d) = %f\n", deg, j);

于 2013-03-06T04:25:41.993 に答える
0

ダブルスでもprintf("%f", doubleValue)大丈夫ですが、それでも可能な限りシンプルに保ち、ダブルスscanf()の場合に必要な方法を使用することをお勧めし%lfます。これにより、プログラムに一貫性の感覚が与えられます。

そうです、私は提案します:

printf("sin(%d) = %lf\n", deg, j);

于 2013-03-06T04:30:35.557 に答える