小数点n位を指定して表示する関数がわかりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ウパー

小数点n位を指定して表示する関数がわかりません

#1

投稿記事 by ウパー » 7年前

以下のような問題がわかりません。調べてみてもわからなかったので教えていただきたいですm(_ _)m

実数aと整数nを引数とし、aの小数点以下第n位の数字を戻り値として返す関数 float kurai(float a, int n) を作成し、その動作を確認せよ。
<例>
0.2435 ←入力
2  ←入力(小数点以下第2位を指定)
4 ←出力

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 小数点n位を指定して表示する関数がわかりません

#2

投稿記事 by usao » 7年前

似たような問題として「ある整数の,10の位の値とか1の位の値を得る」であればできるのでしょうか?

上記問題ができるなら,
今回の問題に関しては実数aをnに合わせて10倍とか100倍とかしたものから狙いの桁を取得すれば良いように思います.

ウパー

Re: 小数点n位を指定して表示する関数がわかりません

#3

投稿記事 by ウパー » 7年前

3桁の自然数で百の位、十の位、一の位をそれぞれ表示するというのはできたのですが、小数になってしまうとわからなくなります。
今回の問題だと、(a*10^n)%(10^(n-1))のような考え方で良いのでしょうか、初心者なもので無知で申し訳ないです。。。

かずま

Re: 小数点n位を指定して表示する関数がわかりません

#4

投稿記事 by かずま » 7年前

<math.h> に floor という関数があり、浮動小数点数の
小数部分を 0 にした値を取得できます。

a -= floor(a); で、a の整数部分が 0 になりますから、
floor(a * 10) が元の値の小数第1位の値となります。

最初に与えられた a に 10 を (n-1)回掛けるか、
または、a に 10 の (n-1)乗を掛けると、
小数第n位が小数第1位になります。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 小数点n位を指定して表示する関数がわかりません

#5

投稿記事 by usao » 7年前

(a*10^n) で,1の位に目的の値がくる
→ この時点で小数点以下の部分は要らないので,適当に整数化してよい
→ 整数の1の位を取得できるならクリア

ウパー

Re: 小数点n位を指定して表示する関数がわかりません

#6

投稿記事 by ウパー » 7年前

コード:

float kurai(float a,int n){
	int x,y;
	x=a*(10^n);
	y=x%10^(n-1);
	return y;
	}
	
main(){
	float a;
	int  n;
	int ans;
	scanf("%f",&a);
	scanf("%d",&n);
	ans=kurai(a,n);
	printf("%d\n",ans);
		}
このようにしてみたのですが、コンパイルがうまくいっても出力された値に間違いが在ります。。。どこが間違っているのでしょうか?

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 小数点n位を指定して表示する関数がわかりません

#7

投稿記事 by usao » 7年前

・CやC++では,^は累乗ではありません.
・yの計算が 整数の1の位を取得 にはなっていないように思います.

ウパー

Re: 小数点n位を指定して表示する関数がわかりません

#8

投稿記事 by ウパー » 7年前

解決しました!みなさんアドバイスありがとうございました!m(_ _)m

かずま

Re: 小数点n位を指定して表示する関数がわかりません

#9

投稿記事 by かずま » 7年前

フォーラムルールは読みましたか?
どのように解決したのかを書いてください。

こんな解もあるということで。

コード:

#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;
}
実行結果

コード:

 3.1415927
 1 4 1 5 9 2 7

返信

“C言語何でも質問掲示板” へ戻る