コンピュータでは,すべての情報が数値で表されます.数も,文字も 絵もすべて数値で表されます.C言語では数値のタイプ(型という)と して整数型と実数型(Cの場合は浮動小数点型のみ)の2種類がありま す. 10は整数型を,10.0は実数型を表します. また,非常に大きな,あるいは小さな実数値を表すために 2.3 x 1012を 2.3e12, -4.5 x 10-9を -4.5e-9 等で表します(e の代りに E としても良い).
整数型は小数点がなく,厳密な足し算,引き算,掛け算ができま すが, わり算は小数点以下が切り捨てられます.また,表すこ とができる範囲が狭いので掛け算をするとき,注意が必要です.
実数型は仮数部と指数部で表される数で,表すことができる範囲 は広いですが,近似計算しかできません.
これらの数値には定数または変数の2種類があります.
不変の数値です.定数の値が変化することはありえません. 数値そのものと考えて下さい.
その名のとおり値が変化します.整数型や実数型の数値を 入れておく入れ物(箱)と考えて下さい. 変数の名前(変数名)は, 英文字から始めなければなりません.途中に数字やアンダースコア "_"を用いても構いません.
C言語では,変数を使うとき,「変数の名前(変数名)」と変数が取り扱う 「データの種類(整数型,実数型)」を使う前に宣言する必要があります. この情報処理演習の授業では,整数型を宣言するときは "int",実数型を 宣言する時は"double"を宣言します.
通常,関数内で使用する変数は,その関数内の最初に宣言します.
整数型には他に"short", "long"があり,正の整数型を表すときにはさ
らに"unsigned"を付けます.
また、文字を表す文字型 "char"もあります(charはまた後ででてきま
す).
また、他の実数型には"float"があります."float"は"double"より精
度が低くなっています.
では,実際に変数を使ったプログラムを書いてみましょう.
example12.c
#include <stdio.h> int main(void) { int seisu; double jissu; seisu = 5; jissu = 1.3; printf("seisuの値は%dです\n",seisu); printf("jissuの値は%fです\n",jissu); return 0; } |
int seisu; double jissu;
変数 seisu, jissu の宣言です.これから seisu と名付けられ
た整数型変数と,jissuと名付けられた実数型変数を使うことを
意味します.
この変数の型宣言は関数の中で一 番始めに行わなければなり
ません.また,あとですぐ分かるように,変数にはできるだけ意
味のある言葉を使いましょう(この例は非常に安直ですが...).
seisu = 5;
C言語では,"=" は代入を表します.右側の値を左側に代入しま す. したがって,整数型変数 seisu に 整数値 5 を代入するこ とを表します.
jissu = 1.3;
実数型変数 jissu に実数値 1.3 代入します.
printf("seisuの値は%dです\n",seisu); printf("jissuの値は%fです\n",jissu);
printf()関数では,文字を打ち出すときの書式を設定することが できます.%dの部分は変換指示子と 呼ばれ,そこに整数型の数値 を10進数の値として出力すること を示しています.そしてその中身が","の後に書かれています. また,実数型の数値を表す変換指示子は%f です.
+ 足し算 - 引き算 * 掛け算 / 割り算(商) % 剰余(余り) ただし整数型のみで有効 |
なお,演算子の優先順位は乗除は加減より優先され,四則演算は左か ら右へ計算されます.また()内は最初に計算されます.
四則演算の例を示します.
example1_1.c
#include <stdio.h> int main(void) { int a,b,c,d,e,f; a = 3+2*4; b = 6/4; c = 1/2*3; d = 12/(2*3); e = a%d; f = 1.2; printf("a の値は %d です\n", a); printf("b の値は %d です\n", b); printf("c の値は %d です\n", c); printf("d の値は %d です\n", d); printf("e の値は %d です\n", e); printf("f の値は %d です\n", f); return 0; } |
a=3+2*4; | aの値は11 |
b=6/4; | bの値は1(整数同士の割り算では,小数点以下は切り捨てられる) |
c=1/2*3; | cの値は0(なぜなら,1/2は0である) |
d=12/(2*3); | dの値は2 |
e = a%d; | eの値は1(11/2の余りは1) |
f = 1.2; | fの値は1(整数型の変数に実数を代入するときは,小数点以下が切 り捨てられる) |
ややこしいと感じた場合には()を有効につかうこと!.なお,2重()は 内側から計算されます.
例えば
a=4*(2*(2+3)-3)/(1+3);
aの値は7
実際のプログラムを動作させてから説明します.
#include <stdio.h> #define PI 3.14159265358979323846 int main(void) { int seisu; double jissu; printf("何か整数を入力して,enterを押して下さい\n"); scanf("%d", &seisu); printf("あなたの入力した整数は%dです\n", seisu); printf("何か実数を入力して,enterを押して下さい\n"); scanf("%lf", &jissu); printf("あなたの入力した実数は%fです\n",jissu); printf("PIでマクロ定義されている値は%fです\n",PI); return 0; } |
scanf("%d",&seisu);
キーボードから数値を変数seisuに取り込んでくれます.%dは、変数 seisu が整数型であることを示しています。また、&は変数のアドレスを表 しますが,いまのところは呪文としておいて下さい.
scanf("%lf",&jissu);
注 %lfは,変数 jissuが実数型である
ことを示しています.printfでは,%fでよかったのですが,scanf では
%lfとなります.
実数型には double と float の2種類があり,floatよりdoubleの方が
精度が高くなっています.(通常,float は4 byte, double は8 byte)
データーを受け取るときには,精度をはっきりと示さないといけないの
で,scanf関数の時は、l(long を意味する)を付ける必要があります.
#define PI 3.14159265358979323846
#define は定数を定義でき,文字を数値に置き換えてくれます.まるで 変数のように見えますが,単に置き換えてくれるだけなので代入はでき ません.
PI=2;は,コンパイラは
3.14159265358979323846=2;
と解釈しますので,コンパイルエラーとなります.
sin(正弦)やcos〔余弦)などの 数学関数を用いる時は,math.h を #includeする必要が あります.
Compile Option”-lm”が必要です.
/*一辺とその両端角の角度から面積を計算する*/ #include <stdio.h> #include <math.h> /*sin, cos 等 数学関数を使用するために必要*/ #define PI 3.14159265358979323846 /*πをマクロ定義*/ int main(void) { double len, angleDeg1, angleDeg2, area; double angle1,angle2; printf("一辺とその両端角の角度から面積を計算します\n"); printf("一辺の長さを入力して下さい\n"); scanf("%lf", &len); printf("一方の角の角度(度)を入力して下さい\n"); scanf("%lf", &angleDeg1); printf("他方の角の角度(度)を入力して下さい\n"); scanf("%lf", &angleDeg2); angle1=angleDeg1/180.0*PI; /*angleDeg1をラジアンに変換*/ angle2=angleDeg2/180.0*PI; /*angleDeg2をラジアンに変換*/ area=len*len*sin(angle1)*sin(angle2)/2.0/sin(angle1+angle2); printf("面積は%fです\n",area); return 0; } |
変数は数値を入れておく箱,整数(int)と実数(double)がある. これらを使用する時には、宣言する必要がある. しかし,宣言しただけでは,中身はどうなっているか保証されない. 以下のプログラムを実行すると i の値はいくらになるか分からない.
#include <stdio.h> int main(void) { int i; printf("iの値は%dです\n",i); return 0; } |
変数を使用する時には、初期化する必要な場合がある.
#include <stdio.h> int main(void) { int i; i=10; printf("iの値は%dです\n",i); return 0; } |
以下のように、宣言とともに初期化することもできる.
#include <stdio.h> int main(void) { int i=10; printf("iの値は%dです\n",i); return 0; } |
例題を入力し,コンパイルしてみましょう.
./hello > output.txtのようにコマンド実行することで,printf()による画面への出力(標準出力)がoutput.txtというファイルに保存される.