合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: ぶっさん
[URL]
Date: 2017年8月06日(日) 14:20
No: 1
(OFFLINE)

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


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

Name: にこよん
[URL]
初心者(6,569 ポイント)
Date: 2017年8月06日(日) 15:42
No: 2
(OFFLINE)

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

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

フォーラムルール
http://dixq.net/board/board.html
最近は東方風アクションゲームを少しずつ作ってる人です。

Name: ぶっさん
[URL]
Date: 2017年8月06日(日) 16:05
No: 3
(OFFLINE)

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

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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");
}

Name: purin52002
[URL]
プログラマー(28,822 ポイント)
Date: 2017年8月06日(日) 16:41
No: 4
(OFFLINE)

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

こんにちは

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

Name: box
[URL]
ハッカー(264,384 ポイント)
Date: 2017年8月06日(日) 17:55
No: 5
(OFFLINE)

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

ぶっさん さんが書きました:
コード[C]: 全て選択
1
2
3
4
5
//負の値はNG
do{
printf("数値を入力してください。:");
scanf("%d",&num);
}while(num>0);

何だかコメントと実装、本当にやりたいこととが食い違っているように見えます。
正の数を入力している間ループする、というのは正しいですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Name: shika
[URL]
Date: 2017年10月29日(日) 15:02
No: 6
(OFFLINE)

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

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

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
* 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;
}

Name: shika
[URL]
Date: 2017年11月01日(水) 18:48
No: 7
(OFFLINE)

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

ビットフィールドの共用体を使えば、出来ると思います。
例えば、
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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進数で、その逆も可能です。

Name: かずま
[URL]
Date: 2017年11月02日(木) 04:15
No: 8
(OFFLINE)

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

shika さんが書きました:ビットフィールドの共用体を使えば、出来ると思います。

出来るのなら書いてみてもらえませんか?

ビットフィールド割付けの順序(上位から下位か又は下位から上位か)は、
処理系定義なので、処理系に依存しないようには書けないと思います。

元の質問は 3か月も前のもので、質問者はもう見ていないでしょうが、
最初のプログラムをまともなものにすると、次のようになると思います。
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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");
}

次のようにも書けます。
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[18人]