ページ 11

独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 10:51
by パクパク
[1] 質問文
 [1.1] 自分が今行いたい事は何か

質問が二つあります。ご教授お願い致します。
(1)独習Cの5章、前章の理解度チェック(データ型、変数、式の詳細)にて、Cコンパイラは次の数値にどのようなデータ型を割り当てるか、という問題があるのですが、その中のC番(数値: 123.45)がわかりません。私はfloat型と答えたのですが、正答はdouble型でした。どちらでも表示出来たので、最小の型を割り当てると思ったのですが、認識が間違っているでしょうか?どうして、また、どのようにdouble型に割り当てられるのか、返信お願い致します。

(2)上記と同じ前章の理解度チェックにて、「ループ制御変数をdouble型にキャストしたものを、sqrt()関数の引数として使用する、1~10までの平方根を表示するプログラム」という問題があるのですが、下記の[1.2] ではなく、

コード:

for(num = 1; num <= 10; num++)
		printf("%d の平方根は %lf です。\n", num,(double)sqrt(num);//
と書いたところ、同様の結果が得られました。その違いは何かをお教えください。


 [1.2] どのように取り組んだか(プログラムコードがある場合記載)

コード:

#include <stdio.h>
#include <math.h>

int main(void)
{
	int num;

	printf("1~10までの平方根を表示するプログラム\n");

	for(num = 1; num <= 10; num++)
		printf("%d の平方根は %lf です。\n", num,sqrt((double) num) );
	
	return 0;
}

[2] 環境  
 [2.1] OS : Windows
 [2.2] コンパイラ名 : VC++ 2010 Express

[3] その他
 ・Cが始めて勉強する言語です。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 11:55
by softya(ソフト屋)
(1)123.45と書かれていたのなら定数でdouble型ですが、123.45fと書かれていたのなら定数でfloat型です。
そういう定数の違いも考慮しろということでは?

(2)sqrtの戻り値はdoubleなのでキャストの必要はありません。
逆にsqrtの引数はdoubleなのでnumが暗黙の型変換でdoubleに変換されています。
キャストを省略しているのでコンパイラによってはワーニングが出ると思います。
VC++ 2010 Expressって出てませんか?

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 12:34
by パクパク
返信ありがとうございます。

(1)「定数の使い方」という項目を見直してみると、”浮動小数点数はデフォルトでdoubleと見なされます”という記述がありました。申し訳ありません。


(2)にて、オーバーロードされた関数sqrt()の複数のインスタンスが引数リストと一致します、と表示されました。
正直、オーバーロード(多重定義?)もインスタンス(実体?)もよくわかりませんでした。

しかしながら、キャストを書いた場合警告が消えたので、上記は型キャストの事を指しているのでしょうか?

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 12:48
by softya(ソフト屋)
パクパク さんが書きました:(2)にて、オーバーロードされた関数sqrt()の複数のインスタンスが引数リストと一致します、と表示されました。
正直、オーバーロード(多重定義?)もインスタンス(実体?)もよくわかりませんでした。
それは、コンパイラがC++として動作しています。
ソースファイルの拡張子を.cにしてください。そうすればC言語としてコンパイルされるのでエラーメッセージが変わります。
→ 新規追加でmain.cファイルを作り内容をコピペして、今のmain.cppを削除します。
あるいはコンパイラオプションを変更する方法もあるのですが、そちらはcppファイルでcコンパイルすことになるので間違いやすくオススメできません。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:08
by パクパク
http://uploda.cc/img/img50de6bfc9b716.png

拡張子をcにしているはずなんですが、C++ファイルになっているのでしょうか。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:11
by softya(ソフト屋)
画像は鍵がかかってて見れませんが、コンパイルエラーは間違いなくC++のものです。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:16
by パクパク
申し訳ありません。
鍵は「4021」です。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:31
by softya(ソフト屋)
VC++2010はC++がデフォルトなのかも知れませんね。
プロパティのC/C++の詳細設定で、言語としてC言語を選択してみてください。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:42
by パクパク
http://uploda.cc/img/img50de6bfc9b716.png

鍵は上記と同じです。
問題無い(エラーは出ていますが)……のでしょうか?

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 13:46
by softya(ソフト屋)
プロパティの方を見せてください。
問題がないかと言われたらワーニングは致命的なバグの原因になることがありますが、無闇にキャストするのもバグの原因になります。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 14:01
by パクパク
http://dixq.net/forum/gallery/image.php ... age_id=542

わたくしのアルバムに画像をアップロードしてみたので、宜しければご覧下さい。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 14:35
by softya(ソフト屋)
うまくアップロードされていないようです。

Re: 独習C、5章の前章の理解度チェックの2のCについて(その他、質問一件)

Posted: 2012年12月29日(土) 14:59
by パクパク
返信ありがとうございます。

(1)(2)共に疑問点に答えて頂きましたし、エラーも出ていないので、解決!にさせて頂こうと思います。

アップロードした画像は他の端末から確認してみます。

お教え頂きありがとうございます。