- 締切済み
C言語について質問です。
C言語について質問です。 問題:繰り返し命令と階乗の計算 カウンタ用変数nの値を1から10まで1ずつ変化させて、その値を階乗用変数Kiに順次、掛け算していき、10の階乗を求めよ。 ki=1×2×3×4×5×6・・・・・×9×10 <==10! また、1/n!は小数点以下10桁まで求めよ。 実行結果は n n! 1/n! 1 1 1、0000000000 2 2 0、5000000000 3 6 0、1666666667 4 24 0、0416666667 5 120 0、0083333333 6 720 0、0013888889 7 5040 0、0001984127 8 40320 0、0000248016 9 362880 0、0000027557 10 3628800 0、0000002756 続行するには何かキーを押してください、、、、、、 上のように実行結果が出るようにプログラミングしたいのですがわからないので 分かる方よろしくお願いします。 ちなみに今まで習ってきたのは、if文、switch文、do文、while文、for文なんですがこのプログラミングは、for文でおねがいします。 長文失礼しました。
- garapagps51
- お礼率0% (0/4)
- 高校
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
みんなの回答
制御ループの前に、精度確保出来ていますか?出題の意図は、ケタ落ちと思うぞよ。
関連するQ&A
- C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに
C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに困っています。 以下の点に留意して、階乗を計算するプログラムを作成する。 階乗とは、数字を1つづつ減らしながら掛け合わせたものです。つまり 5の階乗:5×4×3×2×1=120 3の階乗:3×2×1=6 となります。 main内 1)整数型の変数kazu、kekkaを宣言する。 2)“階乗を計算します。”を表示する。 3)実行例と同様の表示になるように、“整数を入力してください”を表示し、入力された値を、変数kazuに読み込む。 4)作成する関数名は、kaijyoとし、kazuを引数とし、戻り値をkekka に代入する。 6)“○の階乗は ○です。”と表示する。 関数kaijyo内 1)引数を変数名xとする。 2)整数型の変数i、valを宣言する。 3)計算結果をvalに入れていくために、valを初期化する(下記注意参照)。 4)iをカウンターとするfor文と複合代入演算子を使って階乗を計算する。 5)valの内容が戻り値となるようにする。 注意:階乗を計算するために、for文の中で複合代入演算子を使って階乗を計算します。しかし、for文に入る前のvalの初期化には注意が必要です。0に何を何回かけても0だと言うことを思い出してください。 という問題です。 それで私は下の通りに作りました。 #include <stdio.h> int kaijyo(int x); void main(void) { int kazu,kekka,kaijyo,sum; printf("階乗を計算します。\n"); printf("整数を入力してください"); scanf("%d",&kazu); kekka=kaijyo(kazu); printf("%dの階乗は%dです。",kazu,kekka); } int kaijyo(int x) { int i,val; val=1; x=1; for(i=1;i<=val;i++){ x=x*i; } return val; } しかし、メイクして実行してもどの階乗でも256になってしまいます。 どこが間違っているのか分からずに困っています。 よかったら教えてください。 よろしくお願いします。 カテゴリを間違ってしまっていたらすみません。
- ベストアンサー
- その他(学問・教育)
- プログラムについて(C言語)
#include<stdio.h> int main() { int i,n,total; for(;;){ /* 無限ループ*/ printf("整数n?"); /* nの値の表示 */ scanf("%d",&n); /* ifとbreakを使った終了判定 */ if(n<0)break; total=1; for(i=1;i<=n;i++){ printf("i=%d ",i); total*=i; /* total←total*i(階乗の計算) */ } printf("total=%d\n",total); /* totalの値(結果)の表示 */ } printf("Thanks\n"); /* 終了メッセージの表示 */ return(0); } これは階乗を求めるプログラムなのですが、i++ではなくi--をつかって求める場合 どのように変更すればよいでしょうか? for(i=1;i<=n;i++){ あたりをいろいろ弄ってみたのですが、求めてる結果は得られませんでした
- ベストアンサー
- C・C++・C#
- 入れた数字の回数だけ、繰り返して足し算をするプログラミング
こんにちは、初質問ですが、皆さんの知恵を借りたいと思います。よろしくお願いします! C言語はまったくの初心者です。下のプログラミングはどうやって作ったらいいのか、全然わかりません。 プログラミング:n1とn2の二つの数字を入力させ、n1×n2の結果を掛け算を使わずに、足し算だけで表示させる。 たぶん繰り返し文を使って、n2回n1の足し算すると思いますが、whileだけで作れますか?あるいはforを使ったほうがいいですか?できればプログラミングを書いてください。 ぜひよろしくお願いします!!!
- 締切済み
- C・C++・C#
- C言語の問題です!!
C言語の問題です。よろしくお願いします。 A: 次の手順で処理を行うプログラムを作成しなさい. ・int型の変数n1,n2に数値9,3を代入する. ・変数n1,n2の値を"n1=xxx, n2=xxx"のように表示する. ・変数n1の値をn2倍にし,変数n2の値に2を加算する. ・変数n1,n2の値を表示する. ・変数n1とn2の互いの値を入れ替える. ・変数n1,n2の値を表示する. B: 本日の為替相場は,80円/ドル(int型の変数rate_dに格納)と114円/ユーロ(rate_e)である. ドル(usd)を与えて,ユーロ(euro)に変換するプログラムを作成せよ. ただし,小数点以下は切り捨てとする.
- ベストアンサー
- C・C++・C#
- C言語で電卓を作成する。修正お願いします。
以下のプログラムは電卓のプログラムです。 http://codepad.org/n47BkpXa このプログラムの変数の宣言はあえてint型で行っています。 コレを変えずに上手く計算結果が出せるようにしたいのですが、どこを修正すれ良いですか? ご指導お願いします。 ・問題点 例:10/4*4などの最初に割り算が入ると計算結果がおかしくなってしまいます。 10/4*4=8 int型なので小数点が切り捨てられて結果が8になってしまいます。 コレをint型を使用して10になるようにしたいのですがご指導お願いします。 多分イメージではif文で(op=/)&&(op+1=*)が出たら掛け算を始めにするとかだと思います。
- ベストアンサー
- C・C++・C#
- C++でのeの近似値の求め方
問題はeの値は次の近似式で求めることができる。 e=1+1/1!+1/2!+1/3!+...+1/(n-1)!+1/n! nの値を12としてeの近似値を求めるプログラムを作成せよ。 <出力形式> n n! 1/n! e 誤差 1 1 1.0000000000 2.0000000000 0.7182818285 2 2 0.5000000000 2.5000000000 0.2182818285 . . . . . 12 <小数点以下10桁まで表示> が問題なんです。 ヒントとして <1から25までの合計> #include<iostream.h> #include<imanip.h> main() { int k,sum; sum=0; for(k=1;k<25;++k) {sum+=k; cout<<setw(5)<<k <<setw(7)<<sum<<"\n";} return 0; } これと <nの階乗を求める> #include<iostream.h> #include<imanip.h> main() { int n,k,ki(1); cout <<"nの値は?==>";cin>>n; for (k=1;k<=n;++k) { ki*=k; cout<<setw(5)<<k <<setw(12)<<ki<<"\n";} return 0; } がヒントとして与えられているんです。この2つをうまく使ったら良いよって言われたんですけどよく考えてもわからないんです。どなたかこの問題を解ける人がいたら教えてください。お願いします。
- 締切済み
- C・C++・C#