• 締切済み

配列のソート(昇順)

最大で30個の整数データを入力し、それを大きい順に並べ替えるプログラムを1次元配列と繰り返し・if文を使って作成しなさい。 という問題で #include<stdio.h> main() { int a[30],x,y,z; printf("Seisu wo 30 ko Nyuryoku \n"); for(x=0;x<=29;x++) scanf("%d",&a[x]); printf("before sort...\n"); for(x=0;x<=29;x++) printf("%d ",a[x]); for(x=0;x<=28;x++) for(y=0;y<=28-x;y++) if(a[y]<a[y+1]) { z=a[y];a[y]=a[y+1];a[y+1]=z; } printf("\n after sort...\n"); for(x=0;x<=29;x++) printf("%d ",a[x]); } ここまで出来たのですが最大で30個ということなので(例)「10個の整数を入力して Z を入力したら終了」 としたいのですがどこをどのようにすればいいですか?

みんなの回答

  • fines
  • ベストアンサー率11% (6/51)
回答No.2

プログラムをじっくり読んだワケではないですがfor文の条件式に「||」(または)を使って「a[y+1]!=z」(入力がzじゃない間)を追加するみたいにすればいいんじゃないですかね。 質問の意図に合っているといいんですが。

回答No.1

入力をchar型でさせて入力文字がZか判別。 Zなら入力終了、Zでないならatoiでint型に変換。 ------------------------------------------------------------ #include<stdio.h> #include <stdlib.h> main() { int a[ 30 ] , x , y , z , i ; char str[ 100 ] ; printf( "Seisu wo 30 ko Nyuryoku \n" ); for( i = 0 ; i <= 29 ; i++ ){ scanf( "%s" , str ) ; if( str[ 0 ] == 'z' || str[ 0 ] == 'Z' ){ i = i - 1 ; break ; } a[ i ] = atoi( str ) ; } printf("before sort...\n"); for(x=0;x<=i;x++) printf("%d ",a[x]); for(x=0;x<=i-1;x++) for(y=0;y<=i-1-x;y++) if(a[y]<a[y+1]) { z=a[y];a[y]=a[y+1];a[y+1]=z; } printf("\n after sort...\n"); for(x=0;x<=i;x++) printf("%d ",a[x]); }

関連するQ&A