• 締切済み

C言語の課題なんですが、わかりません。

問題は、for文を使って10の階乗を計算し、実行結果が10の階乗は3628800です。 誰か解りましたら教えて下さい。

みんなの回答

noname#129118
noname#129118
回答No.4

コンパイラがないので、バグ含みで記載します。 void main () { int i,j,k; long l_data; /* init */ l_data = 1; j = 10; /* stop of max-value */ k = 1; /* start of min-value */ /* loop of 1..10 */ for (i=k;i<j;i++) { l_data *= i; } /* output */ printf(%d,l_data); } ● ループ処理は、while()でも構いません ● l_dataは、精度保証できること ● l_dataには、前回値×ループカウンタを格納すること ・・・で動作するかな?(単純なアルゴリズムでも、コンパイラがないと・・・)

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

1の階乗から10の階乗までを求める式をノートに書いてみると、 for文をどのように使えばよいかがわかるかもしれません。

全文を見る
すると、全ての回答が全文表示されます。
  • v6arxzmd
  • ベストアンサー率32% (16/49)
回答No.2

10の階乗の答えはそれで間違っていませんよ? ループの回数や条件を間違っていませんか? for文の最後にprintfを使って1ループごとの値を表示させてみるとわかりやすいですよ。 蛇足ですが先の回答者が言われているように、もう少し詳しく説明しないと回答がしづらいorできないので注意されてください。

全文を見る
すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.1

何処が判らないのか、補足してください。 ・階乗の意味 ・for文の使い方 ・プログラムの作り方 ・etc

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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文でおねがいします。 長文失礼しました。

  • 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言語の課題

    1、整数型の変数を2個だけ使い、キーボードから5個の整数を読み込み負の整数のみの和を表示プログラムを作れ 2、1、の問題について使える変数を3個に増やしたうえでwhile文を使ったプログラムを作れ 3、1、の問題について使える変数を3個に増やしたうえfor文を使ったプログラムを作れ 1を作ろうとするとかなり長くなってしまうのです… ヒントでもいいので教えてください。

  • C言語の課題について。教えてください

    次のプログラムに3重ループ(for)を使ってプログラムを作成したい。 コンパイルの実行結果から考えて、(1)(2)(3)の中に適切な数値や式等をいれよ。 #include<stdio.h> main() { int a,b,c; for(a=1;a<=3;a++){ (1) for(b=1;b<=2;b++){ (2) for(c=1;c<=3;k++){ (3) } コンパイルした後の実行画面 abbc c c d abbc c c d abbc c c d 解答欄 (1) (2) (3)

  • プログラムについて(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言語の課題について

    設問内容として「適当な正整数を読み込んで、12,98,5,34,119,77,26,3の8個の整数の中から、最も近い数を探しましょう。」という問題で,自分でやってみたプロクラミングなのですが、 /*kadai2*/ #include <stdio.h> main(){ int x,input,min,mB,a[]={12,98,5,119,34,77,26,3},b[8]; for(x=1;x<8;x++){ b[x]=a[x]-input;} if(x<b[x]){b[x]=-b[x];} for(x=1;x<8;x++){if( min>b[x] ){ min=b[x]; mB=x;} } printf("%d",a[mB],b[x]); } 上記は自分が考えたプログラミングです。あとこの問題から正しいプログラムを実行した場合例として31を入力した時に 「$./a.exe 適当な正整数を入れてね?31 31に最も近い数は4番目の数34です。」 という結果になるようです。 この設問のプログラミングがわかる人はできるだけ早急に教えてくださいよろしくお願いします。

  • C言語の質問

    「n の階乗 n! の計算を再帰式で表現したCプログラムを作成し、n=10, n=11, n=12 の出力結果を書きなさい。 プログラムではnの値は1から12までとせよ。 入出力については問わない。」です。お願いします。

  • C言語の課題で助けてください2

     以前に質問をしたものです。 C言語の課題で毎年10万円ずつ貯金した時、年利が1年複利で1%の場合で 10年たつと貯金残高はいくらになるかという課題です。 ヒント:ループ(for文)、残高変数はdoubleを利用する。 答え:10年後には1056683.466653 となるようです。 というものなのですが、自分なりに試行錯誤してみたのですが答えが合いませんでした。どうか、よろしくお願いします。 みなさんのご指摘通りに自分なりに頑張ってみたものをアップします。 一年目だけは計算が合うのですが、2年目からおかしくなってしまいます。考えてみたのですがアルゴリズムが上手く作れません。 どうか、添削お願いいたします。 #include<stdio.h> int main(void) { int year; double nenri; double zandaka; double total; zandaka=100000; nenri= 0; total=0; for (year=1;year<=10;year++){ nenri = zandaka*0.01; total +=zandaka + nenri; } printf("貯金残高は %f 円です\n",total); return 0; }

  • 再帰について(C言語)

    今、再帰処理を勉強しています。 しかし、以下のプログラムがどうしても理解できません。 流れ的には一体どういう手順になっているのでしょうか? return i * fact( i - 1 )の部分を考えると頭が こんがらがってしまいます。 #include <stdio.h> int main( void ){  printf("5の階乗は %d です", fact(5) );  return 0; } int fact( int i ){  if( i == 1 ) return 1;  else return i * fact( i - 1 ); } --------実行結果---------- 5の階乗は 120 です

  • C言語の課題で助けてください

    C言語の課題で毎年10万円ずつ貯金した時、年利が1年複利で1%の場合で 10年たつと貯金残高はいくらになるかという課題です。 ヒント:ループ(for文)、残高変数はdoubleを利用する。 答え:10年後には1056683.466653 となるようです。 というものなのですが、自分なりに試行錯誤してみたのですが答えが合いませんでした。どうか、よろしくお願いします。