悩む者
整数を配列に入れる方法はわかったけど、並び替える方法がわからない。。
著者
それでは一緒にプログラムを書いて理解しながらプログラムを完成させましょう♪
整数を並び替えるというのは人間では簡単ですが、プログラムで書こうとすると意外と難しかったりします。
そこで今回は、3つの整数を大きい順に並べる方法を紹介したいと思います。
その1:関数とポインタを使ったプログラム
一つ目の方法として、並び替えるプログラムを関数として書く方法です。
このプログラムは、
自分で関数を定義する方法、ポインタの使い方を理解しておく必要があります。
大きい順に並び替えるプログラムは以下になります。
#include<stdio.h>
void sort(int*array){
int a,b;
/* 一番大きい数値が保存されている配列の位置を調べる*/
if(*array>=*(array+1) && *array>=*(array+2)){
a=0;
}
if(*(array+1)>=*(array+0) && *(array+1)>=*(array+2)){
a=1;
}
if(*(array+2)>=*(array+0) && *(array+2)>=*(array+1)){
a=2;
}
/*array[0]に最大値を入れ、最大値が入っていた位置と入れ替える*/
b=*(array);
*array=*(array+a);
*(array+a)=b;
/*array[1]の方がarray[2]より小さいなら入れ替える*/
if(*(array+2)>*(array+1)){
a=*(array+2);
*(array+2)=*(array+1);
*(array+1)=a;
}
}
int main(void){
int i; /* for文で使う変数 */
int array[3]; /* 配列arrayの中に入力した数値を格納する */
printf("1番目の数値を入力してください:"); scanf("%d",&array[0]);
printf("2番目の数値を入力してください:"); scanf("%d",&array[1]);
printf("3番目の数値を入力してください:"); scanf("%d",&array[2]);
sort(array); /* 大きい順に並び替える */
printf("%d,",array[0]);
printf("%d,",array[1]);
printf("%d",array[2]);
printf("\n");
return 0;
}
int型のポインタ変数arrayを引数として、sort関数で並び替えを実現させています。
まず、配列の中で一番大きな数値が格納されている場所を特定します。
次に、配列の先頭に大きいものを移動させて並び替えます。
最後に画面に表示させて終了です!!
それぞれ重要な部分にコメント(/**/内)を入れてあるので、
わからない場合はコメントを見てください。
実行例はこちらになります。
その2:条件式のみで実現させるプログラム
このプログラムでは初心者でも比較的簡単に理解できるものになっています。
以下が条件式のみで実現させるプログラムになります。
#include<stdio.h>
int main(void){
int i;
int a,b;
int array[3];
printf("1番目の数値を入力してください:"); scanf("%d",&array[0]);
printf("2番目の数値を入力してください:"); scanf("%d",&array[1]);
printf("3番目の数値を入力してください:"); scanf("%d",&array[2]);
if(array[0]>=array[1] && array[0]>=array[2]){
a=0;
}
if(array[1]>=array[0] && array[1]>=array[2]){
a=1;
}
if(array[2]>=array[0] && array[2]>=array[1]){
a=2;
}
b=array[0];
array[0]=array[a];
array[a]=b;
if(array[2]>array[1]){
a=array[2];
array[2]=array[1];
array[1]=a;
}
printf("%d,",array[0]);
printf("%d,",array[1]);
printf("%d",array[2]);
printf("\n");
return 0;
}
こちらでは関数の中身をそのままmain関数内で実行しているものになります。
そのため、手順は先ほどと同じ処理で行われています。
その1と同じ変数名、配列名となっているためコメントは書かれていません。
わからない方はその1で確認してください。
実行例はこちらになります。
まとめ
今回は3つの整数を大きい順に並べるプログラムについて紹介しました。
これまで紹介してきた条件式、関数定義、ポインタなどたくさんの要素が入っていますので、
復習に役立てていただければと思います。