掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27010

プログラムが作れません。
投稿者---kasumi(2006/05/30 00:41:20)


初の投稿になります。プログラムについては初心者でして、教えて頂けると助かります。内容は次のとおりです。

最大20個までの任意の個数の数値(正整数)を入力した後、数値を大きい順に並び替えて表示するプログラムを作成せよ。
注意1:20個未満で数値入力を終了する場合には「0」を入力するようにすること。ただし、数値を20個入力した場合には、「0」を入力する必要はない。
注意2:数値入力を終了するための「0」は表示しない。
環境は、OS:XP コンパイラ:C++ です。

質問:注意1、2にあたるプログラムを組み込むことが出来ません。色々と組み込んではみたのですが、やはりうまくいきませんでした。

<pre>#include&lt;stdio.h&gt;
main()
{
int x[20],i,j,tmp;

for(i=0;i&lt;20;i++){
printf(&quot;x[%d]=&quot;,i+1);
scanf(&quot;%d&quot;,&amp;x[i]);
}

for(i=0;i&lt;19;i++){
for(j=0;j&lt;19;j++){
if(x[j]&lt;x[j+1]){
tmp=x[j];
x[j]=x[j+1];
x[j+1]=tmp;
}
}
}

printf(&quot;No.1=%d,No.2=%d,No.3=%dNo.4=%d,No.5=%d,No.6=%dNo.7=%d,No.8=%d,No.9=%dNo.10=%d,No.11=%d,No.12=%dNo.13=%d,No.14=%d,No.15=%dNo.16=%d,No.17=%d,No.18=%dNo.19=%d,No.20=%d\n&quot;,x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15],x[16],x[17],x[18],x[19],x[20]);
}

上のプログラムでは、20個の値を必ず入れなければならなくなっています。つまり、0を入力しても続行されてしまいます。よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:プログラムが作れません。 27011 KING・王 2006/05/30 00:57:11


No.27011

Re:プログラムが作れません。
投稿者---KING・王(2006/05/30 00:57:11)


>上のプログラムでは、20個の値を必ず入れなければならなくなっています。つまり、0を入力しても続行されてしまいます。よろしくお願いします。

入力された値が0か判別して、forループを抜けるようにすればよいだけでは?


この投稿にコメントする

削除パスワード

No.27015

Re:プログラムが作れません。
投稿者---kasumi(2006/05/30 01:30:52)


>入力された値が0か判別して、forループを抜けるようにすればよいだけでは?

お返事ありがとうございます。if(i == 0)break; を以下のように前半部に組み込んだのですが、結果は一つしか値が入力できない上に、即座にすごい桁数の表示が20個出てしまいました。何がいけなかったのでしょうか?よろしくお願いします。

    for(i=0;i<20;i++)
       {
        printf("x[%d]=",i+1);
                scanf("%d",&x[i]);
                if(i == 0)break;
    }




この投稿にコメントする

削除パスワード

No.27020

Re:プログラムが作れません。
投稿者---nop(2006/05/30 08:56:45)


>if(i == 0)break; を以下のように前半部に組み込んだのですが、

変数「i」には入力した値が入っているのですか?
入力した値が入っているのは「x[i]」ではないですか?


この投稿にコメントする

削除パスワード

No.27028

Re:プログラムが作れません。
投稿者---純2259(2006/05/30 17:33:08)


for(i=0;i<20;i++)
{
printf("x[%d]=",i+1);
scanf("%d",&x[i]);
if(i == 0)break;
}

おかしい部分が二つあります。
まずprintfの内部でx[i + 1]の値を表示する部分が数値を入力するscanf文のより前にあります。それではx[i + 1]という値が不定数になっているため一部のコンパイラではゴミデータを吐き出します。
またiを0からループをまわすのにそのループ内でi = 0でbreakを取ったら即ブレークします。



この投稿にコメントする

削除パスワード

No.27029

Re:プログラムが作れません。
投稿者---nop(2006/05/30 17:55:00)


>まずprintfの内部でx[i + 1]の値を表示する部分が数値を入力するscanf文のより前にあります。それではx[i + 1]という値が不定数になっているため一部のコンパイラではゴミデータを吐き出します。

入力データのIndex値を表示しているだけなので、そこは問題ない。

# 表示している数値は、「i+1」の結果であって「x[i+1]」の内容ではない。


この投稿にコメントする

削除パスワード

No.27060

解決できました!
投稿者---kasumi(2006/06/03 00:50:45)


返事が遅くなってしまい、申し訳ありません。
皆さんのアドバイスも参考にしつつ、なんとか作成できました。
ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧