※ ChatGPTを利用し、要約された質問です(原文:C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに)
C言語の勉強でfor文と戻り値を使った階乗の計算について困っています
このQ&Aのポイント
C言語の勉強でfor文と戻り値を使った階乗の計算方法がわかりません。
階乗とは数字を1つずつ減らしながら掛け合わせたもので、例えば5の階乗は5×4×3×2×1=120です。
プログラムではmain関数で整数の入力を受け取り、kaijyo関数で階乗を計算し、その結果を表示するようにします。
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になってしまいます。
どこが間違っているのか分からずに困っています。
よかったら教えてください。
よろしくお願いします。
カテゴリを間違ってしまっていたらすみません。
お礼
的確な回答をありがとうございました。 ゆっくり見直してみたら解けました。 回答していただきありがとうございました。