![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
A 回答 (4件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?e8efa67)
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]);
}
}
}
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個取り出す順列ですね。
それぞれについて条件を書いてみましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
C#の質問
-
Arduinoのプログラムにエラーが...
-
「指定されたキャストは有効で...
-
if と配列の組み合わせ
-
整数データの配列から同じ値の...
-
【C++】関数ポインタの使い方
-
C言語についてです。
-
3数の最大公約数
-
任意の文字列のアルファベット...
-
足して100になるような乱数のア...
-
剰余演算を論理演算と加減算に...
-
単方向リストに適当な値を入れ...
-
入力された数字を大きい順に並...
-
線形補間 2次元テーブル C言語...
-
教えてください(丸罰ゲーム)
-
C言語の問題で困っております
-
C言語 巡回セールスマン問題 2-...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
c言語の配列を使ってサイコロを...
-
課題でつまってます・・・
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報