新人向け学習用


0 準備

未作成

1 文字 hello world! を画面に表示

source

#include<stdio.h>

int main() {
    printf("hello world!");
    return 0;
}

解説

  1. #include<stdio.h>については後述。
  2. C言語では、以下の プログラムコード の部分にプログラムを記述する。

    int main() {
      プログラムコード
      return 0;
    }

  3. 画面に文字を表示するためにはprintf(" 表示する文字列 ");と記述する。
  4. 画面に表示するprintfやキーボードから値を入力するscanf等の機能を、C言語では関数と呼ぶ。mainも関数。
    因に英語では機能も関数も同じfunction

2 文字を複数行表示する。

hello world!
goodbye!


ng source

#include<stdio.h>
int main() {
   printf("hello world!");
   printf("goodbye!");
   return 0;
}

解説

  1. printfを2回実行しても、hello world!goodbye!と同じ行に表示される。
  2. 複数行を表示するためには、改行コードを入れる必要がある。
  3. 改行コードは\n

good source

#include<stdio.h>
int main() {
   printf("hello world!\n");
   printf("goodbye!");
   return 0;
}

解説

  1. hello world!の末尾に \n を入れ、改行を行う。
  2. \n は文字列の末尾だけではなく、文字列の任意の位置に入れることができる。
  3. 例えば下の例のように記述しても良い。

    printf("hello world!\ngoodbye!");

  4. もし画面に \n を表示したい場合は、\\nと記述する。

    printf("hello world!\\n");は画面に、hello world!\n と表示される。

補足

  1. C言語では、文字を表示するためにprintfのような関数が他にも用意されている。
  2. printfの代わりにputsを利用すると、画面に表示する際に自動的に改行してくれる。

    printf("hello world!\n"); は、puts("hello world!");と同じ。

3 キーボードから数値を入力し、その値を画面に表示する。

source

#include<stdio.h>

int main() {
  int value = 0;
  puts("数値を入力してエンターを押してください。");
  scanf("%d", &value);
  printf("あなたが入力した値は、%d です。\n", value);
  return 0;
}

解説

プログラムでは、キーボードで入力された値等、保持する必要があるデータは全てメモリに格納する。
以下にメモリについて簡略化して説明する。

メモリについて

  1. プログラムは入力されたデータ(値)をメモリ上に格納したり、メモリ上からデータを参照する。
  2. メモリは格子の連続したものとして表される。
  3. 各格子の中にデータが格納される。
  4. 格子1つ1つにはアドレスという番号(番地という)が割り付けられている。
    001メモリイメージ.png
  5. 格子に格納できるデータは数値のみ。
  6. 1格子のサイズは1byte、0〜255の範囲の数値を一つ格納することができる。
  7. データは1格子だけでなく、複数の格子にまたがって格納することもできる。
    例えば1MByteの画像ファイルは1,000,000個の格子にまたがって格納される。
  8. プログラムはこの数値に色々な意味を持たせることで、文字や画像、音声といったデータを表現する。
    • 例:1byteで1文字のアルファベットを表現するASCIIコード。
    • 1〜3byteで世界の文字の1文字を表現するUNICODE。
    • 3byteで色を表すRGBの色コード。(00, 00, 00)黒, (255, 0, 0)赤 (255,255,255)白

プログラムがメモリにアクセスするためには?

  1. アドレス(格子に割り付けられた番号)に任意の名前を付け、格子のサイズを指定する。これを変数と言う。
  2. 上記プログラムでは、int value = 0; が、アドレスにという名前をつけ、格子のサイズを指定している箇所。
    これを変数の定義と言う。(又は、変数を定義する。変数のvalueを定義する。等。)
  3. int(イントやインテジャーと読む、integer(整数)の略)が、格子のサイズ。intのサイズは一般に4バイト。(CPUなどによって異なる)。
  4. intの事を変数の型と呼び、サイズや目的によって、下表の型がある。
    サイズ目的
    char1byte1文字を格納したり、範囲の狭い数値を格納
    short2byte数値
    int4byte数値
    long4byte数値
    float4byte小数点
    double8byte小数点
  5. valueがアドレスに付けられた名前。プログラムでは、実際の番号(番地)は指定せず、プログラムが自動的に番号を割り当てる。
  6. value = 0;でvalueには数値0が格納される。
  7. 変数valueを利用してメモリに値を格納したり、メモリから値を取得できる。
    002メモリイメージ.jpg
  8. 下はvalue=255~value=258, value=511, value=512の例
    003メモリイメージ.png
    004メモリイメージ.png
  9. 格子1つは0~255までの値しか入らないので、256を表現するためには格子2つが必要になる。
  10. 格子が二つ(2byte)になると255*255=65535 0~65535の65536の表現が可能。

 キーボードから数値を入力するには?

  1. プログラムは1行に多くの事は行えない。
  2. キーボードから入力した値を一度変数に格納し、その変数の値を画面に表示する。
    つまりプログラムはキーボードから入力した値を勝手に覚えてくれないし、勝手に表示もしてくれない。
  3. キーボードから入力した数値を変数に格納するには、scanf("%d", &格納先の変数名);を利用する。
  4. 関数から変数に値を格納する場合、格納先の変数に& を付ける。

 変数に格納された値を画面に表示するには?

  1. printf (" %d", 変数名);とすることで、文字列の%dの位置に変数名の変数の値を表示できる。
  2. 1度のprintfで複数の変数の値を表示できる。
  3. もし2つの変数value1, value2が定義されていて、その値を画面に表示する場合は、printf("%d %d", value1, value2)とすると2つの変数の値が表示できる。

4 キーボードから1文字アルファベットを入力し、その文字を表示する。

source

#include<stdio.h>

int main() {
 char ch=0;
 puts(""1文字アルファベットを入力してエンターを押してください。");
 scanf("%c", &ch);
 printf("あなたが入力した値は %c です。", ch);
 return 0;
}

解説

  1. アルファベット1文字を格納するには1byteで十分なのでchar型(charcterの略、キャラと呼ぶ)の変数chを定義する。
  2. 1文字を取得するためには、scanf("%c", &格納先の変数名)を利用する。%dでないことに注意する。
  3. 1文字を画面に表示するには、printf("%c", 変数名);とする。%dでないことに注意する。

メモリに文字を格納するには?

  1. メモリには1格子につき0~255の数値しか格納できない。
  2. プログラムで文字を格納するには、数値と文字を対応付けし、メモリ上には数値として記録する。
  3. 下図は対応付けの例(実際の対応とは異なる)
    005数値と文字の対応.png
  4. scanf("%c", &ch)の%cが、キーボードから入力される値が文字である事をscanfに指示している。
    メモリには、文字に対応する数値が格納される。
  5. printf("%c", ch)の%cが、chの値を数値ではなく、文字として画面に表示することを指示ししている。
    006数値と文字の対応.jpg
  6. ちなみにprintf("%d", ch)とすると、文字ではなく値そのものが画面に表示される。つまり'a'ではなく1が表示される。
  7. 1文字を明記するときは、'文字'とシングルクォーテーションで囲んで記述する。
  8. また上の例では、'a'~'z'を1~26, 'A'~'Z'を27~52と対応付けていたが、実際にはASCIIコード(アスキーコード)というコード体系に従って割り当てられている。
  9. ASCIIコードの場合、'A'~'Z'が65~90, 'a'~z'が97~122に対応している。

5 入力したアルファベットに対応する数値を表示する。

source

#include<stdio.h>

int main() {
  char ch=0;
  puts(""1文字アルファベットを入力してエンターを押してください。");
  scanf("%c", &ch);
  printf("あなたが入力した文字は %c です。文字に対応する数値は %d です。", ch, ch);
  return 0;
}

6 ASCIIコードとしての数

source 1

#include<stdio.h>
int main() { 
  char ch=0;
  puts(""1文字数字を入力してエンターを押してください。");
  scanf("%c", &ch);
  printf("あなたが入力した文字は %c です。\n文字に対応する数値は %d です。", ch, ch);
  return 0;
}

解説

  1. 例えば、5と入力してエンターを押した場合、メモリイメージ、画面表示は下図のようになる。
    007ASCIIコードとしての数字.png
  2. 画面に表示する際、printfではchを下図のように変換している。
    008ASCIIコードとしての数字.png

source 2

#include<stdio.h>
int main() {
  int value=0;
  puts("数値を入力してエンターを押してください。");
  scanf("%d", &value);
  printf("あなたが入力した数値は%dです。\n", value);
  return 0;
}

解説

  1. 例えば、53と入力してエンターを押した場合、メモリイメージは次のようになる。
    009ASCIIコードとしての数字.png
  2. キーボードから入力された数値は最初ASCIIコードの'5''3'として入力され、scanfによって数値の53に変換される。