前回の続きで「文字」について書いていきます。
「文字」の'A'を「10進数」で表示すると65になります。
「文字」の'B'を「10進数」で表示すると66になります。
「文字コード表」で確認してください。
「文字」の'A'と'B'は「数値」で1異なるだけです。
そこで、次のプログラムを実行してみてください。
<sample program 078-01>
#include <stdio.h> int main(void) { char data = 'A'; data = data + 1; printf("%c\n", data); return 0; } |
<実行結果>
B 続行するには何かキーを押してください・・・
「文字」の'A'に1を加えると「文字」の'B'になりました。
見た目は「文字」の'A'ですが、元データは2進数の「0100 0001」というビット列です。
これに1を加えると「0100 0010」となり、「16進数」で42、「10進数」で66になります。
「10進数」の66を「文字」で表示すると'B'になります。
このように「文字」も計算することが出来るのです。
もう1つプログラムを作ってみましょう。
まず、枠組みを作ります。
<sample program 078-02>
#include <stdio.h> int main(void) { char data; scanf("%c", &data); printf("%c\n", data); return 0; } |
<実行結果>
B B 続行するには何かキーを押してください・・・
scanfで1文字入力し、そのまま表示するプログラムです。
これを改良して、以下のプログラムを作ってみてください。
・アルファベットの大文字1文字を入力し、小文字に変換して表示する
<実行結果>
B b 続行するには何かキーを押してください・・・
「文字コード表」をよく見て、大文字と小文字の関係を考えて下さい。
解答例です。
#include <stdio.h> int main(void) { char data; scanf("%c", &data); data = data + 32; printf("%c\n", data); return 0; } |
<実行結果>
B b 続行するには何かキーを押してください・・・
「大文字」の'A'を「10進数」で見ると65です。 「小文字」の'a'を「10進数」で見ると97です。
同じように、
「大文字」の'Z'を「10進数」で見ると90です。 「小文字」の'z'を「10進数」で見ると122です。
どちらも「大文字」に「10進数」の32を加えたものが「小文字」になっています。
逆に言うと「小文字」から32を引くと「大文字」になる、ということですね。
逆に言うと「小文字」から32を引くと「大文字」になる、ということですね。
「10進数」の32を「文字」としてみると' '(半角空白)です。
ということは、↓のように書くことも出来る、ということです。
<sample program 078-04>
#include <stdio.h> int main(void) { char data; scanf("%c", &data); data = data + ' '; printf("%c\n", data); return 0; } |
<実行結果>
D d 続行するには何かキーを押してください・・・
' '(半角空白)は「10進数」の32と同じですから、「大文字」に「半角空白」を加えると「小文字」になります。
もう1つ変換プログラムを考えてみましょう。
「文字コード表」には、「数字」も載っています。
「数字」の'0'は「10進数」で48、「16進数」で30 「数字」の'1'は「10進数」で49、「16進数」で31 ・ ・ ・ 「数字」の'9'は「10進数」で57、「16進数」で39
これらは「数字」であって「数値」ではありません。
「数字」の'1'に「数字」の'0'を加えると「10進数」で97となり「文字」の'a'になります。
「数値」の1に「数値」の0を加えると1になります。
「数字」のままでは計算には使えないということです。
しかし、「数字」を「数値」に変換しなければならない場合もあります。
そこで「数字」を「数値」に変換するプログラムを作ってみましょう。
↓のプログラムを元に作ってみてください。。
<sample program 078-05>
#include <stdio.h> int main(void) { char data; scanf("%c", &data); printf("%d\n", data); return 0; } |
このままで実行するとこのようになります。
<実行結果>
3 51 続行するには何かキーを押してください・・・
「数字」の3は「10進数」で51ですから、そのままの数値が表示されます。
これを次のように変換したいのです。
<実行結果>
3 3 続行するには何かキーを押してください・・・
分かりづらいですが、上の3は「数字」で、下の3は「数値」です。
考えて作ってみてください。
解答例です。
<sample program 078-06-1>
#include <stdio.h> int main(void) { char data; scanf("%c", &data); data = data - 48; printf("%d\n", data); return 0; } |
または、
<sample program 078-06-2>
#include <stdio.h> int main(void) { char data; scanf("%c", &data); data = data - '0'; printf("%d\n", data); return 0; } |
<実行結果>
3 3 続行するには何かキーを押してください・・・
「数字」の'0'と「数値」の0は「10進数」で48の違いがあります。
「数字」から48を引くと「数値」に変わります。
また、「10進数」の48を「文字」で考えると'0'です。
「数字」から「文字の'0'」を引くと「数値」に変わります。
次回は「文字」の範囲をチェックする方法について書きます。