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

最大で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 を入力したら終了」
としたいのですがどこをどのようにすればいいですか?

A 回答 (2件)

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


質問の意図に合っているといいんですが。
    • good
    • 0

入力を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]);
}
    • good
    • 0

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