#include<stdio.h>
int InputDec(int n);
void ShowBin(int n);
int main(void)
{
int num;
printf("10進を2進に変換\n");
num = InputDec(num);
ShowBin(num);
return 0;
}
//10進の入力
int InputDec(int num)
{
int n;
//負の値はNG
do{
printf("数値を入力してください。:");
scanf("%d",&num);
}while(num>0);
return n;
}
//2進の出力
void ShowBin(int n)
{
int k,j,bit[256];
printf("10進%d の2進は",n);
k=0;
do{
bit[k] = ;
;
k++;
}while();
for( ;j>=0;j--){
printf("%d",);
}
printf("です。\n");
}
このようなプログラムを組む際にどのようにしたらよいかわかる方よろしくお願いします
『C言語入力した10進数を2進数変換し、出力する
Re: 『C言語入力した10進数を2進数変換し、出力する
コードを貼り付ける場合は [cod e] と [/cod e] で囲むのがルールです。
見やすくもなりますので是非囲ってください
フォーラムルール
http://dixq.net/board/board.html
見やすくもなりますので是非囲ってください
フォーラムルール
http://dixq.net/board/board.html
Re: 『C言語入力した10進数を2進数変換し、出力する
#include<stdio.h>
int InputDec(int n);
void ShowBin(int n);
int main(void)
{
int num;
printf("10進を2進に変換\n");
num = InputDec(num);
ShowBin(num);
return 0;
}
//10進の入力
int InputDec(int num)
{
int n;
//負の値はNG
do{
printf("数値を入力してください。:");
scanf("%d",&num);
}while(num>0);
return n;
}
//2進の出力
void ShowBin(int n)
{
int k,j,bit[256];
printf("10進%d の2進は",n);
k=0;
do{
bit[k] = ;
;
k++;
}while();
for( ;j>=0;j--){
printf("%d",);
}
printf("です。\n");
}
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: 『C言語入力した10進数を2進数変換し、出力する
こんにちは
ちょっとだけプログラムを読みましたが、おかしいところがいくつかあるので何がしたいかわかりませんでした。
単純に数値を二進数で表示したいなら「c言語 二進数 表示」などで検索すれば幸せになれるかもしれません^p^
ちょっとだけプログラムを読みましたが、おかしいところがいくつかあるので何がしたいかわかりませんでした。
単純に数値を二進数で表示したいなら「c言語 二進数 表示」などで検索すれば幸せになれるかもしれません^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: 『C言語入力した10進数を2進数変換し、出力する
何だかコメントと実装、本当にやりたいこととが食い違っているように見えます。
正の数を入力している間ループする、というのは正しいですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 『C言語入力した10進数を2進数変換し、出力する
具体的にプログラムを見た方が分かり良いと思うので、以下が参考に成るか分かりませんが、
一応は、簡単な実行確認済みです。もっと的確なプログラムが組んでいただければ幸いです。
困った時は、お互い様です。
一応は、簡単な実行確認済みです。もっと的確なプログラムが組んでいただければ幸いです。
困った時は、お互い様です。
/*
* binary's.c
*/
#include <stdio.h>
// 関数のプロトタイプ宣言
char binary(unsigned int i, int data);
void DecToBinarys(unsigned int dec, int *keta, int *b);
void BinarysToDec(unsigned int *dec, int keta, const int *b);
void BchToBin(const char *bc, int *keta, int *bin);
void dectobin(int data, char *b);
void main0(void);
void main1(void);
int main (void)
{
main0();
return 0;
}
void main0(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("2進数列を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%s", b) != EOF)
{
int bin[32] = {0};
int i, k=0;
BchToBin(b, &k, bin);
BinarysToDec(&dec, k, bin);
printf("%s[bin] = %u[dec]\n", b, dec);
}
}
void main1(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("整数を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%u", &dec) != EOF)
{
int bin[32] = {0};
int i, k;
printf("%u[dec] = ", dec);
DecToBinarys(dec, &k, bin);
for (i=0; i<k; i++)
printf("%d", bin[k-1-i]);
printf("[bin]\n");
}
}
char binary(unsigned int i, int data)
{
int a = 1, b;
a = (a << i);
b = '0' + ((data & a)? 1:0);
return b;
}
void dectobin(int data, char *b)
{
int i;
for (i=31; 0<=i; i--)
b[31-i] = binary(i, data);
b[32] = '\0';
}
void DecToBinarys(unsigned int dec, int *keta, int *b)
{
*keta = 0;
if (dec)
{
while (dec)
{
b[(*keta)++] = (dec & 1);
dec = (dec >> 1);
}
}
else
b[(*keta)++] = 0;
}
void BinarysToDec(unsigned int *dec, int keta, const int *b)
{
unsigned int i, a=1;
unsigned int d = 0;
for (i=0; (int)i<keta; i++)
{
if (b[(int)i])
d |= a;
a <<= 1;
}
*dec = d;
}
void BchToBin(const char *bc, int *keta, int *bin)
{
int i, k=0;
const char *p = bc;
while (*p++)
k++;
for (i=0; i<k; i++)
bin[i] = (int)(bc[k-1-i] - '0');
*keta = k;
}
Re: 『C言語入力した10進数を2進数変換し、出力する
ビットフィールドの共用体を使えば、出来ると思います。
例えば、
の様に定義し宣言し、利用してプログラムを組めば、直接10進数を2進数で、その逆も可能です。
例えば、
typedef union int_type
{
int dec;
struct
{
unsigned bit00: 1;
unsigned bit01: 1;
unsigned bit02: 1;
unsigned bit03: 1;
unsigned bit04: 1;
unsigned bit05: 1;
unsigned bit06: 1;
unsigned bit07: 1;
unsigned bit08: 1;
unsigned bit09: 1;
unsigned bit10: 1;
unsigned bit11: 1;
unsigned bit12: 1;
unsigned bit13: 1;
unsigned bit14: 1;
unsigned bit15: 1;
unsigned bit16: 1;
unsigned bit17: 1;
unsigned bit18: 1;
unsigned bit19: 1;
unsigned bit20: 1;
unsigned bit21: 1;
unsigned bit22: 1;
unsigned bit23: 1;
unsigned bit24: 1;
unsigned bit25: 1;
unsigned bit26: 1;
unsigned bit27: 1;
unsigned bit28: 1;
unsigned bit29: 1;
unsigned bit30: 1;
unsigned bit31: 1;
};
} INT_TYPE;
Re: 『C言語入力した10進数を2進数変換し、出力する
出来るのなら書いてみてもらえませんか?shika さんが書きました:ビットフィールドの共用体を使えば、出来ると思います。
ビットフィールド割付けの順序(上位から下位か又は下位から上位か)は、
処理系定義なので、処理系に依存しないようには書けないと思います。
元の質問は 3か月も前のもので、質問者はもう見ていないでしょうが、
最初のプログラムをまともなものにすると、次のようになると思います。
#include <stdio.h>
int InputDec(void); // int n を void に
void ShowBin(int n);
int main(void)
{
int num;
printf("10進を2進に変換\n");
num = InputDec();
ShowBin(num);
return 0;
}
//10進の入力
int InputDec(void) // int num を void に
{
int n;
//負の値はNG
do {
printf("数値を入力してください。:");
scanf("%d", &n); // num を n に
} while (n < 0); // num>0 を n < 0 に
return n;
}
//2進の出力
void ShowBin(int n)
{
int k, j, bit[256];
printf("10進%d の2進は",n);
k = 0;
do {
bit[k] = n % 2; // n % 2 を追加
n /= 2; // n /= 2 を追加
k++;
} while (n != 0); // n != 0 を追加
for (j = k - 1; j >= 0; j--) { // j = k - 1 を追加
printf("%d", bit[j]);
}
printf("です。\n");
}
#include <stdio.h>
int main(void)
{
int n = 0, k = 0, b[32];
printf("10進を2進に変換\n");
do {
printf("数値を入力してください: ");
if (scanf("%d", &n) != 1) break;
} while (n < 0);
printf("10進 %d の2進は ", n);
do { b[k++] = (n & 1) + '0'; } while (n >>= 1);
do { putchar(b[--k]); } while (k);
printf(" です。\n");
return 0;
}