Cのプログラムには主関数(main)がただひとつ存在します。 プログラムは主関数から始まります。波括弧「{, }」 のなかがその定義となります。
変数はメモリ内の位置を 部屋のようなものとかんがえればよいでしょう。 宣言は変数の型の名前と変数のリストから成ります。 Cでは、ふつうは関数の初めに変数の宣言をします。
float upper, lower; int fahr, celsius;
lower = 0; upper = 300;
右辺を左辺に代入する。
a = b; a = a + 1;算術演算子「+, -, *, /, %」
「✕」、「÷」は、それぞれ、「*」、「/」で表わします。 整数型どうしの時は、「/」では切り捨てが行われることに 注意が必要です。「%」は整数どうしの演算で余りを 計算します。
celsius = 5 * (fahr - 32) / 9; q = a / b; r = a % b;関係・等値演算子
| 演算子と用例 | 意味 |
|---|---|
| a > b | aはbより大 |
| a >= b | aはb以上 |
| a < b | aはbより小 |
| a <= b | aはb以下 |
| a == b | aとbは等しい(論理的等価) |
| a != b | aとbは等しくない |
論理演算子
| 演算子と用例 | 用例 | 意味 |
|---|---|---|
| ! | !a | 論理的否定。真偽を反転させる。 |
| && | (a == b) && (c == d) | かつ。論理積を取る。 |
| || | (a == b) || (c == d) | または。論理和を取る。 |
#include <stdio.h>と書くのでした。
| 演算子と用例 | 意味 |
|---|---|
| printf("%d + %d = %d\n", a, b, c); | a, b, cを順に%dの箇所に 10進整数で出力する。 |
| printf("%3.0f %6.1f\n", fahr, celsius); | fahr, celsiuscを順に%fの箇所に 実数で出力する。fahrは、すくなくとも3文字幅 (小数点を込める)、小数点以下なし。celsiusは、 すくなくとも6文字幅、小数点以下3桁。 |
| printf("%c", c); | cを半角文字として出力する。 | putchar(c); | cを半角文字として出力する。 |
| 演算子と用例 | 意味 |
|---|---|
| scanf("%d", &a); | キーボードから読み込んだ10進整数を変数aに入れる。 |
| scanf("%d %d", &a, &b); | キーボードから10進整数をふたつ、空白を置いて 読み込む。 |
| scanf("%d", &a); | キーボードから読み込んだ10進整数を変数aに入れる。 |
| scanf("%f", &a); | キーボードから(10進の)単精度実数を読み込む。 |
| scanf("%lf", & a); | キーボードから(10進の)単精度実数を読み込む。 「%lf」は「エル・エフ」である。 |
| scanf("%lf", &a); | キーボードから(10進の)単精度実数を読み込む。 「%lf」は「エル・エフ」である。 |
| scanf("%c", &c); | cを半角文字として入力する。 | getchar( ); | cを半角文字として入力する。 |
いかなるプログラムも、上記の(i)連続 (ii)分岐・選択 (iii)繰り返し(ループ)の3種類をつかって構成することができます。
実際のプログラムでは、 1(i)1連続 (ii)分岐・選択 (iii)繰り返し(ループ)の3種類を 組み合わせて用いることになります。いくつかの例を、 以下に、 模式的に挙げてみることにします。
while (式)
{
文;
}
「式」が真であるかぎり、「文」を繰り返します。
論理値が真であるかの判定は、「文」を実行するまえにおこなわれます。「式」
はいつかは偽になるように設定しなければならなりません。
そのためには、「文」が「式」にふくまれる変数の状態
を変化させるようになっている必要があります。
そうでないと「無限ループ(どうにもとまらない状態)」に陥ってしまいます。gccの場合、そのときには、
C-c (強制終了)すればよいでしょう。
for (式 1; 式 2; 式 3)
{
文;
}
これは、つぎのwhileをつかったもの と等価です。
式 1;
while (式 2)
{
文;
式 3;
}
forループはwhileループと似ています。 前者では初期化、条件の判定、 ループカウンターの更新を一行に書くことができるので、 プログラムがひじょうにわかりやすくなります。
if (式1)
{
文 1;
}
else
{
文 2;
}
if 文では、括弧『(』、『)』のなかの「式 1」が真(true)のときに、「文 1」が実行される。
「式 1」が偽(false)のときには、if ブロックには入らず、elseブロックのほ
うに進み、「文 2」を実行します。
ここで、真というのは、「式 1」の値が0以外のときで、偽は「式 1」の値が0に
なるときです。elseブロックは省略することができます。
/* saikoro1.c */
/* 丁か半か? */
#include <stdio.h>
main()
{
int a, b, c;
printf("a: ");
scanf("%d", &a); /* ひとつめのサイコロの目の数 */
printf("\nb: ");
scanf("%d", &b); /* ふたつめのサイコロの目の数 */
c = a + b; /* サイコロの目の数の和 */
if ((c % 2) == 0) /* 目の数の和が偶数のとき*/
{
printf("%d, %d の「丁」\n", a, b);
}
else /* 目の数の和が奇数のとき*/
{
printf("%d, %d の「半」\n", a, b);
}
}
サイコロ賭博でよくある風景です。
ほんらい乱数などでサイの目をきめるべきです。
しかし、ここでは、いかさまの意図はありませんが、
、手動にしてあります。
また、丁・半の分類だけで、「ぞろ目」の場合をとくに区別はしていません。
(0) まず、プログラムは、主関数から始まる。 その後の流れは、つぎの (i)∼(iv) に依る。
(i) 基本的には上から下へ進む。
(ii) 選択や繰り返しに当った場合、より外側のブロック(先に遭遇したブロック)の指示に したがう。
(iii) つぎに、そのブロックの内でより外側のブロック(先に遭遇したブロック)の指示にしたがう。
(iv) 内側のブロックのコードが終われば、ひとつ外側のブロックに戻る。