• 締切済み

昇順に並べ替えるプログラム

(C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムはどう作成すればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45

みんなの回答

  • fujic-1990
  • ベストアンサー率55% (4505/8062)
回答No.2

 失礼ですが、fscanf()など、C言語の単語や組み合わせは分かっていらっしゃるんですよね。そして、並べ替えのアルゴリズムが分からないのですよね?  理屈は、内部で何をしているか分からない関数を使うよりベーシックなBASICのほうが分かり易いと思いますので、今は亡きMZ80BパソコンについていたHuBASICで最小限だけ書きますので、Cの単語に置き換えてください。  ちなみに以下は、泡立て法(隣接交換法、バブルソート)というやり方です。ほかにも方法はありますが、これが、一番時間がかかるものの、一番流れが理解し易いソートです。 1 N=10     ※データー数の設定(質問文では3だが余裕をみて) 2 DIM A(N)     ※配列変数を10個用意 3 FOR I=1 TO N     ※1からデーター数Nまで、Iの値を増やしていく 4  READ A(I)     ※データーを読み込んで変数A(I)に格納。例えばA(1)には45が入る 5 NEXT     ※IがNになるまで3へ戻って、繰り返す。 6 FOR UP=2 TO N-1 7  FOR I=N TO UP STEP -1     ※Iの値がNからUPの値になるまで、1つずつ減らして繰り返す 8   IF A(I-1)>A(I) THEN B=A(I-1) : A(I-1)=A(I) : A(I)=b     ※もしA(9)がA(10)より大きいなら、A(9)の中の値をいったんBに     入れて保存し、A(9)にA(10)の値を入れる。そしてA(10)にBの値     を入れる。つまり、A(9)とA(10)の値を入れ替える。      もしA(9)がA(10)より小さいか、等しいなら、なにもしないで     次の行へ行く 9  NXT I     ※7行目へ戻る 10 NXT UP     ※6行目へ戻る 11 FOR I=1 TO N 12  PRINT A(I)     ※A(I)の中の値を順番に表示する 13 NEXT 14 DATA 45,43,38,21,11,5,51,49,60,28  で、(数値を縦に並べた場合)小さい数字が、まるで泡のように、上へ上へと昇っていきます・・・ どこかで間違っていなければ。(但し、これはそこまで手の込んだプログラムではないので、数が入れ替えられていく様子は表示されません)  8行目の不等号の向きを変えると降順になります。  昔の冗談で、正しくプログラムを書いたのに答えがでない。なぜだなぜだと三日三晩考えたが分からない。4日目にフッと気がついた。答えを表示しろという命令(PRINT)が抜けていた、というのがあります。1つ間違えると正解が出ないのでご勘弁を。

  • f272
  • ベストアンサー率46% (7995/17088)
回答No.1

3つの整数を読む。(i1,i2,i3とする) i1>i2であればi1とi2を交換する i2>i3であればi2とi3を交換する i1>i2であればi1とi2を交換する 3つの整数を書く。 以上です。

関連するQ&A

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

  • あるプログラム実行中に別のプログラムを起動したい

    とあるC言語で出来たa.outというプログラム実行中に、b.outというプログラムを実行するプログラム「c.c」を作成したいのですが、どのようにプログラミングすればよいでしょうか? a.outは無限ループするような十分に実行時間の長いプログラムです。 ちなみに、c.cはシェルスクリプト「c.sh」でも構いません。

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • カウントアップ

    読み込んだ正の整数の偶数を昇順に表示するプログラムを作りたいのです、 整数を入力してください:19 2 4 6 8 10 12 14 16 18となるような。 2ずつ増やすやり方が思いつかないんで教えてください、+2とすると表示されるのは2だけだし・・・。 ウルトラCで作成しているのでよろしくお願いします。

  • 2次形式の解を求めるプログラム

    例えば x1^2+x2^2+x3^2+…+xn^2=m(mは整数) の解、x1,x2,x3,…,xn(全て整数) を求めるようなプログラムはありますか? また作成可能ですか? もしあったり可能なのであれば、詳細について教えていただければありがたいです。 Cに限らずどの言語でも構わないです。お願いします。 例えば x1^2+x2^2=1 の解は x1=0,x2=1 またはx1=1,x2=0

  • エクセルで昇順で並び替えについて

    エクセル2003ですが、 住所録を作成して、昇順で並び替え          降順で並び替え を実行しても移動しません。解決方法をお教えください。

  • わかりません・・・。

    明解C言語入門編のlist1-12のプログラムをつくり、実行したら 二つの整数を入力してください。 整数1: にしかならないのですがなぜでしょうか??

  • Cプログラム

    c言語で「正整数Nを入力後、N個の実数を入力し、それらの平均値と最大値を表示するプログラム」を教えてください。

  • Javaのプログラムから、C言語のプログラムを呼び出す方法

    こんばんわ。 もうすぐ2008年もおしまいですね。 本日お聞きしたいのは、タイトルの通り、 Javaで書いたプログラムで、C言語のプログラムを呼び出し、 実行するプログラムはどのように書いたらよいかということです。 実際に行いたい内容は以下の通りです。 ・JavaからC言語で書かれたNN.exeを呼び出し、実行する。 です。 どのようなプログラムで呼び出すことができるのでしょうか。 あまりプログラムの知識がなく、説明に不備がありましたらすいません。 お力添え、宜しくお願いいたします。

  • 入力した数値を倍々するプログラム

     整数を1つ読み込み、それを倍々しながら10回書き出すプログラムを作成しています例えば、実行結果に3と入力すると、3、6、12、24、48、96、192・・・と書き出すものです。  for文かwhile文を使うことを指定されているんですが、どちらを使ったら良いでしょうか? for(A;B;C)のCの部分には、実行する式が入るんですよね? ただ、入れてはいけないものはありますか? 今まで、a++、a--しか見たことがないので、実行する式を入れてもエラーがでてしまいます。

専門家に質問してみよう