以下のような問題がわかりません。調べてみてもわからなかったので教えていただきたいですm(_ _)m
実数aと整数nを引数とし、aの小数点以下第n位の数字を戻り値として返す関数 float kurai(float a, int n) を作成し、その動作を確認せよ。
<例>
0.2435 ←入力
2 ←入力(小数点以下第2位を指定)
4 ←出力
小数点n位を指定して表示する関数がわかりません
Re: 小数点n位を指定して表示する関数がわかりません
似たような問題として「ある整数の,10の位の値とか1の位の値を得る」であればできるのでしょうか?
上記問題ができるなら,
今回の問題に関しては実数aをnに合わせて10倍とか100倍とかしたものから狙いの桁を取得すれば良いように思います.
上記問題ができるなら,
今回の問題に関しては実数aをnに合わせて10倍とか100倍とかしたものから狙いの桁を取得すれば良いように思います.
Re: 小数点n位を指定して表示する関数がわかりません
3桁の自然数で百の位、十の位、一の位をそれぞれ表示するというのはできたのですが、小数になってしまうとわからなくなります。
今回の問題だと、(a*10^n)%(10^(n-1))のような考え方で良いのでしょうか、初心者なもので無知で申し訳ないです。。。
今回の問題だと、(a*10^n)%(10^(n-1))のような考え方で良いのでしょうか、初心者なもので無知で申し訳ないです。。。
Re: 小数点n位を指定して表示する関数がわかりません
<math.h> に floor という関数があり、浮動小数点数の
小数部分を 0 にした値を取得できます。
a -= floor(a); で、a の整数部分が 0 になりますから、
floor(a * 10) が元の値の小数第1位の値となります。
最初に与えられた a に 10 を (n-1)回掛けるか、
または、a に 10 の (n-1)乗を掛けると、
小数第n位が小数第1位になります。
小数部分を 0 にした値を取得できます。
a -= floor(a); で、a の整数部分が 0 になりますから、
floor(a * 10) が元の値の小数第1位の値となります。
最初に与えられた a に 10 を (n-1)回掛けるか、
または、a に 10 の (n-1)乗を掛けると、
小数第n位が小数第1位になります。
Re: 小数点n位を指定して表示する関数がわかりません
(a*10^n) で,1の位に目的の値がくる
→ この時点で小数点以下の部分は要らないので,適当に整数化してよい
→ 整数の1の位を取得できるならクリア
→ この時点で小数点以下の部分は要らないので,適当に整数化してよい
→ 整数の1の位を取得できるならクリア
Re: 小数点n位を指定して表示する関数がわかりません
・CやC++では,^は累乗ではありません.
・yの計算が 整数の1の位を取得 にはなっていないように思います.
・yの計算が 整数の1の位を取得 にはなっていないように思います.
Re: 小数点n位を指定して表示する関数がわかりません
フォーラムルールは読みましたか?
どのように解決したのかを書いてください。
こんな解もあるということで。
実行結果
どのように解決したのかを書いてください。
こんな解もあるということで。
#include <stdio.h> // sprintf
#include <string.h> // strchr
float kurai(float a, int n)
{
char buf[100], *p;
sprintf(buf, "%.*f", n + 5, a);
return strchr(buf, '.')[n] - '0';
}
int main(void)
{
float a = 3.1415927;
printf("%10.7f\n", a);
for (int n = 1; n <= 7; n++)
printf(" %.0f", kurai(a, n));
putchar('\n');
return 0;
}