C言語で情報オリンピック Day4

int、float型の変数、printf、if文、while、do、forループを勉強しましたね。今日は入力(にゅうりょく)、配列(はいれつ)を勉強します。

まず復習(ふくしゅう)になりますが、printfは標準(ひょうじゅん)出力(しゅつりょく)に文字(もじ)や数(かず)を出力するCの関数(かんすう)です。標準出力は英語でStandard Outputといいます。これはプログラミングの世界では略(りゃく)してstdoutと書きます。標準出力後の反対語は標準入力(にゅうりょく)です。英語ではStandard Inputといいます。略してstdin。入力と出力を合わせて入出力といいます。InputとOuputですね。略してIOといいます。標準というのはなんでしょうか。一般的に、パソコンの場合は、キーボードからの入力は標準入力といい、ディスプレーに出力するのは標準出力といいます。これに対し、ほかにスキャナーやカメラからの入力、3Dプリンターや磁気(じき)テープなどへの出力は標準ではないのでただの入力、出力といいます。

標準入力(ひょうじゅんにゅうりょく)

C言語ではscanf関数を使って標準入力からデータを取得します。

以下のプログラムを見てみましょう。

#include <stdio.h>
int main() {
  int i;
  scanf("%d", &i);
  printf("あなたは %d を入力しましたね!", i);
  return 0;
}

では、このプログラムの作成動画を見てみましょう。のちほど詳しく解説(かいせつ)しますので、わからない部分があってもだいじょうぶです。

プログラムを説明する前にすこし数学の話をします。

ビットとバイト

コンピュータがデータを保存(ほぞん)するのに、メモリやディスクをつかいますが、保存するデータの最小単位はビットとなります。1ビットに保存できるのは0か1、ひとつの数字だけです。いかのようなイメージは4ビットになります。

そして8ビットは1バイトといいます。1バイト=8ビットですね。1バイトを整数を保存するときに、2の8乗の数を保存することができるので、符号ありなら-128〜+127、符号なしの場合は0〜255を表すことができます。

ビットとバイトの英語はそれぞれbit、byteになります。複数形はbits、bytesです。

2進数(しんすう)と10進数

この0と1は実(じつ)は2進数といいます。人間は日常生活(にちじょうせいかつ)に10進数をつかいますが、コンピュータはそこまでかしこくないので、2進数をつかいます。たとえば10進数の1は2進数だと、10と表示します。10進数は10でつぎの位が増えるように、2進数2で次の位が増えます。以下は10進数と2進数の対応表になります。

10進数…2進数
0…0
1…1
2…10
3…11
4…100
5…101
6…110
7…111
8…1000
9…1001
10…1010
11…1011
12…1100
13…1101
14…1110
15…1111
... 

2進数⇒10進数変換

2進数が与えられたら、10進数はいくつになりますか。桁(けた)ごとに計算すればよいです。最下位は2の0乗1をかけ、後ろから2番めの桁を2の1乗をかけ、うしろから3番目に2の2乗をかけます、・・・

たとえば 1101の2進数は 1✕2^3+1✕2^2+0✕2^1+1✕2^0 = 8+4+0+1=13 になります。上の表からもわかるように、2進数の1000は10進数の8で、100は4で、1は1ですので、8+4+1ですね。

10進数⇒2進数変換

10進数を数をひたすら2でわればよいです。

たとえば10進数の13を2進数に変換しましょう。
13÷2 = 6...1
6÷2 = 3...0
3÷2 = 1...1
1÷2 = 0...1
ですので、余りを逆順にしますと 1101 になります。

コンピュータのなかにこの1と0の組み合わせでいろいろなデータを表(あらわ)します。

データ型(かた)

int というキーワードはデータ型または型といいます。C言語の基本データ型は以下のようなものが存在します。

short ・・・ 2バイトの符号つき整数(-2の15乗〜2の15乗-1、つまり-32768〜32767)
int   ・・・ 符号(ふごう)つき整数。2バイトまたは4バイトです。
char  ・・・ 1バイトの符号つき整数(-128〜127)、英数字などを記憶できます
unsigned char ・・・ 1バイトの符号なし整数(0〜255)
long  ・・・ 4バイトの符号付き整数。(-2の31乗〜2の31乗-1)
unsigned ・・・ 2バイトまたは4バイトの符号なし整数(4バイトの場合は0〜2の32乗-1)
unsigned long ・・・ 4バイトの符号なし整数
unsigned short ・・・ 2バイトの符号なし整数(0〜2の16乗-1)
float ・・・ 4バイトの単精度(たんせいど)浮動(ふどう)小数点実数(有効桁7桁)
double ・・・8バイトの倍精度(ばいせいど)浮動小数点実数(有効桁16桁)
long long ・・・ 8バイト符号つき整数(-2の63乗〜2の63乗-1)
unsigned long long ・・・ 8バイト符号なし整数(0〜2の64乗-1)

コンパイラによって、int型とunsinged型は2バイト、4バイトと異なります。short、longなら桁数が変わりません。

型変数をつかうときに、かならず有効範囲を意識しましょう。

変数

int i; の行は変数(へんすう)i を宣言(せんげん)します。以下の図のように、変数のことを箱(はこ)と理解してかまいません。ラベルiという箱に、整数を入れることができます。そして宣言というのは、これからこの箱をつかうぞとコンピュータに通知(つうち)します。

変数の宣言に初期(しょき)値を代入することができます。たとえば

int i = 10;

整数型の変数iに10の数字を代入します。

同じ型の変数2つ以上があるばあい、1行に宣言することもできます。
たとえば

int i = 10,  j = 12, k = 14;

i, j, k3つの変数をカンマ(,)で区切って、一行に宣言することができます。

変数を宣言しないと、プログラムでつかうことができません。

標準入力

scanfの行は標準入力から整数を受け取り、変数 i に代入(だいにゅう)します。ここに注意してほしいのは & という符号(ふごう)です。変数 i に入力を代入(だいにゅう)すると理解(りかい)してください。今後の授業で紹介しますが、&iはiがコンピュータ中の場所を意味しています。

標準出力

printf関数に2つのパラメータがあります。1番目はダブルクォートの文字列ですが、これは文字列のフォーマットといいます。このフォーマットの中に%d(整数)のような特殊なパラメータがあります。2番めのパラメータはこの%dに対応した変数になります。

Day4まとめ


ビット
バイト
変数
入力
出力

この記事が気に入ったらサポートをしてみませんか?