苦C勉強会 E.6からE.9まで。

前回と同じく気になった点など。
E.6.1
scanf関数では、整数だけでなく、実数の入力も可能です。
ただし、実数の場合、%lf指定子を使用する必要があります。
printf関数では%f指定子だったので注意して下さい。

printfでは実数を出力する時%fでいいけどdoubleをscanfする時は%lfっていうポイントは抑えてある!
けどdoubleとint以外の型がでてきてないので書式指定子の説明が大幅に少ないのが残念。

E.6.2
おお、scanf駄目だよってかいてる!すごい!今の段階では解決出来ない orz

練習問題6
squareの意味がわからなかった。
#include <stdio.h>

int main(void) {
int price;
scanf("%d", &price);
printf("%d\n", (int)(price - price * 0.1));
printf("%d\n", (int)(price - price * 0.3));
printf("%d\n", (int)(price - price * 0.5));
printf("%d\n", (int)(price - price * 0.8));
}


E.7.1
ワンポイントに書いてあったけど、=と==は非常に間違いやすい。
コンパイラによってはif文の中で代入してると警告してくれたりするらしい。
定数を左側に書いておく事でこのエラーをふせぐ事が出来る。

int a = 10;
if (a = 10) ; // エラーじゃない


int a = 10;
if (10 = a) ; // エラー(10に代入する事は出来ない。)

という感じ。

E.7.2
値がひとしいか調べるには等値演算子を使う。(== !=)
他にも関係演算子(> < >= <=)や論理演算子*1がある。
Cの論理演算子短絡評価なんで気をつけよう。

練習問題7
ちょっとプログラム書取の方はスルー

E.8.3
swtichの中に入れていいのってint? char? long?
case文は257個まで使えるとANSI Cで定義されてるってググったら出てきた。
breakかかないとどんどん落ちていくのをfall throughっていうらしいですよ。


練習問題8
プログラム書取スルー
記述式に弱いかも。

E.9.1
C99なら
for(int i = 0; i < 10; i++) { /* something */ }
なんでiなのか?軽くググってWikipedia とか
http://blogs.wankuma.com/jitta/archive/2007/01/25/58555.aspx
がひっかかった。 けど一番納得行くのはこっちの説明だな!
language agnostic - Why are variables "i" and "j" used for counters?
そいうえばなんでfor文3つの欄があって、区切りが;なんだろ。誰か教えてください。

練習問題9
プログラム書取はスルー。一応前に書いた事はある。

*1:かつ &&) (または ||) (否定 !