- ベストアンサー
10進数から2進数へ・・・
10進数から2進数に変換するプログラムを作っています。a[i]=(x/2)%2という式をforでまわせば、できると思うんですが、a[i]の配列をどうやって表示させるのかわかりません、 main以下をのせときます。 int x; int i; float a[i]; printf("10進数を入力してください>"); scanf("%d",&x); a[i]=(x/2)%2; printf("2進数は%d\n",a[i]); }
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
aの配列がfloat型になってるのがすごいヘンです。int型にすべきでは? 理由: intとintの演算結果もintでありfloatにはならないから。 それに、宣言時の添え字の値が入ってません。 ここでは、int a[32](など)にするべきでは? 理由: intは現在のPCでは通常32bitなので。厳密にはlongやshortなどここで取り扱う型をはっきりさせたほうがよい。 それから、a[i]については、forで繰り返すようにしてください。現状繰り返すようになっていません。 繰り返した結果、最終桁の位置がわかるはずなので、iの値をうまくコントロールして逆方向にforで繰り返せば、表示可能です。 for(i=0;i<MAX;i++) { .... if(....) break; // 何かの条件で抜ける } printf("2進数は"); for(;i>0;i--) { printf("%d",a[i]); } printf("\n"); こんな感じかな。ちゃんとデバッグしてね。
その他の回答 (5)
- jacta
- ベストアンサー率26% (845/3158)
> ⇒配列の大きさには、定数を使用しましょう。 > # C++ なら大丈夫なんでしたっけ?>詳しい方 念のため、コメントしておきます。 C++でも配列の大きさには汎整数定数式を指定しなければなりません。 C99であれば可変長配列を使用することができます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
概ね、こんな感じですかね~。 ---------------------------- #include <stdio.h> int main(void){ int x; int i; int a[32]={ 0 }; printf("10進数を入力してください>"); scanf("%d",&x); for(i=0;x!=0;i++){ a[i]=x % 2; x/=2; } printf("2進数は"); while(i>0) printf("%d",a[--i]); printf("\n"); return(0); }
こんにちは。 int型でxを宣言していると言うことは負の数にも 対応させると言うことでしょうか。 でしたら負の数の%は機械依存であることがあります。 気をつけましょう。 また&や<を使うことで除算をせずに2進表示できます。
- ency
- ベストアンサー率39% (93/238)
気になった点を。。。 1. 「float a[i];」 ⇒配列の大きさには、定数を使用しましょう。 # C++ なら大丈夫なんでしたっけ?>詳しい方 # でも、i が初期化されていないからそもそもおかしいですが。。。 …っていうか、なぜに float ? int で良いのでは? 2. a[] にビットを保存するときに、for で回し…てないじゃん! 3. ただ表示させるだけなら、各桁を printf() の引数にずらずら並べれば良いでしょう。 せっかく配列にしているから printf() を for で回してしまいましょう。 # 変数に残したいのであれば、文字列にする必要がありますね。 ざっと見ただけでこんな感じでしょうか。
- brax3
- ベストアンサー率36% (17/47)
勉強中のようなのでヒントだけ 配列に入れるのではなく、文字列として連結して格納し、printfで表示させればできます。