next up previous contents
Next: インタラクティブなプログラム Up: 計算機言語 I 第 3 Previous: man コマンド   Contents

基本データ型についての復習

変数のデータ型について, 関数 printf を使って復習します. 変数の型の主なものは, 次の 4つでした.
char
文字型, 1 byte = 8 bit
int
整数型, 4 byte = 32 bit
float
小数(現在ではほとんど使わない) 4 byte = 32 bit
double
小数 8 byte = 64 bit

char 型は文字を代入することが多いというだけで, 1 byte で表わされる範囲 の整数を扱うことも出来ます. 1 byte = 8 bit ですので, 0 から 1#1 までの整数, または, 2#2 から, 3#3 までの整数 が扱えます. どちらの範囲の整数が使用できるかは, コンパイラーによって 異なりますので, 0 から 127 までを使うようにするのが無難でしょう.

次のプログラムを見て, 変数の型とその表示の方法について復習しましょう. 重要な事は, プログラムの中でデータを解釈するのは, そのプログラムを 組む人であって, コンピュータではないと言う事です. プログラムの中で配列が出て来ますが, 配列のより詳しい扱い方は, 後の講義で説明します.

/* char, int, double の変数と文字型配列を表示 */
/* File name 3-1.c                            */

#include <stdio.h>

main()
{
  char    moji;    /* 主に文字を扱う */
  int     suji;    /* 整数(-2147483648〜2147483647) */
  double  shosu;   /* 実数(浮動小数) */
  char    bun[80]; /* 文字列は配列に代入する*/

  moji = '!';      /* 文字を代入するときは, ' で囲む*/
  suji = 2;        /* 数字を代入するときはそのまま */
  shosu = 14.0;    /* double 型への代入は小数にしてから */

  /* 文字列は"で囲んで sprintf で配列名に代入 */
  sprintf(bun, "is St. Valentine's day.");

  /* %2.0f とは小数を 2桁で小数点以下を 0桁で出力せよ
   * という意味   */
  printf("%d %2.0f %s%c \n", suji, shosu, bun, moji);
}

文字列をchar型の配列に代入するには, ライブラリ関数 sprintf を使います (string printf と考えて下さい, string は文字列の意). 使い方は printf と同様ですが, 最初の引き数にchar型の配列の配列名, 2番目の引き数には, 文字列を printf と同じ形式で"で括って書きます. その際, 代入する文字列よりも配列の長さを長くとっておきます.

注意
sprintf(bun, "is St. Valentine's day.");
の部分は
bun = "is St Valentine's day.";
とすることは出来ません. すなわち, 配列の代入はできません.
その他の部分のプログラムの説明はコメントに書いてある通りです. 上のプログラムをタイプして実行してみて下さい.

次に文字型変数に整数を代入して出力する例をみてみましょう. 次のプログラムを良く読んで出力結果を 予想して下さい, それから実際に作成して実行してみて下さい. やってみるとわかるように, 文字型変数に代入した'文字'は対応するコード (整数)を値として持っています.

/* File name 3-2.c */

#include <stdio.h>

main()
{
  char    a, b, c, one, two, three;

  a = 65; b = 66; c = 67; /* 左の10進数は, 16進数では幾らでしょう? */

  printf("%d %d %d\n", a, b, c); /* 10進数として出力する時は, %d を使います.*/
  printf("%x %x %x\n", a, b, c); /* 16進数として出力するときは, %x を使います*/
  printf("%c %c %c\n", a, b, c); /* %c を使うとcodeに対応する文字を出力します*/

  /* 16進数の代入は数字の前に 0x を書きます*/
  one = 0x31;   /* 文字'1' に対応するコードは 0x31 = 49 */
  two = 0x32;   /* 文字'2' に対応するコードは 0x32 = 50 */
  three = 0x33; /* 文字'3' に対応するコードは 0x33 = 51 */

  printf("%d %d %d\n", one, two, three);
  printf("%c %c %c\n", one, two, three);
}



2003-04-25