#3
by かずま » 7年前
ヘッダファイルを使うやり方の例を示します。
conv.h
コード:
#ifndef CONV_H
#define CONV_H
void 基数変換(unsigned 数, unsigned 基数, char 結果[]);
#endif // CONV_H
conv.c
コード:
#include "conv.h"
void 基数変換(unsigned 数, unsigned 基数, char 結果[])
{
static const char 数字[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char バッファ[33];
int i = 0, j = 0;
do バッファ[i++] = 数字[数 % 基数]; while (数 /= 基数);
do 結果[j++] = バッファ[--i]; while (i != 0);
結果[j] = '\0';
}
main.c
コード:
#include <stdio.h>
#include "conv.h"
int main(void)
{
char 変換結果[33];
unsigned 数, 基数;
while (printf(">> "), scanf("%u%u", &数, &基数) == 2
&& 基数 >= 2 && 基数 <= 36) {
基数変換(数, 基数, 変換結果);
puts(変換結果);
}
}
実行結果
コード:
>> 1000 2
1111101000
>> 1000 8
1750
>> 1000 10
1000
>> 1000 16
3e8
>> 1000 24
1hg
>> 1000 36
rs
>> .
上記のプログラムは、次の点で質問にある完成系(形?)のコードではありません。
・ポインタを使っているようには見えない。
・変換したい基数を選択するのではなく、入力させている。
・基数の範囲が勝手に 36まで拡張されている。
・基数ごとに関数を呼び出すようになっていない。
・名前に英数字以外の文字を使っている。(VC++ ではコンパイルできますが)
・main の中でループしている。
ポインタを使うためには、
int i = 0, j = 0;
を
char *p = バッファ, *q = 結果;
として、*p++ や *--p に書き換えればよいでしょう。
基数の選択や、基数ごとに関数を呼び出すというのが
どういうことなのか、よくわかりません。
課題の原文はどうなっているんですか?
コンパイラは何を使っていますか?
フォーラムルールに従って質問してください。
ヘッダファイルを使うやり方の例を示します。
conv.h
[code]
#ifndef CONV_H
#define CONV_H
void 基数変換(unsigned 数, unsigned 基数, char 結果[]);
#endif // CONV_H
[/code]
conv.c
[code]
#include "conv.h"
void 基数変換(unsigned 数, unsigned 基数, char 結果[])
{
static const char 数字[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char バッファ[33];
int i = 0, j = 0;
do バッファ[i++] = 数字[数 % 基数]; while (数 /= 基数);
do 結果[j++] = バッファ[--i]; while (i != 0);
結果[j] = '\0';
}
[/code]
main.c
[code]
#include <stdio.h>
#include "conv.h"
int main(void)
{
char 変換結果[33];
unsigned 数, 基数;
while (printf(">> "), scanf("%u%u", &数, &基数) == 2
&& 基数 >= 2 && 基数 <= 36) {
基数変換(数, 基数, 変換結果);
puts(変換結果);
}
}
[/code]
実行結果
[code]
>> 1000 2
1111101000
>> 1000 8
1750
>> 1000 10
1000
>> 1000 16
3e8
>> 1000 24
1hg
>> 1000 36
rs
>> .
[/code]
上記のプログラムは、次の点で質問にある完成系(形?)のコードではありません。
・ポインタを使っているようには見えない。
・変換したい基数を選択するのではなく、入力させている。
・基数の範囲が勝手に 36まで拡張されている。
・基数ごとに関数を呼び出すようになっていない。
・名前に英数字以外の文字を使っている。(VC++ ではコンパイルできますが)
・main の中でループしている。
ポインタを使うためには、
int i = 0, j = 0;
を
char *p = バッファ, *q = 結果;
として、*p++ や *--p に書き換えればよいでしょう。
基数の選択や、基数ごとに関数を呼び出すというのが
どういうことなのか、よくわかりません。
課題の原文はどうなっているんですか?
コンパイラは何を使っていますか?
フォーラムルールに従って質問してください。