web-dev-qa-db-ja.com

2 intをcで分割する方法は?

2つの数値を除算して、次のような結果を取得します。

5/2 = 2.50

ただし、出力は2のみです。

私は今私が間違っていることはしていません。

ここに私のコード:

int a;
int b;
int c;
printf("First num\n");
scanf("%d", &a);
printf("Second num\n");
scanf("%d", &b);
c = a / b;
printf("%d", c);
4
Alex

結果を保存するには、double変数が必要です。 intは整数のみを格納します。さらに、除算を実行する前に、他の変数も型キャストする必要があります。


このようなことをする

_double c;
.
.
.
c = (double)a / (double)b;
printf("%f", c);
_

注:

printf()ステートメントに_&_は必要ありません。

13
Haris

float(整数)変数ではなく、doubleまたはint変数を使用する必要があります。また、2つの整数間の除算は整数の結果につながりますが、float/doubleと整数間の除算は浮動小数点の結果になります。これは、Cがこの整数をfloatに暗黙的に昇格させるためです。

例えば:

5/2 = 2
5/2.0f = 2.5f

.0f、これは実際にはフロートで除算していることを意味します。

2
Claudio Cortese

Floatでの型キャストを回避するには、%fフラグでscanfを直接使用できます。

float a;
float b;
float c;
printf("First number\n");
scanf("%f", &a);
printf("Second number\n");
scanf("%f", &b);
c = a / b;
printf("%f", c);
2
LapizLazuli

'/'-記号は除算用です。 C言語では、整数を整数で除算してデータを整数に格納すると、出力としての答えは整数になります。

int a = 3, b = 2, c = 0;
c = a/b; // That is c = 3/2;
printf("%d", c);

受け取ったoutputは:1
理由は、使用した変数のタイプ、つまり整数(int)です
出力を格納するために整数が使用される場合は常に、結果は10進値ではなく整数として格納されます。

10進数の結果を格納するために、C言語はfloatdoublelong floatおよびlong doubleを提供します。

操作を実行し、10進数での出力が必要な場合は常に、結果のストレージ変数に上記のデータ型を使用できます。

int a = 3, b = 2;
float c = 0.0;
c = (float)a/b; // That is c = 3/2;
printf("%.1f", c);

出力受信:1.5
そのため、これは概念を理解するのに役立つと思います。
Rememberfloatを使用している場合、アクセス指定子は%fです。私と同じように、答えをfloatに変換する必要があります。そうすると、答えが反映されます。

2
Jaffer Wilson