• 締切済み

C言語の問題で困っております

三つのint 型整数を昇順にならべかえる関数を作成せよ void sort3 (int n1, int n2, int n3) わかる方、教えてくれませんか。 説明もしてくれたらとても嬉しいです。

みんなの回答

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.4

わからなかったら質問してください。 ---- #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; } ----

回答No.3

 簡単なようで以外と簡単ではない出題をいただいたようですね。出題は「並べ替える関数」とのことですから、ここでのキーワードは   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)
回答No.2

並び換えた結果をどうするのですか? この宣言では並び換えた結果を、呼び出し側に戻すことはできませんが. ただ表示するだけだとして。 昇順はわかりますね? では、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)
回答No.1

あなただったら, どのようにして 3個の整数を昇順に並べ替えますか?

関連するQ&A