『C言語入力した10進数を2進数変換し、出力する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぶっさん

『C言語入力した10進数を2進数変換し、出力する

#1

投稿記事 by ぶっさん » 6年前

#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");
}


このようなプログラムを組む際にどのようにしたらよいかわかる方よろしくお願いします

アバター
にこよん
記事: 113
登録日時: 7年前
住所: 大阪府
連絡を取る:

Re: 『C言語入力した10進数を2進数変換し、出力する

#2

投稿記事 by にこよん » 6年前

コードを貼り付ける場合は [cod e] と [/cod e] で囲むのがルールです。
見やすくもなりますので是非囲ってください

フォーラムルール
http://dixq.net/board/board.html
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

ぶっさん

Re: 『C言語入力した10進数を2進数変換し、出力する

#3

投稿記事 by ぶっさん » 6年前

コード:

#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進数変換し、出力する

#4

投稿記事 by purin52002 » 6年前

こんにちは

ちょっとだけプログラムを読みましたが、おかしいところがいくつかあるので何がしたいかわかりませんでした。
単純に数値を二進数で表示したいなら「c言語 二進数 表示」などで検索すれば幸せになれるかもしれません^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

box
記事: 2002
登録日時: 13年前

Re: 『C言語入力した10進数を2進数変換し、出力する

#5

投稿記事 by box » 6年前

ぶっさん さんが書きました:

コード:

//負の値はNG
do{
printf("数値を入力してください。:");
scanf("%d",&num);
}while(num>0);
何だかコメントと実装、本当にやりたいこととが食い違っているように見えます。
正の数を入力している間ループする、というのは正しいですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

shika

Re: 『C言語入力した10進数を2進数変換し、出力する

#6

投稿記事 by shika » 6年前

具体的にプログラムを見た方が分かり良いと思うので、以下が参考に成るか分かりませんが、
一応は、簡単な実行確認済みです。もっと的確なプログラムが組んでいただければ幸いです。
困った時は、お互い様です。

コード:

/*
* 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;
}

shika

Re: 『C言語入力した10進数を2進数変換し、出力する

#7

投稿記事 by shika » 6年前

ビットフィールドの共用体を使えば、出来ると思います。
例えば、

コード:

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;
の様に定義し宣言し、利用してプログラムを組めば、直接10進数を2進数で、その逆も可能です。

かずま

Re: 『C言語入力した10進数を2進数変換し、出力する

#8

投稿記事 by かずま » 6年前

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;
}

返信

“C言語何でも質問掲示板” へ戻る