コンテンツ
C言語入門 Lesson2 「キーボードから入力した数字を出力するプログラムを作ろう」
Lesson2では、次のサンプルプログラムを作ることを学びます。
C言語で
"キーボードで数字を入力してください。"
" xxx "(入力した数字)
"あなたが入力した数字は[xxx]です。"
と出力するプログラムを作成してみよう
C言語 標準入力関数[scanf]
C言語のプログラムで、「キーボードで数字を入力する」を行うには、「scanf」という標準入力関数を使います。「scanf」を使うことによって、キーボードで入力した数字を”変数”という箱に、入力した値を代入することができます。scanfの使い方は、次のようになります。
scanfの規則
#include <stdio.h>
※プログラムの中でで「stdio.h」をインクルードする。
<基本文法:数字の入力>
scanf("%d" , &変数);
<説明>
"変数"に、キーボードで入力した数字が代入されます。
scanfの中にある「&変数」が、「キーボードから入力した数字を、”変数”という入れ物に代入する」というプログラムの意味になります。また、「%d」は、”数字”(整数)、という意味になります。
Lesson2では
①キーボードから入力した数字を受け取る
②入力した数字を、[変数]という箱に格納する
③[変数]に入った値を、標準出力関数で出力するというプログラムを作成します。
Lesson2 サンプルプログラム
それでは、scanfを使ってキーボードから入力した数字を出力するサンプルプログラム”Lesson2.c”を作成してみましょう。
<サンプルプログラム ソースファイル [Lesson2.c] >
はじめに見やすくなるように、説明コメントなしのソースコードを記載します。
#include <stdio.h>
void main ( void )
{
int number;
printf("キーボードで数字を入力してください。\n");
scanf("%d", &number);
printf("あなたが入力した数字は %d です。\n", number);
return;
}
コメントで説明を入れたソースコードを次に載せます。コメントが多くて見ずらいですが、scanfと、変数についての説明の個所を確認してください。
/* Lesson2 Sample Program */
/* 標準入出力ライブラリヘッダをインクルードします。 */
#include <stdio.h>
void main ( void )
{
// C言語のプログラムは、main関数で実行されます。
// int型のnumberという変数を定義します。
int number;
//「キーボードで数字を入力してください。」
// と出力したいので、printfで出力します。
// そのあと表示も改行したいので\nを入れます。
printf("キーボードで数字を入力してください。\n");
// \nを入れなかったらどうなるか?ためしてみてください。
// 「scanf」の関数を使って、
// キーボードで入力した数字を
// "number"という変数に代入します。
scanf("%d", &number);
// printfで入力した数字を出力する文章を作成します。
//「number」という数字の中身を出力するときに、
// printf("xxx %d", number) で、%dを使いました。
// これは、numberの数字を10進数で表現してください
// と指定しているプログラムになります。
printf("あなたが入力した数字は %d です。\n", number);
// 関数の出力をreturnで行います。
// main関数がvoid(空)なので、
// 何も値をreturnしません。
return;
}
プログラムの中に説明があるので詳細の補足はありませんが、「scanf」を使って、キーボードから入力した数字を変数”number”に代入しています。そして、”number”に入った数字を、printfの%dで、数字を出力するというプログラムになっています。では、実行結果を確認しましょう。今回は、数字で”1″を入力した場合の実行結果を見てみます。
<実行結果 [Lesson2.c]>
PS C:\Cprogram> gcc lesson2.c -o lesson2.exe
PS C:\Cprogram> .\lesson2.exe
キーボードで数字を入力してください。
1
あなたが入力した数字は 1 です。
“1”を入力した結果が、プログラムで表示できました。
C言語の変数と型について
ダンボール箱は、ものを入れる箱ですが、何をいれるかによってさまざまな大きさがあります。小さいものを入れるときは、小さい箱を使いますし、大きなものを入れる時は、大きな箱を使います。人間にとっては当たり前のことだと判断できますが、コンピュータには、小さなものを入れる時、どの大きさのダンボール箱を使うか?という判断ができません。そのため、箱の大きさを指定する必要があります。
変数はデータを入れる箱と説明しました。つまり、”変数”は”ダンボール箱”と同じような意味合いです。箱が決まったら、ダンボール箱の大きさも決めないといけません。C言語のプログラムでは、データを入れる箱の大きさを指定する必要があり、”型”と呼んでいます。
先ほどの「Lesson2.c」サンプルプログラムの9行目「int number;」が、データを入れる箱の大きさを「int」型として定義して、変数「number」を宣言しました。
次にC言語の型と変数についてそれぞれ説明を行います。
C言語の型について
型は、先ほどのダンボールの例でも説明をしましたが、コンピュータにどのくらいの大きさの箱のデータがあるかを事前に知らせるためのものです。先ほどのサンプルで出た「int型」は、コンピュータで8byteという大きさの箱のものですよ、と教えるためにプログラムの中で宣言を行います。
型は基本型と呼ばれる型があり、どれも頻繁に使うため、一つずつ覚えていきましょう。
文字型 char
“char”は文字型と呼ばれ、1byte(8bit)のデータを扱います。
型の名前 | サイズ | 扱うデータ | 取りうる値の範囲 |
char | 1バイト | 1文字 数字(取りうる値の範囲) | -128 ~ 127 |
unsigned char | 1バイト | 1文字 数字(符号なし整数) | 0 ~ 255 |
char型は上記のように、文字”1文字”または取りうる値の範囲での数字を扱います。型の名前は、「char」と「unsigned char」がでてきました。実は「char」型も正式には「singed char」と書くことが正しいです。頻繁に使われるため、省略しても良いようになっています。
1バイト(8ビット)は2進数で「1111 1111」が最大の値になり、10進数の「255」がとることができる最大値です。
signedとunsigned型について
signed型, unsigned char型が型の名前として登場しましたが、「signed」は符号付という意味で、数字を扱う場合はマイナスとプラスの値を扱います。「unsigned」が付く場合は、符号なしという意味で、0以上の整数を扱う値という意味になります。そのため、先ほどのcharでは、マイナスの値「-128」からプラスの値「127」を使うことができます。unsigned charを使った場合は、マイナスの値を使うことができず、0以上の値のみとなります。
整数型 short int, int, long int
型の名前 | サイズ | 扱うデータ | 取りうる値の範囲 |
short int | 2バイト | 整数(取りうる値の範囲) | -32768 ~ 32767 |
unsigned short int | 2バイト | 整数(符号なし整数) | 0 ~ 65535 |
int型は、C言語のプログラムで最もスタンダードに扱われます。char型と比べると取りうる値の範囲もとても広くなります。signed型とunsigned型については先ほどの説明通り、符号ありか符号なしかの違いです。
なお、これから「short int, int , long int」を紹介しますが、違いは扱うデータのサイズが異なるところになります。
short int型のサイズは2バイト(16ビット)になるので、2進数であらわすと「1111 1111 1111 1111」が最大の値となり、10進数の「65535」がとることができる最大値です。
型の名前 | サイズ | 扱うデータ | 取りうる値の範囲 |
int | 4バイト | 整数(取りうる値の範囲) | -2147483648 ~ 2147483647 |
unsigned int | 4バイト | 整数(符号なし整数) | 0 ~ 4294967295 |
型の名前 | サイズ | 扱うデータ | 取りうる値の範囲 |
long int | 4バイト | 長整数(取りうる値の範囲) | -2147483648 ~ 2147483647 |
unsigned long int | 4バイト | 長整数(符号なし整数) | 0 ~ 4294967295 |
浮動小数点型 float, double
浮動小数点型は、小数点のデータを扱う時に指定する型になります。例えば、2.4という数字を扱う変数を定義する場合には、「float number」と定義してから、「number = 2.4」で代入を行うことにより、小数点のデータが扱えるようになります。「int number」と定義した場合に、「number = 2.4」で代入をするとエラーになります。
型の名前 | サイズ | 扱うデータ | 取りうる値の範囲 |
float | 4バイト | 単精度浮動小数点数 | 3.4E – 38 ~ 3.4E + 38 |
dobule | 4バイト | 倍単精度浮動小数点数 | 1.7E – 308 ~ 1.7E + 308 |
long double | 8バイト | 拡張倍単精度浮動小数点数 | 1.7E – 308 ~ 1.7E + 308 |
浮動小数点型の確認 <サンプルプログラム ソースファイル [Lesson2_1.c] >
先ほどの説明に記載した、浮動小数点型の出力を確認するサンプルプログラムを用意しました。Lesson2_1.cを試しに実行してみてください。
/* Lesson2-1 */
#include <stdio.h>
void main(void)
{
/* 浮動小数点型の変数について確認します。 */
float number;
number = 2.4;
/* %dは整数型での出力でした。 */
/* %fで、小数点型の出力を行います。 */
printf("numberの値は [%f] です。\n", number);
return;
}
<実行結果 [Lesson2_1.c]>
PS C:\Cprogram> gcc lesson2_1.c -o lesson2_1.exe
PS C:\Cprogram> .\Lesson2_1.exe
numberの値は [2.400000] です。
次に、小数点型のデータを、異なる型で入力してしまった場合どうなるか確認をします。
<サンプルプログラム ソースファイル [Lesson2_2.c] >
/* Lesson2-2 */
#include <stdio.h>
void main(void)
{
/* 浮動小数点型の変数について確認します。 */
int number;
number = 2.4;
/* [%d]で整数型の出力を行います。 */
printf("numberの値は [%d] です。\n", number);
/* [%f]で浮動小数点型の出力を行います。 */
printf("numberの値は [%f] です。\n", number);
return;
}
<実行結果 [Lesson2_2.c]>
PS C:\Cprogram> gcc lesson2_2.c -o lesson2_2.exe
PS C:\Cprogram> .\Lesson2_2.exe
numberの値は [2] です。
numberの値は [0.000000] です。
int numberに2.4を代入したので、[%d]で出力したときは小数点の0.4が切り捨てられて、2が出力されました。[%f]で出力した時は、[0]になってしまいました。numberは、int型の整数なので、整数値のみ格納されます。そのため、2.4を代入した場合は、小数点の値 0.4 は切り捨てられ、”2″という値になります。
C言語の変数について
変数は、データを入れる箱です。そのため、いろいろなデータの大きさの箱が用意できます。プログラムの中では、変数がたくさん用意されることがありますが、コンピュータが間違えてしまうので、すべて同じ名前にならず「一意」になります。
上記の変数number1,number2についてサンプルプログラムを確認します。
<サンプルプログラム ソースファイル [Lesson2_3.c] >
/* Lesson2-3 */
#include <stdio.h>
void main(void)
{
/* 変数の値について確認します。 */
int number1;
int number2;
number1 = 256;
number2 = 384;
printf("number1の値は [%d] です。\n", number1);
printf("number2の値は [%d] です。\n", number2);
return;
}
int型の異なる変数number1とnumber2に入った値についてどうなったか確認します。
<実行結果 [Lesson2_3.c]>
PS C:\Cprogram> gcc lesson2_3.c -o lesson2_3.exe
PS C:\Cprogram> .\Lesson2_3.exe
number1の値は [256] です。
number2の値は [384] です。
C言語の変数宣言について
C言語の変数については、関数の先頭部分で宣言を行うルールになっています。そのため、処理の途中で変数宣言を行うとエラーになります。
Lesson2のおさらい
・scanfを使うと、キーボード入力の文字を受け取れる ・C言語は、型を決めてデータのサイズを定義する ・変数は、データを入れる箱 ・変数の宣言のときは、データ型も合わせて宣言する