電子書籍の厳選無料作品が豊富!

三つのint 型整数を昇順にならべかえる関数を作成せよ

void sort3 (int n1, int n2, int n3)

わかる方、教えてくれませんか。
説明もしてくれたらとても嬉しいです。

A 回答 (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;
}
----
    • good
    • 0

 簡単なようで以外と簡単ではない出題をいただいたようですね。

出題は「並べ替える関数」とのことですから、ここでのキーワードは
  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]);
}
}
}
    • good
    • 0

並び換えた結果をどうするのですか?


この宣言では並び換えた結果を、呼び出し側に戻すことはできませんが.

ただ表示するだけだとして。

昇順はわかりますね?
では、n1,n2,n3と昇順で並ぶときは、n1,n2,n3はどんな関係でしょうか?それをCの条件式で表現できれば
if (n1,n2,n3が昇順) {
printf("%d %d %d\n",n1,n2,n3);
}
でn1,n2,n3と順に表示できますね。

では、全部で何通りあるでしょうか?3個から3個取り出す順列ですね。
それぞれについて条件を書いてみましょう。
    • good
    • 0

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

    • good
    • 0

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