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

C言語(関数の問題)で読み込んだ4つの整数の最大値を求めプログラムで
整数を2つペア比較し、関数の入れ子を用いて最大値を見つけて、表示する。
というプログラムを作成したいのですが

#include<stdio.h>

int maxof(int a, int b)
{
if(a > b) return (a);
else return (b);
}

int max4(int a, int b, int c, int d)
{
max(max(a, b), max(c, d));
}

int main(void)
{
int num1,num2, num3, num4;
------ 整数の読み込み
printf("最大値は%dです。", max4(num1, num2, num3, num4));

return(0);
}

と記述すると、上手くいったのですが
これを max関数だけを用いて作成できますでしょうか?
整数の比較は全てmax関数で行いたいです。

A 回答 (4件)

#3 に加えて, 処理系が何かも書いてほしい.

    • good
    • 0

補足で、やりたいことはわかりました。



それで、具体的なプログラムと、エラーメッセージは、どうなっているのですか?
「エラーになります」だけでは、アドバイスもできません。
    • good
    • 0

max1 = maxof(num1, num2);


max2 = maxof(num3, num4);
max = maxof(max1, max2);

maxの代わりにmax12とでもしたらどうですか。"max"を関数とするのか変数名とするのかはっきりさせるべきです。
    • good
    • 0

まず。

maxof関数の定義はありますが、 max関数の定義は無いように見えます。
// コンパイラや環境によっては、max関数があるかもしれませんが

> max関数だけを用いて作成できますでしょうか?
> 整数の比較は全てmax関数で行いたいです。

この部分がよくわかりません。
iMax2 = max(a,b) ; /* max2(a,b) */
iMax3 = max(a,b,c) ; /* max3(a,b,c) */
iMax4 = max(a,b,c,d) ; /* max4(a,b,c,d) */
という感じなのでしょうか。

そうだとすると
○ C言語では「同じ名前で引数の数が違う関数」というのは定義できません。
→多重定義では無理
○ 「可変長引数」を使うこともできるが、扱い方が難しい
→難易度が高い
となります。
どうしてもやりたいなら「可変長引数」で対応することになりますので、各種資料、stdarg.hのマクロや関数を参考にして勉強してください。



また。全てをmax関数で、というのがこれと違う意味なら、もっと具体的に説明してください。

この回答への補足

定義はmaxof関数でした。
maxof関数を入れ子にして、4つの整数を比べ、その中から1つ最大値を求めたいです。

max1 = maxof(num1, num2);
max2 = maxof(num3, num4);
max = maxof(max1, max2);

コンパイル時にどうしてもエラーがでてしまいます。
上手く、値を評価できていないようです。

補足日時:2015/01/05 03:48
    • good
    • 0

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