• ベストアンサー

C言語プログラム能力検定の問題でわからないところがあります

今度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」となり、理解できるのですが、それらしき記述がないので(--;) どなたか教えていただけないでしょうか? よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hsyL
  • ベストアンサー率100% (3/3)
回答No.2

整数の割り算・かけ算・引き算で c = b - (b/a)*a = 13 - (13/6)*6 = 13 - 2*6 = 13 - 12 = 1 がつまり、% ですね。 って書いちゃ試験勉強の手助けにはならないですかね...

sususun
質問者

お礼

ありがとうございます 計算過程が非常にわかりました。 13-(13/6)*6 ^^^^ この部分であまりが切り捨てられることを 「丸め」と呼ぶんですね。ありがとうございます 加えて1つ気になるのですが。 最初にmodが定義されたときは int mod(int a,int b); となっているのに対し 下部の定義では逆に int mod(int b, int a); と定義されている意味は何かあるのでしょうか? もし良ければ教えてください。 m(_ _)m

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

>最初に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です。

  • ldir
  • ベストアンサー率0% (0/2)
回答No.3

b/a = c 余り d というのは、言い換えると c*a + d = b ってこと。 つまり、 d = b - c*a C言語の整数型の除算は余りが丸められるので、 c = b/a

sususun
質問者

お礼

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

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

一番最後にmodの関数定義があるじゃないですか!!! 慌てずに全体を見渡しましょう。

sususun
質問者

お礼

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

関連するQ&A