• ベストアンサー

初心者なのでわけが分かりません^^;

大学に入って初めてプログラミングを習いましたが、2回目の授業ではやくも関数のプログラムの宿題が出されました。 問題は「5の階乗を求めて、表示させるプログラムを作りなさい」というものなのですが、一応教科書にのっとって、作ってみましたが、コンパイルエラーがすごく多くでてしまいます。解決策が見つからないので質問することにしました。 以下が私が作ったプログラムです。 ---------------------------------------------- #include<stdio.h> int GetKaijyo(int, int); /*-------------------main関数------------------*/ void main(void) { int number; int kekka; number = 5; kekka = GetKaijyo(number); printf("%d no kaijyo = %d\n", number, kekka); /*--------------GetKaijyoの本体----------------*/ int GetKaijyo(int x) { int z; if(x == 1) return(1); z = x * GetKaijyo(x - 1); return(z); } ---------------------------------------------- 慣れた人から見たら馬鹿馬鹿しい質問だとは思いますが、どこが間違っているかも分からないので、ご指摘お願いします。m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

main関数の終わりの}がありません。

その他の回答 (2)

回答No.3

int GetKaijyo(int, int); という記述とmain関数の終わりがない事がエラーだと思いますが・・・。 調べ方としてそれぞれの行を消すかその行だけにするかして、 検証用ソースを作る事をお勧めします。 例えば、ここではmain関数とGetKaijyo関数の2つの関数がある訳ですから、どちらの関数に問題があるかまず絞ると。 #include<stdio.h> void main(void) { int number; int kekka; number = 5; kekka = 5 * 4 * 3 * 2 * 1; printf("%d no kaijyo = %d\n", number, kekka); 以上だけの記述で、エラーもなく望む結果が得られればmain関数には問題なしと。 (たぶんエラーとなるので、下から1行づつ消していって確認すれば、最後までエラーが出続け、記述ミスでなく何かが足りないのであると絞れます。) 同じ様にmain関数を簡素化してエラーをなくしてからGetKaijyo関数の検証を。 それから蛇足で、GetKaijyo関数に引数が1未満の場合の処理も追加しておく事をお勧めします。

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

int GetKaijyo(int); これでどうですか。

関連するQ&A

  • C++の関数で

    Visual C++で6の4乗を求めるプログラムを作ろうとしたのですがうまくいきません。どこが間違っているか教えていただけないでしょうか? #include "stdafx.h" int get; bekijyo(int,int); void main(void) { int number1,number2; int kekka; number1=6; number2=4; kekka=get; bekijyo(number1,number2); printf("%dの%dは%dです。); } int getbekijo(int x,int y) { int z; if(y==1) return(x); z=x; getbekijyo(x,y-1); return(z); }

  • 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を勉強中の者です。再起コールを使った階乗計算の結果を出力するプログラムをつくったのですが、もし再起コール(関数 kaijyo)を使わずにfor文などを使って同じように、階乗計算を行いたい場合どのようにすればいいでしょうか? 以下がそのソースコードです。説明が不足であればまた付け加えますのでよろしくおねがいします。 #include <stdio.h> int kaijyo(int a); int main(void) { int a; a = kaijyo(6); printf("6! = %d\n", a); return 0; } int kaijyo(int n) { if(n == 1) return 1; else return n*kaijyo(n-1); /*これを使わずに6!の結果を出したい/* }

  • return 1

    #include<stdio.h> int fact(int num); int main(void) { int i; printf("Input figure freely:"); scanf("%d", &i); printf("%d", fact(i)); return 0; } int fact(int num) { if(num>0){ return num * fact(num-1); }else{ return 1; } } -------------------------------------------- 上のプログラムは再帰呼び出しを使った階乗計算の プログラムです。 func()関数内のreturn 1の意味をどなたか教えて いただけないでしょうか?

  • C言語の、階乗を使うプログラムの問題を教えて下さい

    C言語の、このプログラムを作るのが分かる方、教えて下さい。階乗を使う問題です。 「キーボードで整数aを入力するとn!>aとなるときの最小のnを出力するプログラムを作りなさい」という問題です。 分からず苦戦しています。 nをキーボードで入力してn!を求めるには #include<stdio.h> int main(void) { int kekka,n,i; printf("n=? \n"); scanf("%d",&n); kekka=1; for(i=1;i<=n;i++) { kekka=kekka*i; } printf("%d!は%dです。\n",n,kekka); return 0; } とすればいいのは自分で作れたのですが、問題にあるn!>aのプログラムが分からず困っています。 分かる方、お願いいたします

  • 次のプログラムが作れません…

    キーボードから与えられた整数iに対して、iの階乗(i!)を求める関数"fact"を作成するというものなのですが… メイン関数は次のように与えられています。 #include<stdio.h> int fact(int); int main(void){ int in, i; printf("Input a number:"); scanf("%d",&in); for (i=1; i<=in; i++){ printf(" %d %d\n",i , fact(i) ); } return 0; } よろしくお願いします。

  • (void *)と&の違い

    #include<stdio.h> void * func(void *p){ printf("□■□func開始□■□\n"); printf("pのアドレス = %p\n",p); printf("p = %d\n",(int)p); (int)p += 100; printf("p = %d\n",(int)p); printf("□■□func開始□■□\n"); return NULL; } int main(void){ int number = 30; printf("numberのアドレス = %p\n",&number); func((void *)number);★1 return 0; } -------------------------------------------------------------- #include<stdio.h> void * func(int *p){ printf("□■□func開始□■□\n"); printf("pのアドレス = %p\n",p); printf("p = %d\n",*p); *p += 100; printf("p = %d\n",*p); printf("□■□func開始□■□\n"); return NULL; } int main(void){ int number = 30; printf("numberのアドレス = %p\n",&number); func(&number);★2 return 0; } 上記の2つは同じ結果になるのですが★1と★2のそれぞれの違いがわかりません。どなたかご教授をお願いします。

  • また、プログラミングで分からなくなったので、

    すみません、学校の課題(C言語)で 「任意の整数Xを入力し、Xの階乗の結果を表示するプログラムを作成しなさい。ただし、Xの階乗の計算は別関数で行い、入力と結果の表示はmain関数で行うようにすること。」 というのが出て、自分なりに作ってみたり、調べたのですが 別関数の意味やmain()の上の分に何が入るのかもわかりません。 それに下のプログラミングでちゃんと動くかもわからないです。 下に載せてみたので、よろしければ色々と言ってください。 お願いします #include<stdio.h> int { } main() { int kotae = 0; int kakezan,count,X; printf("整数Xを入力しなさい"); scanf("%d",&X); for(count = 0; count <= X; count++) { kotae = kakezan * X[count]; } printf("Xの階乗は%dです",kotae); }

  • C言語 外部変数について

    #include<stdio.h> int count; int f(int x){  int i;  for(i=0 ; x < 10 ; i++){   x*=2;   count++;   }  return x; } int main(void){  count=0;  printf("%d %d",f(1),count);  return 0; } のようなプログラムを作って実行してみたところ f(1)の部分は1024と自分の目的通りの結果が返ってきましたが countの部分が0とでてきてしましました 関数内で10回の繰り返しを行ったので 10がはいってると思ったのですが どこを直せば10の値がでてきますか?

  • 関数とポインタについて

    #include <stdio.h> void test(int *p); int main() { int i; test(&i); printf("%d",i); return 0; } void test( int *p) { static int k; k = 10; p = &k; } このようなプログラムを作って、void test()のkの値をmain関数で受け取りたいのですが、どのようにすればよいのかわかりません。 どなたか教えていただけませんか?