━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C言語による 数字・数字列 から 数値 への変換 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
「木構造と数式処理」の基本課題では数字を数値に変換し,発展課題では 数字列を数値に変換する.C言語によるこれらの変換方法を復習する. ●プログラム例 数字や数字列を数値に変換するC言語のプログラム例を以下に示す. ────────────────────────────────────── #include <stdio.h> #include <stdlib.h> /* atoi() */ int main(void) { char digits[] = { '0', '1', '2', '?', '\0' }; /* 文字配列,文字列 */ char *p; /* char 型データの値は文字コードを表す小さな整数 */ puts("===== *p ====="); for (p = digits; *p != '\0'; p++) printf("%d\n", *p); /* %d は値の10進表示 */ /* 文字列は '\0' で終わる char 型データの並び */ puts("========== p =========="); for (p = digits; *p != '\0'; p++) printf("%s\n", p); /* %s は文字列の表示 */ /* 数字から数値への変換(数字のコードの連続性を利用) */ puts("========== *p - '0' =========="); for (p = digits; *p != '\0'; p++) printf("'%c' -> %d\n", *p, *p - '0'); /* %c は文字の表示 */ /* 数字列から数値への変換(atoi() を利用) */ puts("========== atoi(p) =========="); for (p = digits; *p != '\0'; p++) printf("\"%s\" -> %d\n", p, atoi(p)); return 0; } ────────────────────────────────────── ●課題 このプログラムに関連する次の課題を実施し,C言語の 文字・文字列 についての 理解度を確かめるとよい. (1a) 電算室の計算機上での文字 '0'〜'9' の文字コードを man ascii で調べよ. (1b) 関数 printf() の変換の指定 %d, %c, %s の違いを man printf で確かめよ. (1c) 関数 atoi() の機能(引き数と戻り値)を man atoi で調べよ. (2a) プログラムを読み,結果を予想せよ.また,実行結果と予想とを比べよ. (2b) プログラム中で *p - '0' でなく *p - 48 と書く場合の問題点を考えよ. プログラム例のファイルと実行結果を以下に示す. プログラム例 プログラムの実行例 関数 atoi() は,1文字でなく文字列を数値に変える関数であることに注意する. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演習のホームページ 山田 俊行 https://www.cs.info.mie-u.ac.jp/~toshi/