C言語研修(基礎編)
〜画面とのやり取り〜

キーボードから数値を入力するプログラム

#include
#include

void main(void){
	char pszBuffer[256];
	int iValue;

	gets(pszBuffer);
	iValue = atoi(pszBuffer);
	printf("%d\n", iValue - 100);
}

キーボードから数値を入力するプログラム(その2)

#include
#include

void main(void){
	char pszBuffer[256];
	double fValue;

	gets(pszBuffer);
	fValue = atof(pszBuffer);
	printf("%f\n", fValue - 100);
}

atoi()の使い方
機能   文字列を整数値(int)に変換する
ヘッダファイル stdlib.h
プロトタイプ int atoi(const char *string);   int atoi (引数);
引数   string |変換された文字列
戻り値  変換後の整数値(int)
     変換できない場合は0


    "200" → atoi → 200 int型
   引数               戻り値

atof()の使い方
機能   文字列を実数値(double)に変換する
ヘッダファイル stdlib.hもしくはmath.h
プロトタイプ int atof(const char *string);   
引数   string |変換された文字列
戻り値  変換後の実数値(double)
     変換できない場合は0.0

・文字列として入力し数値に変換する
−gets()と変換関数の組みあわせ
・変換関数には何種類かある
 −atoi(), atol(), atof()
・万能入力関数scanf()というのがあるけれど。。。

atol()の使い方
機能   文字列を整数値(long)に変換する
ヘッダファイル stdlib.h
プロトタイプ int atof(const char *string);   
引数   string |変換された文字列
戻り値  変換後の整数値(long)
     変換できない場合は0L

関数の引数に関数が戻り値を渡せる
	iValue = atoi(pszBuffer);
	printf("%d\n", iValue - 100);
        ↓
	printf("%d\n", atoi(pszBuffer) - 100);

C言語研修(基礎編)
〜変数と定数〜
・変数とは
 −値が格納できる入れ物
 −自由に値が変更できる
・定数とは
 −ある決まった値を示す
 −値が変更ができない
変数について
・変数は宣言しないと使えない
・変数はそれぞれデータ型がある
 −文字型: char
 −整数型: short, int, long
 −実数型: float, double
・C言語の変数は数値しか格納できない

データ型では
分類   型名   使用バイト  プレフィックス(例) ←コーディング規約で変わる
文字型  char      1バイト     c
整数型    short     2バイト      n
          int       不定     i
     long      4バイト     l
実数型  float     4バイト     f
	      double    8バイト     f
型無し  void      -             -

short <= int <= long

扱える値の種類が異なる
−整数型
 *整数しか扱えない
 *桁落ちなど発生しない
−実数型
 *実数を扱える
 *桁落ちが発生する可能性がある
  [例]1→0.9998 (あくまで例である)

扱える値の範囲が異なる
−整数型
  sort      -32768 〜 32767
    long      -2147483648 〜 2147483647
−実数型
  float     3.4E-38 〜 3.4E+38  7桁
	double    1.7E-308 〜 1.7E+308    15桁

整数型の符号指定
・整数型の変数は『符号付き』と『符号なし』で扱える値の範囲が異なる

 符号付  正の値と負の値の両方が扱える
 (signed)

 符号なし 負の値は扱えない代わりにより大きな正の値を扱える
 (unsigned)

符号付き整数
・『符号付き』を明示する場合はsignedを型名の前につける
		signed char cCharactor;
		signed short nValue;
		signed long lValue;

『符号なし』を指定する場合はunsignedを型名の前につける
		unsingned char ucCharactor;
		unsingned short unValue;
		unsingned long ulValue;
プレフィックの例としてunsigned型では変数の型を表すプレフィックスの前にuをつける場合がる

・符号の指定は省略できる
・符号の指定を省略した場合はsingned型として扱われる
 -ただしchar型については処理系により異なる

singned  char        -128 〜 127
         short       -32768 〜 32767
         long     -2147483648 〜 2147483647
unsinged  char        0 〜 255
         short        0 〜 65535
         long         0 〜 4294967295

・その処理系でももっとも高速に演算できる
 整数型
・使用するバイト数は処理系により異なる
 −つまり扱える値の範囲も異なる
。C言語の規格では次のことが決まっている
   short型 <= int型 <= long型

int指定の省略
・intの指定は省略できる
・正式な表記
	short → signed short int
	long  → signed long int
・単なるint型の場合は特定の場合を除いて省略できない

データ型の混合演算(計算)
・異なるデータ型を一緒に演算できる
[例] lLong = fDouble + nShort;
・演算時には表現能力の高いデータ型に変換される
 −nShortをshort型からdouble型へ変換
・代入時には左辺のデータ型に変換される
 −double型の演算結果をlong型に変換

型変換
・演算時に型変換は自動的に適切な処理が行われる(暗黙の型変換)
・明示的な型変換の方法もある(キャスト)
 lLong = (long)(fdouble + (double)nShort);

配列変数について
・同じ型のデータをいくつかまとめて扱える
・配列変数も宣言が必要である
   int piArray[10]
・プレフィックスの例として配列変数では型を表す
 プレフィックスの前にpをつける場合がある

配列変数のイメージ

int piArray[10];の場合

piArray[0]    ← [0]から始まる
piArray[1]
piArray[2]
   ・
  ・     10個の変数が確保される
  ・         ^^^^^^^^^^^^^^^^^^^^^^
piArray[8]
piArray[9]  ← [0]〜[9]の10個

配列変数の注意点
・配列には添字がある
	piArray[0], piArray[1], ...
・配列の添字は0から始まる
 −1から始まるのではない
・配列の終端は自分で管理する

配列変数を使ったプログラム

#include 

void main(void){
	int i, piArray[10];

	for(i = 0; i < 10; i++){
		piArray[i] = i * i;
	}
	for(i = 0; i < 10; i++){
		printf("%d * %d = %d\n", %d\n", i, i, piArray[i]);
	}
}

二次元配列とは
・添え字が一つの配列を一次元配列という
	int piArray[10];
	char pszBuffer[256];

・添え字は2つの配列を二次元配列という
	int ppiMatrix[2][3];
	char ppszBufArray[5][256];

二次元配列のイメージ

int ppiMatrix[2][3];の場合

          長さが3の配列変数を

ppiMatrix[0][0]  ppiMatrix[0][1]  ppiMatrix[0][2]
ppiMatrix[1][0]  ppiMatrix[1][1]  ppiMatrix[1][2]  2組用意する

for(i=0;i<2;i++){
	for(j=0;j<3;j++){

二次元配列のメモリイメージ

int ppiMatrix[2][3];の場合

ppiMatrix[0][0]
ppiMatrix[0][1] 長さが3の配列
ppiMatrix[0][2]         2組用意する
ppiMatrix[1][0]
ppiMatrix[1][1] 長さが3の配列
ppiMatrix[1][2]


文字型の変数とは

・C言語の変数は数値しか格納できない
 −文字の場合は文字コードを格納する
・文字を格納するのにちょうど良い大きさ
 −変数の大きさは1バイト
・文字の処理用の特別機能はない
 −C言語には文字列型の変数はない

文字列を変数に格納するには
・C言語には文字列型の変数はない
・文字型(char)型変数の配列を利用する
	char pszBuffer[256];
・プレフィックスの例としてpasを付け加える場合がある
 −文字(char)型の配列だがpcというわけではない

char pszBuffer[256];
gets(pszBuffer);       // ABCとキーボードから入力

pszBuffer[0] = 'A';    // 65という数値が入っている
pszBuffer[0] = 'B';    // 66という数値が入っている
pszBuffer[0] = 'C';    // 67という数値が入っている

C言語における文字列の規則
・文字列の終端には'\0'が格納されている
	pszBuffer(宣言はchar pszBuffer[256];)に
	"ABCD"が格納されている場合

          [0] [1] [2] [3] [4] [5] [6] ....[256]
pszBuffer  A   B   C   D   \0         ....    
 
・文字列を扱う関数は全てこのルールに従っている

文字列変数の注意点
・文字列の処理には関数を使用する
・配列の内容は単なる数値である
 −文字コードが格納されている

          [0] [1] [2] [3] [4] [5] [6] ....[256]
pszBuffer  A   B   C   D   \0         ....    
           65  66  67  68   0