• 締切済み

C言語で戻り値を使った正方形の面積と直方体の体積の表示について分からず

C言語で戻り値を使った正方形の面積と直方体の体積の表示について分からずに困っています。 C言語ラストの問題が一番難しくて、全然分からずに困っています。 以下の点に留意して、一辺の長さを入力すると、正方形の面積と直方体の体積を計算するプログラムを作成する。main内 1)整数型の変数length、men、taiを宣言する。 2)実行例と同様の表示になるように、“一辺の長さを入力してください。”を表示し、入力された値を、変数lengthに読み込む。 3)作成する関数名は、titleとし、lengthを引数とし、関数titleを使う。 4)正方形の面積を計算する関数の関数名は、squareとし、lengthを引数とし、戻り値をmen に代入する。 5)直方体の体積を計算する関数の関数名は、qubeとし、lengthを引数とし、戻り値をtai に代入する。 6)“一辺○○の正方形の面積は ○○です。”と表示する。 7)“一辺○○の直方体の体積は ○○です。”と表示する。 関数title内 1)引数を変数名xとする。 2)下記の実行例の様になるように、表示を行う。 関数square内 1)引数を変数名xとする。 2)整数型の変数valを宣言する。 3)正方形の面積を計算し、valに代入する。 4)valの内容が戻り値となるようにする。 関数qube内 1)引数を変数名xとする。 2)整数型の変数valを宣言する。 3)直方体の体積を計算し、valに代入する。 4)valの内容が戻り値となるようにする。 という問題です。 考えて作ってみたのが下のですが、間違いだらけでどうしようもありません。 #include <stdio.h> void main(void) { int length,men,tai; printf("一辺の長さを入力してください。\n"); scanf("%d",&length); men=square(length); tai=qube(length); printf("***********************************\n"); printf("* 一辺%d *,&lenght); printf("*正方形の面積*") printf("*直方体の体積*") printf("*を計算します。*") printf("*************************\n"); } int square(x) { int val; val=x*x; return val; } int qube(y) { int val; val=x*x*x return val; } どなたかよかったら教えてください。 よろしくお願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

基本の流れは大体あってるのですから、細かいところをもう少し理解しましょう。 ○ ;(セミコロン)が無い行があちらこちらにあります。C言語では ;までで一つの命令になります。改行文字はただの空白と同じ扱いです。 このような場合、エラーメッセージは次の行で出ることが多いので見付けにくいです。 ○ C言語では、関数を定義して使いたいときは、次の2つのどちらかの方法を使います 方法1) 使用するより前に定義する。 今回の例なら、main関数で使うので、それより前に定義を記述します。 方法2)使用する前に、プロトタイプ宣言と呼ばれる、関数の戻り値や引数の型だけを予め記述しておく。定義部はどこに記述してもよい。 今回の例なら、mainの前に int square(int) ; と宣言だけしておけば、関数本体は現在の位置でもかまいません。 ○最近の関数宣言のやりかたは 戻り値の型 関数名(引数の型1 仮引数名1,引数の型2 仮引数名2,.....) です。 int square(x) では、引数の型が抜けています。型が省略された場合はint型とみなすため、今回の例では大丈夫ですが、省略しないようにしましょう。 int square(int x) ○また、 int qube(y) では、引数にyを使っているのに関数中ではyは使われておらず、宣言されていないxが使われているためエラーになります。 ○ printf("* 一辺%d *,&lenght); lenghtがlengthのミスだとして。 scanfとprintfを混同しています。この2つは非常によく似た書式を使いますが、細かい点で違うので、混同しないようにすることが大切です。 「printf」で「%d」に対応するのは「int型(および、暗黙の型変換でint型になる整数)」です。 「&length」は「変数lengthへのポインタ」であって、lengthが格納している整数ではありません。 ○また、このあたりのprintfは、問題にある「関数title」として定義しなければならないところではないでしょうか? ○printfの書式のしくみがわかれば、 6),7)は簡単ではないでしょうか? 書式には%による変換を複数記述できます。%が出てきた順番に、引数の前から対応します。 ○> 考えて作ってみたのが下のですが、間違いだらけでどうしようもありません。 とありますが、現在のところ、論理的な間違いは「関数titleが無い(けど、同等の処理は入っている」「6),7)の表示部が無い」の2つだけで、あとの間違いは、コンパイル時にエラーや警告としてメッセージが出るものばかりです。 エラーメッセージを読む癖をつけましょう。 また、メッセージを検索にかければ、原因や対処方が見付かるケースも多いです。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

・実行例が示されていないので、何を表示すればいいか分からない。 ・関数mainの型が正しくない。 ・関数mainの中で"一辺%d"をprintfしようとしている行で、文字列を閉じるダブルクオーテーションがない。変数名の綴りに間違いがある。不要な&演算子がある。 ・行の終わりにセミコロンがないprintfがある。 ・関数titleを作っていない。 ・6)と7)の表示部分を作っていない。 ・関数squareの定義で、引数xの型を宣言していない。 ・関数qubeの定義で、引数の変数名はxと指定されているのにyを使っている。その上、引数の型を宣言していない。 ・関数qubeの定義で、valに計算結果を代入している行の終わりにセミコロンがない。

関連するQ&A

  • 表面積一定の直方体の体積の考え方

    表面積一定の直方体の体積が最大にとなる 条件について考えてます。 横をx 縦をy 高さをz とおくときx=y=zとなることは直感でわかるのですが これを証明するにはどうしたらいいのでしょうか? もしくわこの証明が載ってるHPなどありましたら紹介 していただけると嬉しいです。 どうか宜しくお願いいたします。

  • 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になってしまいます。 どこが間違っているのか分からずに困っています。 よかったら教えてください。 よろしくお願いします。 カテゴリを間違ってしまっていたらすみません。

  • 円錐内部にある直方体の体積

    底面の半径r、高さhの直円錐を考える。その内部に面abcd,面efghを正方形とする直方体を考える。ここで、頂点a,b,c,dは直円錐の側面上にあり、頂点e,f,g,hは直円錐の底面上にあるものとする。 直方体の高さをxとするとき、直方体の体積をr,h,xで表せ。 解答では平面aegcで切った断面で解答してあります。 僕は辺の中点を通る面(ad,bc,eh,gfの中点です)で切ってみたのですが、うまくいきません。 このやり方はダメなのでしょうか?よろしくお願いします。

  • 正方形に円が重なる面積の問題です。

    正方形に、正方形の一辺を半径とする円を、正方形の各頂点を中心として、4っつ書きます。この時、中央にできる、膨らんだ正方形に似た感じの面積を求めよ。 この問題、実は小学生に解けて、大学生には解けないと言われている問題です。この問題どう解きますか?自分は正解知りません。

  • 小学5年生、正方形の周の長さ、面積を求める図形の問題です。

    小学5年生、正方形の周の長さ、面積を求める図形の問題です。 以下の問題の導出方法を頼まれました。 問 正方形を組み合わせて図1のような図形を作りました。一番小さい正方形の一辺(茶色部)は1cmです。次の問いに答えなさい。 (1) 一番大きな正方形の周囲の長さ (2) 二番目に大きな正方形の面積 (1) 一番小さい正方形の面積は1cm2 二番目に大きい正方形の面積は一番小さい正方形の面積の二倍だから2cm2 ・・・ 一番大きな正方形の面積は64cm2 正方形の面積は一辺×一辺なので、 同じ数字をかけて64になるのは8、つまり大きい正方形の一辺は8cm 周囲の長さは 8×4=32 A. 32cm (2) 二番目に大きな正方形の面積は、一番大きな正方形の半分なので 64÷2=32 A. 32cm2 このように導出したのですが、 この問題文の条件だけで本当に「一つ大きな正方形は、元の正方形の二倍」なのかという点に疑問が発生しました。 「正方形の中点で接している」とういう条件があれば別ですが、 単に「正方形の組み合わせ」だけならば、極端な話、図2のような組み合わせもあるわけで、この場合面積は二倍になりません。 課題らしく、手元には解答・解説等ありません。 この問題の解答はどのように導出していけばよろしいのでしょうか。

  • 正方形と長方形の面積が同じ?(長文)

     以前(中学生のころ)に数学の図形の時間だったと思いますが、先生に「面白いことを教えてあげる」と言われ、問題を出されました。  その問題とは、面積の計算をすると同じ面積にならない長方形と正方形の折り紙があり、その長方形又は正方形の折り紙のいずれか(正方形を切ったような気がするのですが)を、はさみで三角や四角に切ってもう一方の折り紙にのせて行くと、不思議なことにすき間無く重なるのです。  勿論切った紙が重なったり、はみ出たりはしていません。  そのころは、そんなに気にならずに「ふーん?」なんて簡単に思っていたのですが、最近そのことを思い出し、不思議でなりません。  計算上では同じ面積で無いのに、切って貼り付けるとぴったりはまってしまうなんて?先生いわく「そこがまた数学の面白いところだ」なんて言ってましたが。  あまりにうる覚えな記憶で定かではありませんが、正方形の1辺は8cmだったように思うのですが?  どなたか、その問題と答えを知っておられたら教えてください、また、そんなことは絶対に無くて、私の記憶間違いなのでしょうか?  宜しくお願いします。

  • 一辺の長さがaの正方形の中にある図形の面積

    一辺の長さがaである正方形があります。この正方形の各頂点を中心とする4つの半径aの円に囲まれた四角形?の面積ってこの条件だけで求まりますか? よろしくお願いします。

  • 直方体のすり減った角の部分(三角すい)の体積の求め方

    直方体において角がすり減ったときのそのすり減った分(三角すい)の体積を知りたいのですが,その際に角から見て垂直に存在する底面の面積と,そこから角のあった場所までの高さから体積を求めたいのです. 直角座標系で,あるx,y,z座標に点が存在し,その三点の座標は分からないけれど,その三点で形成される三角形の面積がわかっているときにその底面からの原点までの距離を知りたいということです. うまく説明できているか分かりませんが,理解していただきご回答を頂ければ幸いです. よろしくお願いします.

  • C言語 exitで終了した関数の戻り値

    引数が負の整数であればエラーを表示し終了、0以上の整数であればそのまま戻り値とする関数 int example(int a) { if( a < 0 ) { printf("Error!\n");   exit(1); } return(a); } があったとします。 ここでたとえば  int s1,s2; に対して、 s1 = example(3); とすれば、 s1 = 3 となりますが、 s2 = example(-5); とすれば、 s2 には何が代入されているのでしょうか? 例に書いた関数はしょーもないものですが、 もう少し難しい関数を使って変数に値を入れて、その値で後でfor文などを使って仕分けていくようにしたいのですが、エラー時に代入されるものがわからなくて困っています。 エラー時のみに目印となる値、たとえば -1 などを戻り値とすることはできません。 おねがいします。

  • 2次関数で求める正方形内の四角形における面積最小値

    2次関数の問題についての疑問です。 1辺の長さがaの正方形ABCDにおいて, 辺AB, BC, CD, DA 上にそれぞれ点P, Q, R, Sを AP = BQ = CR = DS となるようにとる. このとき, 四角形PQRSの面積の最小値を求めよ. という問題が参考書にあります。解答には AP = BQ = CR = DS = ax とおくと, xは 0 < x < 1 ・・・(1) を変化する変数である. とあり、三角形APSの面積は 1/2AP・AS = 1/2ax(a-ax) = a^2/2x(1-x) と求めています。四角形の面積は、正方形からそれら三角形の面積を取り除いて求め、 答えは, 値をyとおき y = a^2 - a^2/x(1-x)・4 = a^2{1-2x(1-x)} = a^2(2x^2-2x+1) = a^2{ 2(x-1/2)^2 + 1/2 } ・・・(2) (1), (2)より求める最小値は, a^2/2 となっています。 以下私の疑問です。 私は AP = BQ = CR = DS = ax ではなく、 AP = BQ = CR = DS = x  ・・・ i として問題を解きました。このとき、式は y = a^2 -1/2x(a-x) * 4 = a^2 -2xa + 2x^2 = 2(x - a/2)^2 + a^2/2  ・・・ii となり、やはり最小値は a^2/2 となります。 私の解いた方法では間違いでしょうか。 気になるのは、参考書の解説では最小値のときの値が、x = 1/2 と文字がまざらず、私の方法では最小値 a^2/2 のとき x = a/2 と文字が混ざってしまいます。 それに加え、参考書の答えと比較し, ではaは1なのかとおもい、私の式iiにa = 1を代入して解いてみたのですが、何か具合がよろしくありません。 私のやっていることおかしいでしょうか。 また、問題を解いていて思ったのですが、a = a^2 となる数字は1しか存在しませんか。 最初から1を代入するのではなく、aやa/2を代入して、解いてからグラフ上でa = 1を代入すると上手くいくように思えるのですが、これはいったいどういうことなんでしょう。 独学なもので、身近にだれも聞ける人がおりません。 どなたか、よろしくお願いいたします。

専門家に質問してみよう