#include <stdio.h> int main(void) { int price1, price2, sum; printf("Please type the price 1: "); scanf("%d", &price1); printf("Please type the price 2: "); scanf("%d", &price2); sum = price1 + price2; printf("Sum of price is: %d\n", sum); return 0; } |
2つの数値を入れ、それを足すだけである。
このプログラムを元に、Cのプログラムの一般的な約束事を述べる。
#include <stdio.h> int main(void) { 変数の宣言 文 文 文 ..... return 0; } |
のような形をしている。
#include <stdio.h> int main(void) { int price1, price2, sum; printf("Please type the price 1: "); scanf("%d", &price1); printf("Please type the price 2: "); scanf("%d", &price2); sum = price1 + price2; printf("Sum of price is: %d\n", sum) ; return 0;} |
のように書いても問題無く動作する。しかし、プログラムを構造に従って きちんと字下げして書く習慣を付けることは正しいプログラムを書ける ために非常に重要なので、ちゃんと書かねばならない。
#include <stdio.h>は、プログラム中に出て来たprintfを使うために必要な ものである。実は、「#include <ファイル名>」 は、システムのどこか(普通のUNIXでは/usr/include)に ある「stdio.h」というファイルのこの部分に読み込め、 という命令である。その中には「printfのプロトタイプ宣言」 と呼ばれるものが書かれているが、この意味はまだ分からなくて良い。
int price1, price2, sum;の部分は変数の宣言である。intは整数型(整数が入る変数)であることを 指定し、price1、price2、sumが変数の名前である。
char | 8bit整数(文字型) |
short int | 16bit整数 |
long int | 32bit整数 |
int | 32bit整数 |
float | 32bit浮動小数点数 |
double | 64bit浮動小数点数 |
がある。
price = 100; price = price + 100;のようにすると値を代入することが出来る。この場合の等号は右側の式の値を 左側の変数に代入すると意味であり、数学的な等号とは意味が違う。 後者の文は「priceを100ふやす」という意味である。
int price = 100;のように宣言することも出来る。
printf("Please type the price 1: ");で、「Please type the price 1: 」と表示する。 文字列は、このように「"」で囲う。
また、
printf("Sum of price is: %d\n", sum);のように、「%d」があると、その部分は文字列の 後で指定した値で置き換えられる。例えば、
printf("abc%ddef%dghi", 100, 2);で、「abc100def2ghi」と表示される。 末尾の「\n」は、そこで改行することを示す。
なお、「%d」は表示したい値が整数の場合で、 そうで無い場合は、次の表に従う。
%d | 整数を10進数で表示 |
%c | 文字を表示 |
%s | 文字列を表示 |
%f | 浮動小数点数(0.0314のように表示。) |
%e | 浮動小数点数(3.14e-02のように表示。この表示で、3.14×10-2の意味。) |
%g | 浮動小数点数(%fと%eのうち短い方で表示) |
%% | ただの「%」という文字 |
%.15g | %gで有効数字15桁まで表示 |
scanf("%d", &price1);で、キーボードから数値を入力し、その値を price1という変数に代入する。 変数の前に付いている「&」は 「アドレス演算子」と呼ばれるものでポインタと 深い関りがあるが、ここでは触れない。 こう書くものと思って欲しい。
scanfの場合も%の部分は変数の型によって次のように 使い分ける。printfと似ているが少し違うので注意。
%d | 整数を10進数で入力 |
%c | 文字 |
%s | 文字列 |
%f,%e,%g | 浮動小数点数(float型) |
%lf,%le,%lg | 浮動小数点数(double型) |
+ | 加算 |
- | 減算、符号反転 |
* | 乗算 |
/ | 除算 |
% | 剰余 |
がある。*、/、%は、+、-よりも 優先順位が高く、また括弧()を利用して優先順位を変更することも出来る。
x = 10 - 2 * 5; x = (10 - 2) * 5;同じ優先順位なら左側の方が強い。例えば、 a - b - c は (a - b) - c と解釈される。 演算子の優先順位は間違えやすいので、少しでも迷ったら括弧を使うべき。
また、省略形として +=、-=、*=、/=、%=という 演算子がある。例えば、
x = x + 10;
x += 10;と書くことが出来る。
#include <stdio.h> #include <math.h> int main(void) { double a, b, c; printf("input length1: "); scanf("%lf", &a); printf("input length2: "); scanf("%lf", &b); c = sqrt(a * a + b * b); printf("length3 is: %f\n", c); return 0; } |
scanf、printfの使い方は先に述べた。
ここで出て来た
#include <math.h>は、数学関数(ここではsqrt)を使うために必要なものである。 また、数学関数を使ったプログラムをコンパイルするときは、
% cc -o tri tri.c -lm %のように、-lmを付加する必要がある。なお、これを 付加する位置は重要で、 必ずソースファイル(tri.c)より後に 指定しなければならない。 すなわち、
% cc -o tri -lm tri.c %は間違い。
floor | 切り捨て |
ceil | 切り上げ |
fabs | 絶対値 |
sqrt | 平方根 |
exp | 指数関数 |
log | 対数関数(底はe) |
log10 | 対数関数(底は10) |
pow(x,y) | xのy乗 |
cos | コサイン |
sin | サイン |
tan | タンジェント |
asin | アークサイン |
acos | アークコサイン |
atan | アークタンジェント |
sinh | ハイパボリックサイン |
cosh | ハイパボリックコサイン |
tanh | ハイパボリックタンジェント |
なお、上の例題 tri.c では、a2を pow(a, 2) ではなく a*a と 書いているのに注意。
powは非整数や負のベキ(a1.5とかa-2)に 対応するため、一般にpow(x,y)=exp(y*log(x))のような実装になっている。 そのため計算時間がかかる。 よって、x2やx3などの簡単な計算では、 pow(x,2)やpow(x,3)とは書かずにx*xやx*x*xと書くとよい。