c言語

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mac

c言語

#1

投稿記事 by mac » 6年前

c言語で、4つの自然数a1,a2,b1,b2を入力し、2つの分数 a1/b1,a2/b2 の四則演算を行い、それぞれの式と値を出力するプログラムを作成せよ。という問題についてです。

コード:


#include <stdio.h>

int main(void) {
float a1, a2, b1, b2, c, d, e, f, x, y;
x = (a1/b1);
y = (a2/b2);
c = x + y;
d = x - y;
e = x * y;
f = x / y;
printf("4つの自然数を入力せよ\n");
printf("a1 = "); scanf("%f", &a1);
printf("a2 = "); scanf("%f", &a2);
printf("b1 = "); scanf("%f", &b1);
printf("b2 = "); scanf("%f", &b2);
printf("%f + %f = %f\n ", x, y, c);
printf("%f - %f = %f\n ", x, y, d);
printf("%f * %f = %f\n ", x, y, e);
printf("%f / %f = %f\n ", x, y, f);

return 0;
}

【実行結果】

4つの自然数を入力せよ
a1 = 1
a2 = 1
b1 = 1
b2 = 1
0.000000 + inf = inf
0.000000 - inf = -inf
0.000000 * inf = inf
0.000000 / inf = 0.000000

このようになったのですが、何が間違っているのかわかりません。どうすれば解決するのか教えてください。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: c言語

#2

投稿記事 by purin52002 » 6年前

こんにちは

C言語の式は計算時点での値を使って計算を行います。
ソースを見ると変数に値を代入する前に計算を行っているように見えます。
おそらく、変数に値を代入した後(16行目と17行目の間)で計算を行えば正しい出力になると思います^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

box
記事: 2002
登録日時: 13年前

Re: c言語

#3

投稿記事 by box » 6年前

mac さんが書きました:c言語で、4つの自然数a1,a2,b1,b2を入力し、2つの分数 a1/b1,a2/b2 の四則演算を行い、それぞれの式と値を出力するプログラムを作成せよ。という問題についてです。
自然数a1, a2, b1, b2とあるので、とりあえずこれらはint型でしょう。
計算時にdoubleとかfloatとかにキャストする必要はあるにしても。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: c言語

#4

投稿記事 by かずま » 6年前

mac さんが書きました:c言語で、4つの自然数a1,a2,b1,b2を入力し、2つの分数 a1/b1,a2/b2 の四則演算を行い、それぞれの式と値を出力するプログラムを作成せよ。という問題についてです。
ヤフー知恵袋との関係を教えてください。

コード:

#include <stdio.h>
 
int gcd(int a, int b)
{
    int r, neg = 0;

    if (a < 0) a = -a;
    if (b < 0) b = -b, neg = 1;
    while (b > 0)
        r = a % b, a = b, b = r;
    return neg ? -a : a;
}

int main(void)
{
    int a1, a2, b1, b2;
    int com, sum1, sum2, diff1, diff2, prod1, prod2, quot1, quot2;

    printf("4つの自然数を入力せよ\n");
    printf("a1 = "); scanf("%d", &a1);
    printf("a2 = "); scanf("%d", &a2);
    printf("b1 = "); scanf("%d", &b1);
    printf("b2 = "); scanf("%d", &b2);

    sum1 = a1 * b2 + a2 * b1, sum2 = b1 * b2;
    com = gcd(sum1, sum2);
    sum1 /= com, sum2 /= com;

    diff1 = a1 * b2 - a2 * b1, diff2 = b1 * b2;
    com = gcd(diff1, diff2);
    diff1 /= com, diff2 /= com;

    prod1 = a1 * a2, prod2 = b1 * b2;
    com = gcd(prod1, prod2);
    prod1 /= com, prod2 /= com;

    quot1 = a1 * b2, quot2 = b1 * a2;
    com = gcd(quot1, quot2);
    quot1 /= com, quot2 /= com;

    printf(" %d/%d + %d/%d = %d/%d\n", a1, b1, a2, b2, sum1, sum2);
    printf(" %d/%d - %d/%d = %d/%d\n", a1, b1, a2, b2, diff1, diff2);
    printf(" %d/%d * %d/%d = %d/%d\n", a1, b1, a2, b2, prod1, prod2);
    printf(" %d/%d / %d/%d = %d/%d\n", a1, b1, a2, b2, quot1, quot2);

    return 0;
}
実行結果

コード:

4つの自然数を入力せよ
a1 = 3
a2 = 4
b1 = 5
b2 = 6
 3/5 + 4/6 = 19/15
 3/5 - 4/6 = -1/15
 3/5 * 4/6 = 2/5
 3/5 / 4/6 = 9/10

返信

“C言語何でも質問掲示板” へ戻る