• 締切済み

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); }

  • haihi
  • お礼率14% (1/7)

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.4

>一応上のように直してみたのですが そりゃ動かないだろうね だって、「どこが間違っているか教え」た だけだから。 なぜそれが間違っているのか、を知るには文法 っていう回答だったわけ。 え?なんで修正したソースを書いてくれないのかって? それは答えを丸写しするだけになって、禁止されているからできない。 回答者は手助けしかできない。宿題は やってあげられない だからこういう探し方の提示みたいな事しかできない http://www.google.com/search?q=c%E8%A8%80%E8%AA%9E%20%E9%96%A2%E6%95%B0%E3%81%AE%E5%91%BC%E5%87%BA%E3%81%97%E6%96%B9&hl=ja&lr=

  • arain
  • ベストアンサー率27% (292/1049)
回答No.3

No.2です。 >申し訳ありません。コンパイルも通っていないです。 少なくとも、コンパイルが通ってから質問すべき内容です。 コンパイルがとおらないのであれば、エラーメッセージくらいは出ているはずです。 そのメッセージを記載するくらいはしましょう。 処理を教えることはしません。 >ちなみに、「べき乗」(getbekijyo)そのものの処理が間違っています。 >「べき乗」がどういったものかよく調べてみてください。 に追加して「再帰呼び出しがどういったものか調べてください。」 としか言えません。 まず、「どのような処理を行いたいのか」を「頭の中だけ」ではなく文章でもフローチャートでも何でも構いませんから、書き出してみてください。 それによって多少はやりたいことが整理できます。 そしてプログラムを作成しエラーがでなくなったら、想定している結果と実際の結果を比較し、どのタイミングで変数にどのような値が入っているかを確認していってください。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

まず、実際にコンパイルまでこぎつけていますか? 実際のソースそのものであれば、コンパイル通りませんよ。 >kekka=get; bekijyo(number1,number2); kekka=getbekijyo(number1,number2); の間違いでは? >int get; bekijyo(int,int); >z=x; getbekijyo(x,y-1); も非常に見難い。 ちなみに、「べき乗」(getbekijyo)そのものの処理が間違っています。 「べき乗」がどういったものかよく調べてみてください。

haihi
質問者

補足

申し訳ありません。コンパイルも通っていないです。 アドバイスのようにすると、 #include "stdafx.h" int getbekijyo(int,int); void main(void) { int number1,number2; int kekka; number1=6; number2=4; kekka=getbekijyo(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); } こうすればよいのでしょうか?

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

>どこが間違っているか教えて >int get; bekijyo(int,int); >kekka=get; bekijyo(number1,number2); >z=x; getbekijyo(x,y-1); 文法をもう少し理解した方が良いと思う。

haihi
質問者

補足

申し訳ありません。一応上のように直してみたのですがやはりまだうまくいきません。具体的にどう違うか教えていただけるとありがたいです。

関連するQ&A

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

    大学に入って初めてプログラミングを習いましたが、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

  • c言語の関数について

    .#include<stdio.h> int input_number(void); int main(void) { int num; int total = 0; while(){ num = input_number(); if(num == 0){ break; } total = total + input_number(); } printf("¥n合計値は%dです¥n", total); return 0; } int input_number(void) { int num; printf("数値を入力してください: "); scanf("%d", &num); return num; } 個人でcを勉強しております。 このプログラムで間違っているところを教えていただけませんでしょうか? 苦戦して困っております。できれば勉強法も教えてていただきたいです。 どうか宜しくお願いします。

  • C言語のプログラムについて

    三角形を判定するプログラムを作ったのですが直角三角形ができるはずがないのに直角三角形の判定が出てしまいます。簡単なことなのかもしれませんが自分ではわからなくなってしまったのでご指摘してもらいたいです。 #include<stdio.h> void tri(int x,int y,int z) { if((x*x==y*y+z*z)||(y*y==x*x+z*z)||(z*z==x*x+y*y)) { printf("これは直角三角形です。"); printf("これは三角形です。"); }else if((x+y>=z)||(x+z>=y)||(y+z>=x)) { printf("これは三角形ではありません。"); }else{ printf("これは三角形です。"); } } int main(void) { int e1,e2,e3; printf("3辺を入力してください"); scanf("%f,%f,%f",&e1,&e2,&e3); tri(e1,e2,e3); return(0); }

  • Visual C++ Express Edition 警告に関して

    Visual C++ Express Editionを導入して最近Cを学び始めたのですが、 Visual C++ Express Editionでコンパイルした際に警告がたくさん でてしまいます。エラーさえなければ実行はできるようですが、できれば警告もなくしないです。以下がソースファイルです。 #include <stdio.h> int main(void) { int x,y,z; z=1; for(;z == 1;){ printf("数値を入力してください:\n"); scanf("%d",&x); printf("数値を入力してください:\n"); scanf("%d",&y); printf("加算すると%d\n減算すると%d\n" "乗算すると%d\n除算すると商%dは余りは%d\n",x+y,x-y,x*y,x/y,x%y); printf("計算を続けますか?\n続けなるならば1を押してください:"); scanf("%d",&z); } return(0); } コンパイルをすると警告として以下がでました。 c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : 'scanf' の宣言を確認してください。 今回の例の場合の警告の解決方法と一般的に警告をどのように解決をすればいいのか(エラーだったら文法的に間違えているのだが、警告だと?)教えてください。

  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • 関数についての質問です。

    c言語を勉強しています。関数で戻り値がありますが、関数の処理の仕組みが理解できません。本等で勉強し僕の考え方が間違っていたら教えてください。 お願いいたします。 #include <stdio.h> int buy(int x,int y ) { int z; //1 printf("%d万円と%d万円の車を買いました。");//2 z=x+y; //3 return z; //4 } int main(void) { int num1,num2,num;//5 printf("いくらの車をかいますか?\n");//6 scanf("%d",&num1);//7 printf("いくらの車をかいますか?\n");//8 scanf("%d",&num2);//9 sum=buy(num1,num2);//10 printf("合計で%d万円です。\n",sum);//11 return 0;//12 } まず最初に 整数型、int num1,num2,numを読みます。 次に//7と//8で数値を入力します。 そして//10で値を格納し int buy( int x,int y)に値をわたします。 ※正確には関数buyに渡す。 そして計算をし計算結果 zをreturn で int buy(int x,int y )の buyに値を渡します。 そのあと呼び出し元の//10のbuyに値をかえします。 そしてプログラムが終了します。 間違っていたら教えてください。

  • C言語のプログラムについて質問

    明解C言語という書籍に 大きい方を表示するプログラム #include <stdio.h> int maxof(int x, int y) {  if (x > y)   return (x);  else   return (y); } int main(void) {  int na, nb;  puts("二つの整数を入力してください。");  printf("整数1:"); scanf("%d", &na);  printf("整数1:"); scanf("%d", &na);  printf("大きいほうの値は%dです。\n", maxof(na, nb));  return (0); } の関数maxofを利用し、 int max4(int w, int x, int y, int z) {  return (maxof(maxof(w, x), maxof(y, z))); } を挿入して変えれば四つの整数から最大値を求められるとのことですが、 コンパイルがうまくいきません。 関数maxofのwとx,yとzをそれぞれ比較し最大値を求めてさらにmaxof(w, x)とmaxof(y, z)を比較して最大値を求めるということですよね?ですので、 maxof(w, x) {  if (w > x)   return (w);  else   return (x); } maxof(y, z) {  if(y > z)   return (y);  else   return (z); を挿入しようとしたらmaxofはすでにありますというようなことが表示されてだめでした。 また、 int maxof(maxof(int w, int x), maxof(int y, int z)) { if (w > x)   return (w); if (w < x)   return (x); if (y > z)   return (y); if (y < z)   return (z); if (maxof(w, x) > maxof(y, z))   return (maxof(w, x)); if (maxof(w, x) < maxof(y, z))   return (maxof(y, z)); } としてみましたがやはりだめでした。 前のページの説明を読み返したりネットで調べてもわかりませんでした。 何がわからないのかがわからないのでもうお手上げです。 長くなってすいません プログラム例と説明をお願いします。

  • プログラムC

    前にも質問したのですがヒルベルト曲線を用いて画像をスキャンするプログラムとビットマップの画像を読み込むプログラムを用いてお互いの座標を関連付けてヒルベルト曲線の座標にビットマップの1画素ずつの値を代入したいのですがどうしてもうまくいかなく質問しました。 前に質問した物はhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1106704 にあります。ヒルベルトは質問覧にビットマッピはNO2の補足にあります。プログラムを書くと800字を超えてしまうのでそのようにしました。 ヒルベルトは他に #include<stdio.h> int x,y; int n; void RUL(int n),DLU(int n),LDR(int n),URD(int n); main() { scanf("%d",&n); printf("#位相%dのヒルベルト曲線\n",n); x=0; y=0;printf("(%d %d) ",x,y); RUL(8); } void RUL(int n) { if(n<=0) {return;} URD(n-1);x=x+1;printf("(%d %d)",x,y); RUL(n-1);y=y+1;printf("(%d %d)",x,y); RUL(n-1);x=x-1;printf("(%d %d)",x,y); DLU(n-1); } void DLU(int n) { if(n<=0) {return;} LDR(n-1);y=y-1;printf("(%d %d)",x,y); DLU(n-1);x=x-1;printf("(%d %d)",x,y); DLU(n-1);y=y+1;printf("(%d %d)",x,y); RUL(n-1); } void LDR(int n) { if(n<=0) {return;} DLU(n-1);x=x-1;printf("(%d %d)",x,y); LDR(n-1);y=y-1;printf("(%d %d)",x,y); LDR(n-1);x=x+1;printf("(%d %d)",x,y); URD(n-1); } void URD(int n) { if(n<=0) {return;} RUL(n-1);y=y+1;printf("(%d %d)",x,y); URD(n-1);x=x+1;printf("(%d %d)",x,y); URD(n-1);y=y-1;printf("(%d %d)",x,y); LDR(n-1); } があります。

  • Cのローカル変数でstatic以外の使い方?

    C言語の課題について教えてください [課題] 以下の関数がある。各関数の引数、変数は自由に設定していい ・int main() ・void func() ・Point *get() { /* 構造体のアドレスを返す */ } ・構造体 typedef struct { int x; int y; int h; int w; }Point; 問題 main関数から、func関数を経由して、get関数を経由し値を取得し、表示する 以下が考えたソースになりますが、これだと、 ローカル変数でstaticを使っているので、get関数が固定値ではなく、 取得のたびに値が変わるような場合には、だめだといわれました。 考えたのですがよくわからないので、どういう場合に駄目なのかと、 どのように修正すればいいのか教えてください。 #include <stdio.h> typedef struct { int x; int y; int h; int w; }Point; void func(Point **); Point *get(); int main(void){ Point *get; func(&get); printf("get.x:[%d]\n",get->x); printf("get.y:[%d]\n",get->y); printf("get.h:[%d]\n",get->h); printf("get.w:[%d]\n",get->w); return 0; } void func(Point **pw){ *pw = get(); printf("Wrapper: pw==%p\n",pw); } Point *get(void) { static Point pget; pget.x = 2; pget.y = 2; pget.h = 30; pget.w = 40; return &pget; }