• ベストアンサー

C言語 関数

int型整数値の四乗値を返す関数int power4(int x)を作りたいのですが… int i; puts("整数を入力してください:") for (i = 0; i < 10; i++) {         printf("%d\n",i*i*i*i); } このようにすれば多分四乗になるとおもうのですが、 この場合、範囲がi<10のように指定されてしまいます。 どのようにすれば範囲に関係なく四乗の値が求められるのでしょうか? C言語初心者で、まだ基本的なものしか勉強していないのですが、 どなたかアドバイスよろしくお願いします。 (作り方は二通りあって、factorialを使う方法と上のように単純に4回かける方法があるようです)

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

#2です。 暫く触っていなかったら、printf 文 の使い方を間違えました(^_^; で、 >printf(“その数の四乗値は%dです。\n”,power4(int x); ですが、 printf(“その数の四乗値は%dです。\n”,power4(num)); ですね。 >scanf(%d,&num); で、num で受け取っているので、(int x)では、受け取った値が渡りません。 後ろの")"も不足です。

namisem
質問者

お礼

再びありがとうございます。 指摘のとおりです。間違っていました。 #include "stdafx.h" { int power4(int x); return(x*x*x*x); return 0; } int_tmain(int argc,_TCHAR*argv[]) { int num; int power4(int x); puts("整数を入力してください:"); scanf("%d",&num); printf("その数の四乗値は%dです。\n",power4(num)); return 0; } 作り直してやってみたのですが、だめでした。 あとちょっとだと思うのですが…。 どこがだめなのでしょうか? もしよかったら、補足お願いします。

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

その他の回答 (4)

回答No.4

4乗なので確実に「正の数」になりますから、unsigned longにすると、なお範囲が広がるかも。

namisem
質問者

お礼

回答ありがとうございます。 longはまだ習っていないのですが、機会があったら使ってみたいと思います。 教科書やみなさんの回答を参考にして作ってみました。 #include “stdafx.h” { int power4(int x); return x*x*x*x; } int_tmain(int argc,_TCHAR*argv[]) { int num; puts(“整数を入力してください:”); scanf(%d,&num); printf(“その数の四乗値は%dです。\n”,power4(int x); return 0; } こんな感じでしょうか… 明日にでも学校でやってみます

すると、全ての回答が全文表示されます。
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.3

4乗の関数は#2さんのように書けばOKです。 範囲のチェックは#1さんの書いてください。 ところでint型は、16ビットまたは32ビット(処理系によって違います)です。 扱える数値の範囲は、 ・16ビットでは、-32768~32767 ・32ビットでは、-2147483648~2147483647 となりますので、演算結果がこの範囲を超えないように引数を制限しなければ いけません。(オーバーフローしてしまいます) 確実に32ビットとして扱いたい場合は、long型を使ってください。 http://www9.plala.or.jp/sgwr-t/c/sec02.html#s2-2 C言語の初心者でしたら、まずこちらを参考にされるといいと思います。 関数については「12.関数を自作しよう」のところを。 http://homepage1.nifty.com/toshio-k/prog/c/ 物足りないようならこちらも参考にしてください。 http://www9.plala.or.jp/sgwr-t/ http://naruzo.cside1.com/kouza/kouza.php?id=c04 尚、関数の呼び出し方について、#2さんはちょっと勘違いされたようです。 通常は、 ・ans = power4(x); のようにして変数ansに値を取得するか、 ・printf("ans = %d\n", power4(x)); のように書きます。  

namisem
質問者

お礼

回答ありがとうございます。 C言語初心者なので、本当にわからないのですが 教えてもらったページを参考にして勉強してみようと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

int power4(int x){ return x*x*x*x; } あとは、メインから printf power4(x); と呼ぶだけです。

namisem
質問者

お礼

回答ありがとうございます。 int power4(int x){ return x*x*x*x; } 参考になりました。 関数はメインの前におくと、習いました。やってみます。

すると、全ての回答が全文表示されます。
  • utf7
  • ベストアンサー率29% (11/37)
回答No.1

10回ループさせているところがわからないのですが、printfのところでiを4乗していますので、ループは必要ないと思います。 もし入力させる数値を0~10のように限定するなら、 if(i < 0 || i > 10){ printf("数値が範囲外です\n"); exit(-2); } のように制御した方がいいと思います。 またintは-65536~65535までしか表せませんので、longにしておいた方が無難だと思います。

namisem
質問者

お礼

回答ありがとうございます。 すみません、ループは必要ないですね…。 勘違いしていました。 intは-65536~65535までだったんですね。 まだ勉強し始めたばかりで、知りませんでした。 longはまだ習っていないのですが、参考になりました

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

関連するQ&A