ここから本文です

C言語のfor文のプログラムについての質問です。

gdk********さん

2019/5/2620:59:29

C言語のfor文のプログラムについての質問です。

C言語初心者なのですが、教科書にはfor文の書き方は
for( 初期化; 条件式; 次の一歩 )
{
繰り返す処理
}
と書いてあったのですが、階乗の計算のプログラムを作ったら下のソースでなら計算することができました。教科書の式通りにすると「5!=5」のようになってしまい、思うように計算してくれませんでした。
私が作ったソースは間違っていますか?また、正しいソースの書き方があれば教えていただきたいです。よろしくお願いします。

以下ソース。

/* 階乗を計算するプログラム */
#include <stdio.h>

int main(void)
{
int fact( int n );
int n;

printf("階乗を計算します。負の数を入力すると終了します。\n");
for(;;) /* 無限ループ */
{
printf("Input a number: ");
scanf("%d", &n );
if( n < 0 )
break;
printf("%d! = %d\n", n, fact(n) );
}
}

/* 階乗を計算する関数 */
/* nから順番に1までかけていく方法 */
int fact( int n )
{
int f, i;
for( f = i = n , n = 1 ; --i; )
f *= i;
return( f );
}
/* end of facti.c */

閲覧数:
50
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

yah********さん

2019/5/2621:39:30

int fact( int n ) {
int f, i;
for( f = i = n , n = 1 ; --i; )
/* ここ制御変数の制御は、評価順に依存する可能性があります */

f *= i;
return( f );
}

こんなかんじ。
int fact(int n) {
int r=1;

if (n>1) r=n*fact(n-1);

return(r)
}

または、
int fact(int n) {
int f=1, i;
for(i=1;i<=n;i++) f*=i;
return(f);
}

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

mei********さん

2019/5/2718:21:57

教科書の通り、下の様にすればfor文を使って、階乗作成のn回の繰り返しが出来ます。

for(int i=1;i<n;i++)//for( 初期化; 条件式; 次の一歩 )
{
i=i *(i+1);//繰り返す処理
}
C言語プログラムとしての形式の整備は、自分でやってください。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる