[1.1] 自分が今行いたい事は何か
明けましておめでとうございます。
また、いつも返信して頂き、皆さんありがとうございます。
さっそく質問ですが、
1.独習Cの練習問題5_1_1のバブルソートプログラムについて。
2.わたくしがコードを書く際に考えている事をコメントにしてみました。
出来れば、もっとこういう事を考えて書いたら良い、というアドバイスを頂けないでしょうか。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
/*
(2013/1/1)Lesson5_1_3.c
<問題>
1.ユーザーの指定した数、float型の数値を受け取り、それらをソートする。
2.ソートのアルゴリズムにはバブルソートを使用する。
<考え方>
1.ユーザーの指定した数、float型の数値を受け取る
→ユーザーの指定した数を格納するため、int型整数countを定義する。
→float型の配列を定義する。変数をnum_fとし配列要素を[100]とする。
→式には整数値か定数のみが使えるので、float型配列格納用の変数tを定義する。
2.ソートのアルゴリズムにはバブルソートを使用する。
→比較用にint型の変数aとbを定義する(上記と同様の理由により、配列要素用の変数の為、int型とする)。
*/
#include <stdio.h>//scanf()関数を使用する為、<conio.h>は使用しない。
int main(void)
{
float num_f[100], t;//float型の配列と変数を同時に定義する。
int a, b, count;//int型変数a,b,countを定義する
printf("float型の数値を整列します。\n");//どのような目的のプログラムかユーザーに知らせる。
printf("入力する浮動小数点数を100までの数で指定してください: ");//ユーザーに条件を知らせる。
scanf("%d" , &count);
/*初期設定部:配列要素は0から始まるので、aに0を代入する。
条件設定部:上記と同様の理由により、count未満とする
インクリメント部:変数countが使われた後、インクリメントする。*/
for(a = 0; a < count; a++){
printf("%d 番目の浮動小数点数を入力して下さい: " , a + 1);
scanf("%f" , &num_f[a]);//配列num_fの配列要素[a]番目に数値を格納する。
}
/*バブルソートを使用する。
初期設定部:
条件判定部:
インクリメント部:インクリメントした後、変数が使われる。*/
for(a = 1; a < count; ++a)
/*初期設定部:
条件判定部:
インクリメント部:デクリメントした後、変数が使われる。*/
for(b = count - 1; b >= a; --b){//0番目の配列要素を呼び出す都合、count - 1とする?
//隣接する要素を比較する
if(num_f[b - 1] > num_f[b]){
//要素を交換する
t = num_f[b - 1];//float型の変数fに配列num_fの配列要素[b - 1]番を代入
num_f[b -1] = num_f[b];
num_f[b] = t;
}
}
for(a = 0; a < count; a++)
printf("%f\n" , num_f[a]);
return 0;
}
[1.4] 今何がわからないのか、知りたいのか
<疑問点>
1.45行目と50行目がわかりません。
特に45行目の初期設定部でaに1を代入する理由がわかりません。0では駄目なのでしょうか?
2.配列と変数は同時に定義しない方が良いでしょうか?
3.定義と同時に全ての変数を初期化した方が良いでしょうか?
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2010 Express