ページ 11

c言語についての質問

Posted: 2015年10月29日(木) 21:00
by satoguti
はじめましてsatogutiといいます。
まだプログラミング初心者です。
学校のc言語の課題でどうしてもわからないことがあったので質問させていだだきました。
「ex = 1 + x1/1! + x2/2! + x3/3! + x4/4! + … を利用して ex を計算する関数 double myexp( double x ) を作成せよ. k=0, 1, 2, 3, … について xk/k! を加算してゆき, xk/k!<1.0e-06 となった時点で計算を打ち切るようにせよ.main から myexp を呼び出し, x=1.0, 2.0, …, 10.0 に対して myexp(x) の値を全体で 13 桁, 小数点以下 5 桁で表示せよ. 次のような結果が得られることを確認せよ.」という問題で

コード:

#include <stdio.h>

double myexp( double x ) ;	//プロトタイプ

int main( void )
{
    int s;
	double result,m;


	for(s=1;s<=10;s++)
	{
		m=(double)s;
		result = myexp(m);
		printf("\t%f\t%13.5f\n",m,result);
	}
    
    return 0;
}


double myexp( double x ) 
{
	int k;
	double y,z,t,T,eqs;
	z=1;
	t=1;
	eqs=1.0e-06;
	for(k=0;T>eqs;k++)
	{
		if(k>=1)
		{
			t=t*x;
			z=z*k;
			y=y+t/z;
		}
		else
		{
			y=1;
		}		
		T=t/z;
	}
	return y;
}
というプログラムを書いたのですが結果が
$ ./a
1.000000 2.71828
2.000000 0.00000
3.000000 0.00000
4.000000 0.00000
5.000000 0.00000
6.000000 0.00000
7.000000 0.00000
8.000000 0.00000
9.000000 0.00000
10.000000 0.00000
となりうまくいきません。
どうもmain関数のなかの2回目forループによってmyexpに入力されるはずのmがちゃんと入力されていない
様なのです。どうすればいいか教えてください。
よろしくお願いします。

Re: c言語についての質問

Posted: 2015年10月29日(木) 21:31
by みけCAT
satoguti さんが書きました:どうもmain関数のなかの2回目forループによってmyexpに入力されるはずのmがちゃんと入力されていない
様なのです。
本当ですか?ちゃんとprintfまたはデバッガなどで入力されていないことを確認しましたか?

とりあえず、myexp関数においてTが未初期化の不定の値のまま比較で参照されているのはまずいと思います。
このことにより、myexp関数から未初期化で不定の値のyが返される可能性があります。

Re: c言語についての質問

Posted: 2015年10月29日(木) 21:40
by satoguti
お返事ありがとうございました。
解決しました。
どうもforは関係なくTの初期値設定のしわすれでした。
こんな単純なミスで質問してしまい、申し訳ございませんでした。
今後はしっかりと確認してから質問します。

Re: c言語についての質問

Posted: 2015年10月29日(木) 21:50
by みけCAT
解決したのでしたら、「解決チェック」をお願いします。
解決チェックをするには、投稿画面の「送信」ボタンの右にある「解決!」にチェックを入れた状態で返信を投稿してください。