- 締切済み
C言語の穴埋め問題です
配列に初期化されたデータの中から最小値を求めるプログラムなのですが、■■■を教えて頂けないでしょうか? #include <stdio.h> #define N 5 //関数のプロトタイプ宣言 int min(int *p , int n); int main(void) { int data[N] = {15,34,28,12,33}; printf("最小値は%d\n" , ■■■); } int min(int *p , int n) { int min; //最小値 int i; //カウンタ min = *p; for(i = 1 , ■■■; i < n; i++ , ■■■){ if (min >■■■ ){ min =■■■ ; } } return ■■■; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kotone_nyan
- ベストアンサー率0% (0/0)
関数やポインタの基本的な動作の勉強でしょうか?論理的に考えてみましょう。 まず、肝となるのはなんと言ってもminという関数でしょう、どうやらこの内部で最小値を求めるように設計されていますね。最初にここを見てみましょう。 引数を見ますと、int型のポインタと通常のintを受け取っています。ポインタは配列のアドレスを、通常のintはfor分の脱出条件として使われているので配列の要素数でしょうか。 つまり一番上のprintfの空欄には、minという関数にそれぞれ最小値を求めたい配列のアドレスとその配列の要素数を渡してあげましょう。 次に、根幹となるmin関数の中身を見てみましょう。 この関数は 1.最初に配列の先頭の要素をminに格納する。 2.次の要素をminと比較する。 3.ステップ2が真だった場合、比較した配列の要素をminに格納する。 4.最後の要素まで見終わったらreturnで最小値を返す。 というロジックで組み立てられていると考えられます。 forの上のmin=*pでは1.が行われています。配列の先頭の要素をminに格納していますね。 forの中では、次の要素を見たいので、まず初期化条件でpが次の要素を示すようにしましょう。 以降は次の次の要素、さらに次の要素・・・となるので、i++の隣にpがさらに次の要素を示すように書いてください。 ifでは、minに格納された要素の次の要素と比較したいのですが、for文の中でpが次の要素を示しているので、pが指し示すアドレスの中身と比較すればよいでしょう。 それが真だった場合に、minにpの中身を代入してあげればいいわけです。 最後に、処理が終わったあとにreturnで得られた最小値を返しましょう。 関数やポインタの知識をつけるのに大変良い問題だと思います。直接的な回答にはなっていませんが、是非頭を捻って考えてみてください、どうしてもわからないときには追って空欄に当てはまる部分をお答えします。