19章 定数のお話

http://www.geocities.jp/ky_webid/c/019.html

今まで「0」とか書いてたものは正確には整数定数というものだった模様。

要は変更の出来ない値のことを定数という。

文字列について

そして初めて出てきました文字"列"。

シングルクォートでくくる「文字」は何度か出てきましたが、ダブルクォートでくくる「文字列」は今回が初。

s = "abc";

とこのように文字列を扱う。また文字列同士の連結は

s = "abc""efg";

s = "abc"
    "efg";

といった感じで可能である。なるほど。

科学的記数法について

eを使って10のx乗を表現する記数法ですね。

3.141592 通常の表記
0.3141592e1 科学的記数法
314.1592e-2 科学的記数法
3141592e-6 科学的記数法

これらは全部、同じ値として扱われます。

さてこれらを踏まえた上で練習問題に取り掛かりましょう。

問題1

次のプログラムでは、期待した表示が行われません。正しく表示させるためには、「1000」をどう変更すればいいでしょうか。

int main(void) {
    printf( "%f\n", 1000 );  /* フォーマット指定子は変更不可! */
    return 0;
}

これは簡単!この章をちゃんと読んでれば迷うことは無いですね。1000にfをつけるだけです。

int main(void) {
    printf( "%f\n", 1000f );
    return 0;
}

と自信満々に実行したらコンパイルエラーorz

ええ、何故!?

どうやら小数点のある値じゃないとfはつけれないようです。しまった。

ってことで修正版

int main(void) {
    printf( "%f\n", 1000.0f );
    return 0;
}

ちゃんと表示されるようになりました。

問題2

次のプログラムは正しいでしょうか。

int main(void) {
    printf( "abcde"
        "fghij\n" );
    return 0;
}

文字列同士の連結では空白や改行は無視してくれるのでこれは問題なく動くはずです。

コンパイルしてみたらちゃんと動きました。正解ですね!

問題3

1234.56を科学的記数法で扱い、printf関数で表示させて下さい。

まんまですね。

int main(void) {
    printf("%e",1234.56);
    return 0;
}
1.234560e+003

何も迷う部分はありませんでした。

答え合わせ

と、思ったら問題の意味が逆でしたw

やっちゃった・・・。

以下正解例。

int main(void){
    printf( "%f\n", 123.456e1 );
    return 0;
}