プロが教える店舗&オフィスのセキュリティ対策術

今度C言語プログラム能力検定を受けるのですが、過去問の回答ではわからず質問させてもらってます(以下ソース)
------------------------------------------
#include<stdio.h>
int mod(int a, int b);
int d, f = 10;
main()
{
int a,b,c;
enum cl {g,h}
a=12; b=5;
c=mod(a,b);
a++; ++b;
c=mod(a,b);
printf("c=%d\n",c); ←(1)
}

int mod(int b, int a)
{
int c;
c=b/a;
c=b-c*a;
return(c);
}
--------------------------------------------------
問題は(1)はどのように出力されるでしょう?といったもので、
答え(出力結果)は「1」でした。回答の説明によると
「変数cはmain関数内で宣言され、mod関数の戻り値が格納される。
mod関数の戻り値は二つの引数の剰余であり、ここでは2回目のmod関数
の戻り値が表示される。2回目の仮引数は、aが6で、bが13で戻り値は1になる」
ということでしたが>mod関数の戻り値は二つの引数の剰余であり…
というのがよくわかりません…剰余算というのは「%」のことですよね?
であれば「c= a % b」といった記述がでてくれば13÷6=2…1で「1」となり、理解できるのですが、それらしき記述がないので(--;)
どなたか教えていただけないでしょうか?
よろしくおねがいします。

A 回答 (4件)

整数の割り算・かけ算・引き算で


c = b - (b/a)*a
= 13 - (13/6)*6
= 13 - 2*6
= 13 - 12
= 1
がつまり、% ですね。
って書いちゃ試験勉強の手助けにはならないですかね...
    • good
    • 1
この回答へのお礼

ありがとうございます
計算過程が非常にわかりました。
13-(13/6)*6
^^^^
この部分であまりが切り捨てられることを
「丸め」と呼ぶんですね。ありがとうございます

加えて1つ気になるのですが。
最初にmodが定義されたときは
int mod(int a,int b);
となっているのに対し
下部の定義では逆に
int mod(int b, int a);
と定義されている意味は何かあるのでしょうか?
もし良ければ教えてください。
m(_ _)m

お礼日時:2008/04/04 10:18

>最初にmodが定義されたときは


>int mod(int a,int b);
>となっているのに対し

これは定義ではありません。プロトタイプ宣言といいます。

>下部の定義では逆に
>int mod(int b, int a);
>と定義されている意味は何かあるのでしょうか?

意味は特にないと思います。
プロトタイプ宣言では変数名を書かなくてもOKですので。
つまり、プロトタイプ宣言では、
int mod(int, int);
int mod(int aaaa, int zzzzzzzzzzz);
int mod(int xxxxxxxxxxxxxx, int qqqqqqqqqqqqqqq);

など、当該関数の実体と、引数の数・型、戻り値の型が
一致していればOKです。
    • good
    • 0

b/a = c 余り d というのは、言い換えると


c*a + d = b ってこと。

つまり、

d = b - c*a

C言語の整数型の除算は余りが丸められるので、 c = b/a
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
これで一つ「丸め」
を理解しました。ありがとうございます(^^

お礼日時:2008/04/04 10:19

一番最後にmodの関数定義があるじゃないですか!!!


慌てずに全体を見渡しましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます!
もちろんそれはわかるのですが…
それでもよくわからなかったもので
質問させてもらった次第です。
すみません…

お礼日時:2008/04/04 10:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!