• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のプログラミングについて質問です。)

C言語のプログラミングについて質問です

このQ&Aのポイント
  • C言語のプログラミングについて質問です。以下の文を出力して入力:に16進数を入れると10進数に変換した数値の小さい列順に並ぶプログラムを作りたいのですがうまく出来ません。
  • 入力した16進数を10進数に変換し、数値の小さい列順に並ぶプログラムをC言語で作りたいです。
  • 具体的な仕様は以下の通りです。入力:__、__、__、__、__EnterKeyで結果を表示し、バブルソートを利用して数値を並べ替えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • akr104
  • ベストアンサー率49% (25/51)
回答No.1

バブルソートは、for文を2重にする必要がありますね。 具体的には、//バブルソート//以下のfor文を、 for(j=0;j<k-1;j++) { for(i=0; i<k-1-j; i++) { ~中略~ } } とすれば良いでしょう。 1重のループだと、例えばA,C,3,4などのように、最初に大きな数が来た場合、 i=0でAとCを比較した後、i=1のループでAが先頭に取り残されてしまいます。 プログラムの先頭の方に、使っていないjが定義されていますので、 2重ループを考えていたのでは?と思いました。 後、dataをvalに変換する際、val[k] *16は不要です。 valは0で初期化してありますので。 更に付け加えると、数値に変換する際の-'0'や-'A'は使わない方が無難です。 これは文字コードが0123~、ABCD~と並んでいる事が前提なので、 もしaAbBcC~と並んでいる場合は正しく動きません。 (見たことはありませんけどね)

dezaemon1120
質問者

お礼

すみません。 確認したらできました。本当にありがとうございました。

dezaemon1120
質問者

補足

素早い回答誠にありがとうございます。 基本的には今の文でバブルソートを行ってる処理部分を修正したいと思っています。 二つ目の値までは小さい順になるのですが、それ以降の16進数を入力するとおかしくなってしまいます。 変数:jは消すのを忘れてましたので関係ありませんでした。 誠に申し訳ありません。

関連するQ&A