C言語関係掲示板

過去ログ

No.66. %e変換指定子


はじめまして。つい最近からこのホームページでC言語の勉強をさせて頂いている初心者です。とても分かりやすく、楽しく勉強させて頂いております。

さて、演習問題2−1の問1なのですが、ソース下の実行結果の中に、

d=2.548000e+02

とあり、解答のコード上では、

d=2.548e2

と記載があります。

私が自分で書いたソースコードでも解答と同様に記述したのですが、実行結果は、

d=2.548000e+002

と解答のコードと比べて指数部の0が一つ多く出力されてしまいます。
この指数部表示は使用しているコンパイラに依存する為にこのような違いが起こるのでしょうか。他の実行結果は同じ表示で出力されます。

又、なぜ実行結果は0を表示してしまうのでしょうか。
0を表示させないで表示させる方法はあるのでしょうか。

因みに私が使用している環境は以下の通りです。
OS:windous98 SecondEdition
コンパイラ:VisualC++6.0
      ※但し、DOS窓で「Vcvars32.bat」利用して使用しています。

基礎的な質問で申し訳ありませんが皆様ご解答お願い致します。


黒騎士さん、はじめまして。ホームページ利用してくださってありがとうございます。

> さて、演習問題2−1の問1なのですが、ソース下の実行結果の中に、
> d=2.548000e+02
> とあり、解答のコード上では、
> d=2.548e2
> と記載があります。
> 私が自分で書いたソースコードでも解答と同様に記述したのですが、実行結果は、
> d=2.548000e+002
> と解答のコードと比べて指数部の0が一つ多く出力されてしまいます。
> この指数部表示は使用しているコンパイラに依存する為にこのような違いが起こる
> のでしょうか。他の実行結果は同じ表示で出力されます。

この問題は、定数の記述の仕方を確認してもらう問題ですね。
とりあえず、2.548×10^2 をdに設定してもらおうと思って作った問題です。
今思えば、コメントは 
/* 実数定数 2.548の100倍(指数形式)設定 */ ではなく、
/* 実数定数 2.548×10^2 (指数形式)設定 */ にしておけばよかったな、と思っています。

さて、お尋ねの件ですが、これはやはり指数部の表示の仕方がコンパイラに依存する
ためだと思います。私の環境(Win98SE)で LSIC Turbo-C++V4 C++BuilderV4 BC++5.5
で確認をしたところ、いずれも d=2.548000e+02 でした。

手持ちの「ANSI C言語辞典」平林雅英著 技術評論社によると、
printf関数の変換指定子「%e」は、
  指数は,最低2桁である.値が0の場合の指数は「00」となる.
とありますので、VC++6.0では3桁で解釈しているのだと思います。

> 又、なぜ実行結果は0を表示してしまうのでしょうか。
> 0を表示させないで表示させる方法はあるのでしょうか。

上記から、0を表示させない方法はないということになりますね。


お忙しい中、丁寧な御解答有難う御座いました。

やはりコンパイラに依存するのですね。

実は掲示板に書き込むのも初心者ですので、いろいろ不備があるかもしれませんが今後とも宜しくお願い申し上げます。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.11.15
Copyright(c) 2000-2002 TOMOJI All Rights Reserved