変数型をdoubleにするとプログラムがうまく実行されない
Posted: 2015年3月10日(火) 22:46
初めまして。
私は最近趣味でプログラミングを学んでいるものです。
つい昨日「苦しんで覚えるc言語」(以下苦cと略します)というc言語入門向けのサイトを利用してc言語の勉強を始めました。
変数型についてわからないことがあるので皆様のお力をお借りしたくここで質問させていただきます。
OSはwindows8.1です。
コンパイラはBorland C++で確認しております。
苦cの中の10章「入力チェック」という節で、円の半径を入力して円の面積を求めさせるプログラム
が紹介されています。
上のプログラムの中で、rは整数型となっています。しかし、円の半径は整数とは限りません。そこで、このプログラムを改良するべく、
としてみました。しかし、EasyIDEC上でコンパイルして実行およびBorland C++でコンパイルし実行した結果、
正負にかかわらず半径としてどのような値を入力しても、どうやら「rに0という数値が記憶されたことになってしまっている」ようでして、
r、sの両方の値として0.000000が出力されてしまいます。
これは問題です。
しかし、ここで試しにr、sの変数型をdoubleからfloatに変更したところ、意図したとおりにプログラムが動作するようになりました。
このことを踏まえて質問をさせていただきます。
上に書いたような問題を引き起こした、または解決したと考えられる、変数型doubleとfloatの違い、
もしくはプログラムの根本的な間違いについてご教授ください。
私は最近趣味でプログラミングを学んでいるものです。
つい昨日「苦しんで覚えるc言語」(以下苦cと略します)というc言語入門向けのサイトを利用してc言語の勉強を始めました。
変数型についてわからないことがあるので皆様のお力をお借りしたくここで質問させていただきます。
OSはwindows8.1です。
コンパイラはBorland C++で確認しております。
苦cの中の10章「入力チェック」という節で、円の半径を入力して円の面積を求めさせるプログラム
#include <stdio.h>
int main(void)
{
int r;
double s;
do {
printf("半径?:");
scanf("%d",&r);
} while (r < 0);
s = r * r * 3.14;
printf("面積は %f です。\n",s);
return 0;
}
上のプログラムの中で、rは整数型となっています。しかし、円の半径は整数とは限りません。そこで、このプログラムを改良するべく、
#include <stdio.h>
#define pi (3.14159)
int main(void)
{
double r = 0, s;
/*rの初期値を0としたのは、後のdo-while文で警告メッセージ表示および再入力をさせるためです*/
/*input data*/
do {
if (r != 0) printf("半径は非負の実数\n");
printf("半径=");
scanf("%f",&r);
} while (r < 0);
/*calculation*/
s = r * r * pi;
/*output data*/
printf("半径 %f の円の面積は %f \n", r, s);
return 0;
}
正負にかかわらず半径としてどのような値を入力しても、どうやら「rに0という数値が記憶されたことになってしまっている」ようでして、
r、sの両方の値として0.000000が出力されてしまいます。
これは問題です。
しかし、ここで試しにr、sの変数型をdoubleからfloatに変更したところ、意図したとおりにプログラムが動作するようになりました。
このことを踏まえて質問をさせていただきます。
上に書いたような問題を引き起こした、または解決したと考えられる、変数型doubleとfloatの違い、
もしくはプログラムの根本的な間違いについてご教授ください。