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

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

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

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

Q&A

解決済

7回答

2140閲覧

2次元配列で平均の求め方

tsururin

総合スコア12

C

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

0グッド

0クリップ

投稿2019/06/06 23:44

編集2019/06/07 01:33

いま配列を勉強中で会社の先輩に課題をだされたのですが、どうしても2次元配列が分かりません。
内容

国 数 英 理 社
A 10 20 30 40 50
B 70 80 20 50 60
C 50 50 30 50 90

上記のA.B.C3人の五教科の平均を出す

先輩のくれたヒント

Int data ○○;
data ○○ = {10.20.30.40.50}
data ○○ = {70.80.20.50.60}
data ○○ = {50.50.30.50.90}

for (i = 0; i ≦ ○○ ; i ++){

x+= data ○○
}

printf("%d",x) //Xに平均が入る

参考書にもネットにも似た計算方法が載ってないので、1日考えましたがギブアップです・・・

追記
現在スッキリわかるC言語という参考書をつかっていますが誤記が多く、またどうしたらそうなるの?と思うくらい肝心な説明が抜けています。お勧めの参考書などあれば教えて欲しいです。

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

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

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

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

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

tsururin

2019/06/06 23:49

記載ミス 550のところは50です
1T2R3M4

2019/06/06 23:55

先輩に聞こう。
yoorwm

2019/06/07 01:15

書かれている事から、基本部分から出来ていないと察せられますので、まだ他の人に質問出来るレベルに達していないかと思います。 真面目に勉強されるのがよろしいかと思います。
tsururin

2019/06/07 01:48

yoorwm様 確かに、配列勉強始めたばかりで基本学んでる所で先輩から課題渡されました。 頑張ります、ありがとうございます!
fana

2019/06/07 01:49

> どうしても2次元配列が分かりません 1次元の場合であればできるんでしょうか? すなわち,「ある1人の人物に関する五教科の点数が(1次元の配列で)与えられたときに平均値を算出する」という問題ならどうでしょう?
tsururin

2019/06/07 01:53

2次元の課題を渡された経緯としては、配列の勉強をしていたところ「2次元配列ってしってるか?」って話になり課題渡された次第です。まだ個人では2次元配列の勉強はしていない段階です。勉強始めた段階なので1次元で出来るかは後でやってみます
fana

2019/06/07 01:59

「N人それぞれの平均を求める」というのは,「『1人の平均を求める』をN回やること」でしょうから,順序としてまずは1人バージョンからクリアしていくと良いのではないでしょうか.
tsururin

2019/06/07 02:02

ありがとうございます。順序がありますもんね(^_^;)
guest

回答7

0

先輩に「ギブアップ」と伝えてください。

投稿2019/06/06 23:54

Zuishin

総合スコア28662

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

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

Zuishin

2019/06/09 00:27

先輩はこのコードを欲していません。このコードはなくてもいいコードです。 低評価する人は先輩にギブアップと伝えることがこの問題の唯一の解決法だということがわからない人なので、プログラミングをやめた方がいいんじゃないですかね。
Zuishin

2019/06/09 00:56

わからない人には説明してもわからないんですが、それ以外の人のために解説します。 この問題の大目的は教育のため、そしてそのための小目的が二つ。質問者が二次元配列の基礎を知っているかどうかを先輩が確認することと、その応用を実際にやらせてみることです。 適当に似たコードを検索して提出することも、教えてもらって提出することも、この二つの目的を果たせません。 長時間取り組んでギブアップなら、その現状を教育係に伝えることは非常に重要です。現状を隠して嘘を伝えることには何のメリットもありません。 配列の基礎がわかっていれば、平均を出すという応用は非常に簡単なため、ギブアップと伝えられることで、教育係は質問者に基礎が足りないことを把握し、適切な教育方針を立てることができます。 どこに問題があるかを把握できない、しようともしない人にプログラミングは無理です。
Zuishin

2019/06/09 01:00

この問題の解決方法は二つ。一つは目的のコードに似たものを検索するのではなく、配列の基礎を学び、それを物にして自分で応用すること。もう一つは先輩に現状を伝えて指示を仰ぐことです。 そのうち前者はこの質問者には無理でしょう。なので後者が唯一の解決法となります。
guest

0

「(相加)平均」の定義を確認する必要があるように思います。

まあつまるところ、

  1. 全要素の総和を求める
  2. 要素数で割る

という作業が必要であることはまず大丈夫でしょうか?だめな場合は中学校数学の教科書をひっくり返してください。

さて、先輩のくれたヒントとやらは、このうち「全要素の総和を求める」部分のヒントです。


・・・ってあれっ、あれれれ、おかしいですよ?

c

1{10.20.30.40.50}

って

c

1{10,20,30,40,50}

の間違いじゃないでしょうか?要素を区切るのは,ですし。


で話を戻しまして

c

1x+= data ○○

に着目します。ヒントにはxを宣言定義している場所がないのでどこかで宣言定義する必要があります。ここでヒントの中で大事な部分が

c

1printf("%d",x); //Xに平均が入る

です。ここの段階で変数xが生きていないとだめということです。

そんなわけで変数の生存期間に気をつけて宣言定義しましょう。かつ、初期化(=プログラマからみて何が変数に入っているか分かるようにする作業)も必要です。何で初期化すればいいでしょうか?

ここで大事な数学上の性質としては

0 + 1 = 1 0 + 2 = 2 1 + 0 = 1

のように、0は足し算に影響を与えないという性質でした。

さあ、ここまで書けば変数xを宣言定義する

int x = /* 初期値 */;

をどこに書けばいいか分かるでしょう。


あとは「要素数で割る」作業ですが、まあただの割り算ですから特に考えることはありませんね。

投稿2019/06/07 01:20

編集2019/06/07 01:33
yumetodo

総合スコア5850

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

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

tsururin

2019/06/07 01:49

わかり易くありがとうございます!
guest

0

ベストアンサー

ああ、むしろ先輩は「なんで分からないの?」状態なんだと思います。
こちらからすれば、ヒントどころか答え出している様なものですのですね。

投稿2019/06/07 01:22

stdio

総合スコア3307

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

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

tsururin

2019/06/07 01:24

他の方は追加の行が必要に思えると言っていますが、上記が答え出してる様なものなんですかね?
stdio

2019/06/07 01:32

うん、せめてxの定義と初期化ぐらいかな? それでエラー文読んで、修正していけば出来ると思いますよ。 もはや、先輩からすると「小学生でも理解出来そうな問題なのになんで出来ないの?」ぐらいの感覚だよ。私もfor文で詰んだとか言ってた人を2人ぐらい見た事あるけど、その人たちは自分の道をしっかりと探して進んでだよ。諦めなとは言わんが、向いてないと思うぞ。
tsururin

2019/06/07 01:46

まだ配列の勉強始めたばかりで、しかも参考書にも載ってないやり方の課題を出されて困ってただけなので大丈夫ですよ。私は詰んではおらずまだ知識の吸収段階です。でも貴方の発言でやる気が湧いてきました、ありがとうございます嬉しいです(^-^)
stdio

2019/06/07 02:43

それなら良かった。いや「1日考えましたがギブアップ」と書いてる時点で詰んでいると思いますが... ひとまずxの問題を解決しましょう。 あとその先輩、性格が少し歪んでいるね。 下のような書き方だと、理解しやすいかな? int data○○ = {{10,20,30,40,50}, {70,80,20,50,60}, {50,50,30,50,90}};
tsururin

2019/06/07 03:30

一旦脳みそ休憩させただけです(言い訳) 無事できました(´;ω;`)
stdio

2019/06/07 07:27

お、おう。なんかよく分かりませんが、出来たのなら良かったです。 ベストアンサーありがとうございました。 分からなかったら何度でも聞いて良いけど、今の質問のような「サイトに載ってる」ような質問はやめておいた方がいいと思いますよ。 あと、C言語は初期化と解放が命。覚えとくといいよ。
guest

0

c

1#include <stdio.h> 2 3int main() { 4 int data[][5] = { 5 // 国 数 英 理 社 6 {10, 20, 30, 40, 50}, 7 {70, 80, 20, 50, 60}, 8 {50, 50, 30, 50, 90} 9 }; 10 11 for (int i = 0; i < 3; i++) { 12 int total = 0; 13 for (int j = 0; j < 5; j++) { 14 total += data[i][j]; 15 } 16 printf("%f\n", total / 5.0); 17 } 18}

投稿2019/06/08 23:37

katoy

総合スコア22324

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

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

katoy

2019/07/01 22:27

低評価の理由をおしえてください。 修正していきます。
LouiS0616

2019/07/01 22:36

マイナスを付けたのは私ではありませんが、 釣り方に主眼を置いた回答が既に6件あるのに魚(調理済み)を放り込んだのが低評価の理由だと思います。
katoy

2019/07/03 12:56

百聞は一見に如かず で コードを見て理解をするというのも有りだと思うのです。 十分に考えられていない穴埋め問題で悩ませるより良いのでは?
LouiS0616

2019/07/03 13:37

答えを充分咀嚼するだけの素地があって類題や発展問題もこなせるような人であれば、最初から『参考書にもネットにも似た計算方法が載ってない』なんて言わないように思います。 コードを与えるにしても、少し目的を異なるものにしたり、質の高い穴埋め問題にしたり、コピペで動作するものを直接与える他に方法があった筈です。 魚(調理済み)と書いたのはそういう意図です。
fana

2019/07/16 01:49

理由が本当に「質問に対する答えそのものを書いたから」なのであれば,なんというか原理主義的なものを感じるなぁ…… 他の回答へのコメント欄にて,2019/06/07 12:30 には「無事できました」とされているわけで (それを真とするなら,だけど)質問者はその「釣り方」とやらを無事参考にできたのだろう. 時系列的にこの回答はその後に記されたわけだけども,それでもダメなんですかね? (後で回答を書く必要性そのものに関しては諸々あるだろうけど)
LouiS0616

2019/07/16 03:04 編集

確かに『無事できました』とは書いているんですが、それが『自力で書けた』のか『継ぎ接ぎしたらできた』のかに依って意味合いは変わってきそうです。 また、実際にちゃんとできている保証も無いわけで。いざ提出の段になって不備に気付き、もう一度このページを訪れたら魚が泳いでいる。これはあまり良く無さそうです。 この質問の一番の問題って、質問者さんの理解度が全く伝わってこないことだと思うんです。 それこそ平均の計算方法すら分かっていないかもしれませんし。 コードは一片も提示されていません。
katoy

2019/07/16 12:50

> ... もう一度このページを訪れたら魚が泳いでいる ... その時点でコードの比較を始めてくれたらなぁ と思っているのですけど...
fana

2019/07/17 01:47 編集

この回答の投稿タイミング(既述)であれば, > コードを見て理解をする という方向性に関して,このサイトのヘルプに記載されている「ためになる回答」に該当すると私は思うので,高評価というボタンを押してみます. #実際に「この質問者の」ために「なった」か否かは評価基準ではない,という考え.
guest

0

ひょっとして○○を埋めれば全て正しく動くと思っていませんか?
先輩のヒントには書いていない、追加の行が必要に見えます。

投稿2019/06/07 01:09

torisan

総合スコア678

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

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

tsururin

2019/06/07 01:19

先輩は数年前にC言語少しやってた程度です。なので先輩のくれたヒントがヒントになってないのでは?という不安がありここで質問させて頂きました・・・
guest

0

違う言語でもロジック的には同じようなことをしているものがあると思うので、それを探してみるのもいいかもしれないですね。
以下、同じことをしようとしているサイトを見つけましたので、参考にしてみてください!
https://edu.clipper.co.jp/pg-2-23.html
https://gist.github.com/wizcla/2964719

投稿2019/06/07 00:07

fumito_94

総合スコア679

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

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

0

2次元配列の使い方と平均値の求め方について学んでみてください。
ググれば出てくるので諦めずに頑張って下さい。

投稿2019/06/06 23:57

marurunn

総合スコア702

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問