- 締切済み
C言語の問題で困っております
三つのint 型整数を昇順にならべかえる関数を作成せよ void sort3 (int n1, int n2, int n3) わかる方、教えてくれませんか。 説明もしてくれたらとても嬉しいです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- junkUser
- ベストアンサー率56% (218/384)
わからなかったら質問してください。 ---- #include <stdio.h> void sort3(int n1, int n2, int n3){ int s[3]; if(n1 < n2){ s[0] = n1; s[1] = n2; }else{ s[0] = n2; s[1] = n1; } if(s[1] < n3){ s[2] = n3; }else{ s[2] = s[1]; if(s[0] < n3){ s[1] = n3; }else{ s[1] = s[0]; s[0] = n3; } } printf("%d %d %d\n", s[0], s[1], s[2]); } int main(int args, char *argv[]){ sort3(1,2,3); sort3(3,2,1); sort3(3,1,2); return 0; } ----
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
簡単なようで以外と簡単ではない出題をいただいたようですね。出題は「並べ替える関数」とのことですから、ここでのキーワードは void sort(int *, int *, int *); に帰すると考えます。ポインターに関する出題ですね。 int型の引数を受け取ることから、int型のポイター配列に格納し、そのポインターが示す int型データについて並べ替えを行うようにプログラムしてみました。並べ替えは3つのデータしかないので腕力で if を連発するのもひとつの解決方法ですが、10個以下の並び替えでしたら悪評のバブルソートでも処理落ちが気になることはありません。素直に使われてはいかがでしょうか。 なお、「void sort(int, int, int);」については、ポインターの配列ではなく、通常の int型配列にすれば良いのですが、swap()の記述には気を付けてください。また出力の「printf("result= %d, %d, %d\n", n1, n2, n3);」も sort()内に書かなくてはいけないのは当然のことです。 /* A pointer program of int by Mac OSX * file name; like.c * compile: gcc like.c * execution: ./a.out */ #include <stdio.h> #define PARAM 3 #define swap(a, b) {temp = *a; *a = *b; *b = temp;} /* プロトタイプ宣言 */ void sort(int *, int *, int *); int main(void) { int n1, n2, n3; printf("Input a, b, c ? "); scanf("%d,%d,%d", &n1, &n2, &n3); printf("before= %d, %d, %d\n", n1, n2, n3); sort(&n1, &n2, &n3); printf("result= %d, %d, %d\n", n1, n2, n3); return 0; } void sort(int *n1, int *n2, int *n3) { int *array[PARAM]; // ポインター配列 int i, j, temp; /* 初期値設定 */ array[0] = n1; array[1] = n2; array[2] = n3; /* バブルソート */ for (i = 0; i < PARAM; i++) { for (j = PARAM - 1; j > i; j--) { if(*array[j - 1] > *array[j]) swap(array[j -1], array[j]); } } }
- kmee
- ベストアンサー率55% (1857/3366)
並び換えた結果をどうするのですか? この宣言では並び換えた結果を、呼び出し側に戻すことはできませんが. ただ表示するだけだとして。 昇順はわかりますね? では、n1,n2,n3と昇順で並ぶときは、n1,n2,n3はどんな関係でしょうか?それをCの条件式で表現できれば if (n1,n2,n3が昇順) { printf("%d %d %d\n",n1,n2,n3); } でn1,n2,n3と順に表示できますね。 では、全部で何通りあるでしょうか?3個から3個取り出す順列ですね。 それぞれについて条件を書いてみましょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
あなただったら, どのようにして 3個の整数を昇順に並べ替えますか?