c言語

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: c言語

Re: c言語

#4

by かずま » 7年前

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

Re: c言語

#3

by box » 7年前

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

Re: c言語

#2

by purin52002 » 7年前

こんにちは

C言語の式は計算時点での値を使って計算を行います。
ソースを見ると変数に値を代入する前に計算を行っているように見えます。
おそらく、変数に値を代入した後(16行目と17行目の間)で計算を行えば正しい出力になると思います^^

c言語

#1

by mac » 7年前

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

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

ページトップ