質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

9回答

11066閲覧

C言語における2乗関数、3乗関数の作成について

abuuu1203

総合スコア20

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/06/22 08:27

main関数から入力された数値の2乗、3乗を計算し、それぞれ表示する関数を作りたいです。
標準関数のpowは使いたくないです。
要は、乗算を2回、乗算を3回という形でのコードをか書きたいです。
引数、戻り値はともにfloatで宣言したいです。

取り掛かりが分からないので、まだコードもないです。
どなたか、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/22 08:32

さすがに自分で書いたコードも無く回答下さいはやめましょう。
abuuu1203

2017/06/22 08:34

申し訳ありません。勉強を始めたばかりでして。。。
mattn

2017/06/22 08:45

はい。がんばりましょう。
jm1156

2017/06/22 09:20

過去の質問をみるとそうでもない気がしますが…。別人ですかね…。
abuuu1203

2017/06/22 09:30

申し訳ありません。別人ではないです。。。過去はPHPやPerlをやっていたのですが、もうだいぶ時間が空いた後のC言語なので、混乱していました。徐々に取り戻せるように頑張ります。自分の質問を読み返してみると、確かに知ろうと丸出しの質問でした。申し訳ありません。
mattn

2017/06/22 09:32

誤ってばかりだと気が滅入るので、次回気を付けて気にせずがんばりましょう。 :)
abuuu1203

2017/06/22 09:55

ありがとうございます。ここまではたどり着きました。 このままやると、squareとcubeそれぞれがpowについて参照されていない旨のエラーが出ました。   #include<stdio.h> #include<math.h> float npow(float a,int n); float square(float x); float cube(float x); int main(void) { float r; printf("数値を入力してください:"); scanf("%f",&r); printf("2乗は:%5.3f\n",square(r)); printf("3乗は:%5.3f\n",cube(r)); return 0; } float square(float x) { return npow(x, 2); } float cube(float x) { return npow(x, 3); }
mattn

2017/06/22 10:00

どこかしらでソースを持ってこられたのかと思いますが、npow はそのサイト?で使っておられる関数であって標準関数ではないです。
mattn

2017/06/22 10:07

ちなみに npow を pow にしてリンクフラグ -lm を付ければ通ると思います。ただ標準関数の pow は使いたくないと書かれているので本末転倒ですが。
guest

回答9

0

考え方はこうなると思います。

1乗:答え=値
2乗:答え=答え * 値
3乗:答え=答え * 値
(以下同様)

これをプログラム化するには、単純にループで乗数-1回分掛け合わせればよいと思います。

c

1float pow2(float v, int n) 2{ 3 // 1乗に相当する処理 4 float r = v; 5 // 以下2乗以降の処理 6 for(int i = 0; i < n - 1; i++){ 7 r = r * v; 8 } 9 return r; 10} 11int main(void){ 12 printf("2の2乗=%f\n", pow2(2,2)); 13 printf("2の3乗=%f\n", pow2(2,3)); 14} 15 1622=4.000000 1723=8.000000

投稿2017/06/22 08:38

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/22 08:39

答えるべきではないと思います。本人の為にならない。
ttyp03

2017/06/22 08:46

ま、わかりますが、コードにするまでの考え方は教えてあげてもよいのではと思ったので書いてみました。 これを参考に勉強していってもらえればと思いますが、あとは本人次第ですかね。 質問文に「課題」の文字があったらここまで書きませんがw
guest

0

うーん・・・それは2つの引数を加算して結果を返す関数の書き方がわからないというレベルですね。
この質問では「なにもわからないけど、どう書けばいいですか?」という内容です。それは丸投げ質問と呼ばれるものであり本サイトでは歓迎されません。

取り掛かりが分からない

Cの初心者用の教科書でまず基本を学ぶことをお勧めします。

投稿2017/06/22 08:34

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

取り掛かりが分からないので、まだコードもないです。

む?「Hello world!」とかの表示もしたこと無いのでしょうか?

c

1int main() 2{ 3 printf("Hello world!\n"); 4}

加減乗除とかの演算も書いたこと無いのですか?

投稿2017/06/22 08:31

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Cの初心者用の教科書でまず基本を学ぶことをお勧めします。

の一言なのかと思いますが・・・
キーワードだけ。

引数、戻り値はともにfloatの表示する関数の宣言方法

について、教科書を見てください。

乗算を2回、乗算を3回という形でのコードをか書きたい

7 × 5 とかの四則演算をする方法を教科書見てください。
変数を使った演算方法も載ってると思うので、変数 × 変数 のように実験してみてください。

main関数から入力された数値

main関数の引数は文字列なので、数値に変換する方法を調べてください。

投稿2017/06/22 08:47

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答失礼します。

n乗する関数を作りたいということであれば

引数で「累乗する値」と「何乗するのか」を与えて、戻り値で「計算結果」を返す、というやり方がオーソドックスかと思います。

C

1// ヘッダファイルの読み込み 2#include <stdio.h> 3 4// プロトタイプ宣言 5? n_pow(?); 6 7// メイン関数 8int main(){ 9 // 変数の宣言 10 float inX,inN,ans; 11 12 // データの入力 13 printf("整数を入力してください\n"); 14 scanf("%f",&inX); 15 printf("何乗しますか?\n"); 16 scanf("%f",&inN); 17 18 // n_pow関数の使用 19 ans = n_pow(inX,inN); 20 21 // 結果の出力 22 printf(" %f の %f 乗は %f です。",inX,inN,ans); 23} 24 25// これが今回作りたい関数です。 26? n_pow(?){ 27 ???; 28 return ???; 29} 30

上記のコードの「?」になってる部分をアレンジして、関数を作ってみましょう。
C言語を解説しているサイトはたくさんあるはずです。
少しでもやる気があれば数分ぐらいで解けるのではないですか?

C言語 関数の作り方 とでも調べれば出てくるのでは無いでしょうか
まあ、少しでもやる気があれば、この程度の問題は壁にすらならないと思いますが。

n_pow関数の中の「?」を置き換える場合は、1行ではなくて構いません。

というか、なぜ「関数を作りたい」というところにまで意識が至っているのに、取り掛かりが無いのか、良く分かりません。

調べ方が分からないのですか?teratailで質問できるのに?

関数の作り方が分からない。そのまま調べればいいんじゃないですかね。

わざわざ2乗関数や3乗関数を解説することは少ないでしょうから、中のロジックは自分で考えるとしても、関数の作り方ぐらい調べれば、必要ないぐらい丁寧に解説しているサイトが山ほど出てくるはずです。

それに、この関数は、それほど難しいことをしていません。
関数の仕組みさえ理解できれば、あっさり解ける課題では無いでしょうか。

答えを入れる変数を用意して。
引数から、累乗するターゲットの数と累乗する回数を取ってきて、
累乗する回数分ループさせて、答えの変数にターゲットの数をかければ良いんじゃないですかね。
最後に答えの変数をリターンすれば完成です。

これが理解できないようなら、正直ここできく前に某学習サイト群を利用して勉強してください。

投稿2017/06/28 20:46

Iam_1at

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1#define FUXK(_X) ((_X)*(_X)) 2 3float power(float you) 4{ 5 return FUXK(you); 6}

こうですか。3じょうはむつかしすぎるのでわかりません

投稿2017/06/23 01:29

WoodenHamlet

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1float square(float arg) 2{return arg?(float)exp(2*log(fabs(arg))):0;} 3 4float cube(float arg) 5{return arg?(float)((1-2*signbit(arg))*exp(3*log(fabs(arg)))):0;}

とまあ、答えだけ書いてもよかったわけですが…

これだけ書かれても、何がなんだかさっぱりなはずです。
その理由は、C言語を理解するのに最低限必要な知識が足りてないからです。
他の回答者さんがおっしゃりたいのは、基本書(や入門サイト)で、まずはイロハを学び、自分なりに考えてから質問しなさい、ということです。このサイトはプログラマを養成するためのものではなく、行き詰まったときにヒントをもらうためのものです。突き放すようですが、自分で考えず(あるいはその思考過程を見せず)質問するのは、丸投げと受け取られる方が多いです。
先に書いたコードは、敢えて難しく書いてはありますが、基本の範囲で理解できます(ぐぐる力は必要)。powを使わずに平方、立方を計算しています。

勉強の仕方がわからない、どんな基本書がいいか知りたい、それならそうと質問すればよいのです。よく見かける質問ですし、真剣に回答される方も大勢いらっしゃいます。

最初の質問に答えていませんでしたね。「猫でもわかるプログラミング」というサイト(下記参照)の、C言語編の最初から第11章をお読みください。関数の書き方から計算の仕方まで、ばっちり説明が載ってます。
http://www.kumei.ne.jp/c_lang/

…同じコードが書けない、ですって? あれは悪い例なので、それでokです(笑)。ぜひ基本書を読んで、素直で、綺麗なコードが書けるようになってください。

蛇足:普段の私が書くなら

C

1float square(float arg) 2{ 3 return arg * arg; 4} 5 6float cube(float arg) 7{ 8 return square(arg) * arg; 9}

投稿2017/06/22 15:30

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

javascriptならこんな書き方もあるな、と。

javascript

1var getExponentiation = (exponent) => { 2 var func = (base) => { 3 return (!exponent--) ? 1 : base * func(base); 4 }; 5 return func; 6};

投稿2017/06/22 09:00

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

丸投げではなく自身が努力した形跡を示しましょう。
何がどうわからないのかがないとどこから説明したらいいのかアドバイスがしづらいです。

投稿2017/06/22 08:37

anz0365

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問