/*から*/までが注釈//から行末までという形も可(bcc32でも使用可能)
"〜")で囲んだもの
\n, \a)
(\n, \a)
など特別な表記Q. 文字列リテラルの中に二重引用符(")や、
バックスラッシュ(\)を入れたい時はどうするか?
Q. printf関数でパーセント記号(%)そのものを出力したい時はどうするか?
箱
scanf関数の問題点
次のような問題点があるため、実用的なプログラムでは使うことは少ない。
(例えば、fgets関数とsscanf関数の組み合わせを使う。)
getchar関数など)と組み合わせて使うと、
直観に反する動作をする。
つまり、scanf関数の使用は、次のように自主規制すると良い。
scanf関数単独で使用し、他の入力関数と併用しない。%dや%lfという変換指定だけを使う。| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| 変数 | x,iなど、教科書 p.82も参照 | |
| 整数リテラル | 1,0,100,0xffなど | |
| 文字列リテラル | "Hello!\n"など | |
| 関数呼出し | 関数名 ( 式 , ... , 式 ) | printf("Hello\n")など | 
| 単項演算子 式 | 単項演算子は +,-,!,~,&など | |
| 式 二項演算子 式 | 二項演算子は +,-,*,/,=,など | |
| ( 式 ) | 演算の順番を指定するためカッコで囲んだもの | 
| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| 式文 | 式 ; | 式は通常、代入式か関数呼出しのように 副作用があるもの | 
| return文 | return 式 ; | 式の周りにカッコは必要なし | 
/演算子/演算子は両オペランドがint型のとき、
結果もint型(つまり切り捨て)になる。
つまり、1/10は 0.1ではなく、0になる。
Q. 次のプログラム(の断片)のうち、0.1と表示されるものを選べ。
| 1 | 2 | 3 | 4 | 5 | 
| 
int z = 1/10;
printf("%d", z);
 | 
double z = 1/10;
printf("%f", z);
 | 
double z = ((double)1)/10;
printf("%f", z);
 | 
double z = 1/((double)10);
printf("%f", z);
 | 
double z = (double)(1/10);
printf("%f", z);
 | 
double型と暗黙の型変換double型を使う。
(floatというdoubleよりも精度が低い型もあるが、あまり使われない。)intとdoubleが混じっている時は、
intがdoubleに暗黙に型変換される。
| int    | double | |
|---|---|---|
| printf | %d | %f | 
| scanf | %d | %lf | 
| 説明 | 例 | 出力 | 
|---|---|---|
| 桁数を揃える | printf("[%3d]", 1) | [  1] | 
| 先頭を0で埋める | printf("[%03d]", 1) | [001] | 
| 小数点以下の桁数を指定する | printf("[%.3f]", M_PI) | [3.142] | 
| 16進数で表示する | printf("[%x]", 127) | [7f] | 
| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| 浮動小数点数リテラル | 3.14, 2.0, 6.02e23, 6.626e-34など、(教科書 p.27) | |
| キャスト | ( 型 ) 式 | 明示的な型変換(教科書 p.31) | 
{〜}で囲んで、
文法上一つの文として扱える。
if (hour < 12) if (hour < 6) printf("A"); else printf("B");
という文では elseはどちらのifと対応するか?
つまり、どちらの文と等価か?
| 近くの ifなら… | 遠くの ifなら… | 
| 
if (hour < 12) {
    if (hour < 6) {
        printf("A");
    } else {
        printf("B");
    }
}
 | 
if (hour < 12) {
    if (hour < 6) {
        printf("A");
    } 
} else {
    printf("B");
}
 | 
&&や||は左のオペランドから評価を行ない。
結果がわかった時点で残りのオペランドは評価しない。
if ( a > 0 && log(a) > -1) ... if ( a < 0 || sqrt(a) < 2) ...どちらの例も
a<0のとき右オペランドは計算されないのでエラーは発生しない。
| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| if文 | if ( 式 ) 文 | (教科書 p.36) | 
| if〜else文 | if (式 ) 文 else 文 | (教科書 p.38) | 
| 複合文(ブロック) | { 宣言 ... 文 ... } | (教科書 p.50) | 
| switch文 | switch ( 式 ) 文  | (教科書 p.54) | 
| ラベル付き文 | case 整数リテラル : 文  | (教科書 p.54) | 
| default : 文  | ||
| break文 | break ; | (教科書 p.55) | 
| for (i = 0 ; i < n ; i++) ... | iが 0 から n-1 まで n 回繰り返す | |
| for (i = 1 ; i <= n ; i++) ... | iが 1 から n まで n 回繰り返す | |
| for (i = n ; i > 0 ; i--) ... | iが n から 1 まで n 回繰り返す | |
| for (i = n-1 ; i >= 0 ; i--) ... | iが n-1 から 0 まで n 回繰り返す | 
| A | B | C | 
|---|---|---|
| 
if (hour < 12)
   printf("%d時", hour);
   printf("%d分", min);
 | 
if (hour < 12) {
   printf("%d時", hour);
   printf("%d分", min);
}
 | 
if (hour < 12) {
   printf("%d時", hour);
}
printf("%d分", min);
 | 
if文やwhile文, for文は、文法上必要のないところでも、{, 
}で囲んでブロック(複合文)にして、間違いが起こる可能性を減らすべきである。
| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| 式 ? 式 : 式 | ?:は三項演算子とも呼ばれる(教科書 p.48) | |
| 式 後置演算子 | 後置演算子は ++,--のみ(教科書 p.66) | 
x++と++xの違いは?
| 分類 | 一般形 | 補足説明 | 
|---|---|---|
| do〜while文 | do 文 while ( 式 ) ; | (教科書 p.60) | 
| while文 | while ( 式 ) 文 | (教科書 p.68) | 
| for文 | for ( 式 ; 式 ; 式 ) 文 | (教科書 p.74) | 
| continue文 | continue ; | (教科書 p.82) |