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

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

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

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

635閲覧

配列を用いて平均点を出すやり方

Gaku1110

総合スコア1

C

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2021/06/16 10:05

編集2021/06/16 10:10

学生4人が5科目のテストを受け、以下の結果になった。各科目と各人の平均点をlec[5]、std[4]として宣言し、算出した結果をAss_10.txtに出力せよ。
ヒント:ダブルforループ

 国語 数学 英語 理科 社会
A 80 75 60 95 76
B 44 59 56 46 28
C 88 67 98 77 75
D 48 86 79 87 76

という課題がわかりません。
どなたかお助けいただけませんでしょうか?
よろしくお願いします。

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

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

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

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

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

episteme

2021/06/16 10:08

> どなたかお助けいただけませんでしょうか? なにをすればいいですか?
Gaku1110

2021/06/16 10:09

この課題のプログラミングを教えていただきたいです。
episteme

2021/06/16 10:12 編集

「教えろ」とは? 「そのまんま提出できるコードを寄越せ」ならお断り。 ...で、そのデータはどうやってプログラムに与えるんですか? ファイルから? 手入力? ほかのなにか?
Gaku1110

2021/06/16 10:17

コード内に打ち込んだ配列(?)からだと思います。
fana

2021/06/16 10:25

> 結果をAss_10.txtに出力せよ とか言われても,どんな出力フォーマットならば提出先にご満足いただけるのか不明ですな.
kaina

2021/06/16 10:41

今回のような質問見ると凄く勿体ないと毎回思います。 こういった課題の目的はプログラムの学習の為の問題でその問題を考える過程が 一番重要なポイントなのに、この質問はその一番重要な部分を考えることを放棄している 質問になっています。 課題の答えを提出することが目的では無いのですよ。 恐らく学生と思いますが将来の為にも自分で考えて、調べてを繰り返し繰り返し行い、 それでも分からない部分が出てきたなら、その部分だけをピンポイントで 聞くようにしてはいかがでしょうか?
PingHermit

2021/06/16 11:13

ここは、マルチポストはそれなりの作法があった気がします。 まあ、知恵袋の方には、 知恵袋内でのマルチポスト以外のお作法はないのでかまいませんが。
Crimson_Tide

2021/06/16 14:35

どうでもいい話ですが Ass_10.txt ではなくAns_10.txtなのでは? Assはちょっと・・・
guest

回答4

0

そもそも前提が全く違う。

課題は『答えが合っていないとダメ』ではないです。
むしろ、『考えること、調べること』が大事なのです。

もちろん、正解するのがベターかもしれませんが、出題者はそこまで望んでいないはずです。

課題丸投げして正解するよりも、間違ってでもいいので自力でやっている方がかなり評価が高いです。
(私が出題者および単位を与える側ならそうする)

課題丸投げは言い換えると、『自分は努力せず、他人に労力を強いること』です。

さらに、プログラミングは『こう書けばいい』……ではないです。

自分で設計し、自分でコーディングし、自分でデバッグし、自分でテストまでする。
これは当たり前のレベルです。

また、一括処理程度ですら1~2日ぐらいは当たり前のように使います。

それで、他の方々も『丸投げは非推奨』と言っているのです。

……と言い過ぎましたね。(;^ω^)

次からは実際の回答です。


[回答編]

Step1. 仕様を確認せよ

まず、問題を解く前に、『仕様を確認せよ』です。

実務なら仕様書、今回のように課題や競技プログラミング等であれば問題文です。

Step2. 現実世界でならどうするかを考える

プログラミングは『こう書けばいい』ではなく、
、『プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

よって、『現実世界でならどうするか』を考える。

たとえば今回の場合、

[言い換え] とある学生4人が5科目のテストを受けた。 それぞれ、A, B, C... と本人達がそれぞれの点数を言うため、 あなたは各教科の平均点、および各人の平均点をノートに記述せよ。

という感じでしょうか。

(ヒント等は省いています)

で、今回は省略しますが、この部分はご自分で考えてください。

Step3. 規則性を見付けたり、言い換えたりする

今回の本来の問題文を読んでください。

国語 数学 英語 理科 社会
A 80 75 60 95 76
B 44 59 56 46 28
C 88 67 98 77 75
D 48 86 79 87 76

この書式を見て、何か思いつきませんか?

そう、Excelの方眼用紙(?)です。

arr[行][列] とし、1から始まるとしたら、

arr[1][1] は "A" ですね。

Step4. 必要なものを調べる

今回のもので使いそうなもので、必要そうなものを考えます。

たとえば、ヒントとして『ダブルforループ』とあるので、これは必須。

実際の呼び名は違うと思いますが、簡単に言えば入れ子です。

forは『範囲が分かっている時』です。回数も範囲で考えることが出来るので。

配列を使えということなので配列も必須。

それ以外にも入門書等にあるもの、後は関数等も調べる。

Step5. 実装

今まで出てきたものを実装します。

Step6. デバッグする

エラーが出てきたらエラーメッセージを読んで対処し、結果が合わないならデバッガ等を使ってデバッグをする。

後、エラーメッセージは読みましょう。

エラーメッセージは怒声でも暴言でも罵倒でもハラスメントでもなく、
『コンパイラ等からのメッセージ』です。

「エラーが出た(泣」とやっている人はプログラミングなんてできません。

だって、コンパイラ等からのメッセージですよ?

言い換えると、『相手の話を聞かずに、逆ギレしている人』です。
そういう人はコミュニケーションなんて取れませんよね。

なのでメッセージぐらいは読みましょう。

Step7. テスト(検証)する

たとえば正常系と呼ばれる、問題のない動き。
ちゃんとしたデータを入れたときとかのやつですね。

後は異常系。たとえば「不正な値が入力された」時とかです。
実際にありうるものだと、「『半角英数字10文字以内』と書かれているのに、全角文字を入れようとした」とかのです。

C言語の場合、そういう場合はバッファオーバーフローが起きやすい(やり方によっては回避できるが)ので。

競技プログラミングや課題程度ならそこまで意識しなくてもいいですが、慣れておくといいですよ。


[追記0]

ヒントのダブルforは、外側のforで行の制御、内側のforで列の制御をすることが多いです。
(あえて逆でやったり、仕様に因っては違うが)

投稿2021/06/16 11:17

BeatStar

総合スコア4958

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

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

Gaku1110

2021/06/23 05:25

丁寧にありがとうございます
guest

0

残念ながら、コード作成依頼は受け付けていません
まずは、あなたなりにコードを書いてみましょう。

投稿2021/06/16 10:13

編集2021/06/16 10:14
y_waiwai

総合スコア87778

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

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

Gaku1110

2021/06/16 10:19

右も左もわかりません。 ヒントだけでもいただけませんか? 申し訳ございません。
y_waiwai

2021/06/16 10:23

あなたが手でそういう計算をするときはどうするのかを考えましょう まずは、その手順を、日本語でいいので箇条書きにでもして書いていきます。 そして、それを1行づつコードに変えていけばいいのです
guest

0

「結果をファイルに出せ」という話はフォーマット等が不明なのでやってません.
代わりに printf で結果を出力してます.

  • 出力結果はとりあえず電卓で計算した結果とは合っています.
  • C++のコンパイラでコンパイル通したけど,多分 C になってると思う.

C

1//よくわからんけど,lec[5] と std[4] を「宣言しろ」と指定されているっぽいので宣言しておく 2extern unsigned char lec[5]; 3extern unsigned char std[4]; 4 5// 6typedef struct Data 7{ 8 double Ave; 9 unsigned char n; 10} Data; 11 12void InitData( Data *pD ){ pD->Ave=0; pD->n=0; } 13 14void UpdateData( Data *pD, double v ) 15{ 16 ++( pD->n ); 17 pD->Ave += (v - pD->Ave) / pD->n; 18} 19 20double Ave( int *Input, int offset, int stride, int n ) 21{ 22 int i; 23 Data D; 24 InitData( &D ); 25 for( i=0; i<n; ++i )UpdateData( &D, Input[ offset+i*stride ] ); 26 return D.Ave; 27} 28 29//main 30int main(void) 31{ 32 const char *Subject[] = { "国語", "数学", "英語", "理科", "社会" }; 33 const char Student[] = "ABCD"; 34 int i; 35 int Input[] = 36 { 37 80, 75, 60, 95, 76, 38 44, 59, 56, 46, 28, 39 88, 67, 98, 77, 75, 40 48, 86, 79, 87, 76 41 }; 42 43 for( i=0; i<5; ++i )printf( "%sの平均 = %f\n", Subject[i], Ave( Input, i,5,4) ); 44 for( i=0; i<4; ++i )printf( "%cの平均 = %f\n", Student[i], Ave( Input, i*5,1,5) ); 45 46 return 0; 47}

投稿2021/06/16 10:54

編集2021/06/16 10:55
fana

総合スコア11658

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

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

0

ベストアンサー

ひんと:

C

1#include <stdio.h> 2#include <string.h> 3 4int main() { 5 6 int data[4][5] = { { 80, 75, 60, 95, 76 }, 7 { 44, 59, 56, 46, 28 }, 8 { 88, 67, 98, 77, 75 }, 9 { 48, 86, 79, 87, 76 } }; 10 11 float student_sum[4] = { 0 }; // 生徒ごとの合計 12 float subject_sum[5] = { 0 }; // 科目ごとの合計 13 14 for ( int row = 0; row < 4; ++row ) { 15 for ( int col = 0; col < 5; ++col ) { 16 student_sum[row] += data[row][col]; 17 subject_sum[col] += data[row][col]; 18 } 19 } 20 21 printf("\n生徒ごとの平均: "); 22 for ( int i = 0; i < 4; ++i ) { 23 printf("%f ", student_sum[i]/5); 24 } 25 26 printf("\n科目ごとの平均: "); 27 for ( int i = 0; i < 5; ++i ) { 28 printf("%f ", subject_sum[i]/4); 29 } 30 31 return 0; 32}

※ ファイルに書き出すとこぐらいは自分でおやんなさい。

投稿2021/06/16 10:26

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問