#include #define MAX_DATA 50 /* データの最大数 */ #define ERROR -1 /* エラーを示す値 */ int input(double data[]) /* 入力処理関数 */ /* 引数:data データを入れる配列 */ /* 戻り値:データの個数(MAX_DATAを越えたらERROR値) */ { int i,j; double temp; i=0; j=0; while(j!=EOF && i<=MAX_DATA) { /* 入力が尽きるか、データの個数がMAX_DATAを越えるまで */ j=scanf("%lf",&temp); if (j!=EOF) { printf("%f\n",temp); } else { i=i-1; /* EOF行はカウントせず */ } i=i+1; if (i<=MAX_DATA) { data[i]=temp; } } if (i>MAX_DATA) { /* 最大値を越えたらエラー */ i=ERROR; } return i; } int output(int n,double data[]) /* 入力処理関数 */ /* 引数:n データの入っている個数,data データが入っている配列 */ /* 戻り値:0 */ { int i; for (i=1;i<=n;i++) { printf("%f \n",data[i]); } return 0; } int mnsort(int n,double data[]) /* 入力処理関数 (復習1 課題4の答えの「整列の本体」の部分と同じ) */ /* 引数:n データの入っている個数,data データが入っている配列 */ /* 戻り値:0 */ { int i,j,jmin; double min; i = 1; while( i<=n-1 ){ min = data[i]; jmin = i; j=i+1 ; while( j <= n ){ if( data[j] < min ){ min = data[j]; jmin = j ; } j = j+1 ; } data[jmin] = data[i]; data[i]=min; i=i+1; } return 0; } /* メイン関数 */ int main() { int quantity; /* データの個数 */ double data[MAX_DATA+1]; /* データ格納用配列 */ printf("Before sorting ([ctrl + d]): Quit)\n"); /* 入力 */ quantity=input(data); if (quantity==ERROR) { printf("error --- too many data (>%d)\n",MAX_DATA); } else { mnsort(quantity,data); /* ソート */ printf("After sorting\n"); /* 出力 */ output(quantity,data); } }