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

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

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

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

Q&A

解決済

3回答

1134閲覧

構造体 平均点がうまくでないです

sawayakaunagi

総合スコア17

C

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

0グッド

0クリップ

投稿2021/11/01 00:46

平均点を構造体を使って出そうとしたのですがエラーが起きてしまいます。何が問題でしょうか?

c

1コード 2#include <stdio.h> 3#define NUM 5 4 5typedef struct{ 6 int english; 7 int japanese; 8 int math; 9 double ave; 10 }student; 11 12 double ave_english = ave_japanese = ave_math = 0; 13 14int main(void) 15{ 16 int i; 17 student data[]={{60, 50, 90}, 18 {50, 60, 80}, 19 {20, 70, 70, 60}, 20 {45, 40, 50, 90}, 21 {37, 90, 80, 60}}; 22 23 24 for(i=0; i<NUM; i++){ 25data[i].english+= data[i].english; data[i].japanese+= data[i].japanese; data[i].math+= data[i].math; 26 } 27 28 printf(" 英語=%3d 国語=%3d 数学=%3d\n", 29 data[i].english/5, data[i].japanese/5, data[i].math/5); 30 31 return 0; 32}

実行結果

c

1コード 2ensyuu4-2.c:11:23: error: ‘ave_japanese’ undeclared here (not in a function) 3 11 | double ave_english = ave_japanese = ave_math = 0; 4 | ^~~~~~~~~~~~ 5ensyuu4-2.c:11:38: error: ‘ave_math’ undeclared here (not in a function) 6 11 | double ave_english = ave_japanese = ave_math = 0; 7 | ^~~~~~~~

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

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

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

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

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

1T2R3M4

2021/11/01 00:49

>error: ‘ave_japanese’ undeclared 書いてある通りでは。
dodox86

2021/11/01 00:50

うまく出ないと言いますか、コンパイルエラーなのでプログラム実行以前のお話ですね。
BeatStar

2021/11/01 01:50

基礎からやりましょう。基礎ができていないことが原因。基礎ができていればありえない書き方をしている。
guest

回答3

0

aveそれぞれの初期化のエラーについては他のお二方が指摘されているとおりとして、

  • data の初期化がstudentの要素数と対応していない(そもそも要素aveが必要なのかどうか考えた方がよい)
  • 現状、for文の中身がdataの各要素を二倍にするだけの処理になっている。恐らくあなたがしたいのは、ave_english等の中にdataの各要素を足していく処理ではないですか?
  • printfで平均を計算して出力しているが、計算が整数同士の割り算となっているので、小数点以下の値が多分でてこない

あたりが問題になりそう

投稿2021/11/01 04:11

WoodenHamlet

総合スコア306

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

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

0

× double ave_english = ave_japanese = ave_math = 0;
○ double ave_english = 0, ave_japanese = 0, ave_math = 0;

投稿2021/11/01 03:03

episteme

総合スコア16612

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

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

0

ベストアンサー

定義されていないave_japaneseを使用してるためエラーになってますね

投稿2021/11/01 01:49

y_waiwai

総合スコア88042

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

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

sawayakaunagi

2021/11/01 03:49

12行目のdouble ave_english = ave_japanese = ave_math = 0; では定義とはならないのでしょうか? 調べてもどこをどう変えればいいのかわからなくて、教えてもらえると嬉しいです。
y_waiwai

2021/11/01 03:59

そこで定義されるのはave_englishだけです = は代入の演算子なので、ave_english をave_japanese の値で初期化するってことになります 別回答にもありますが、全て定義するには、コンまで区切って記述するか、 1行1変数できっちり定義しよう double ave_english = 0; double ave_japanese = 0; double ave_math = 0;
sawayakaunagi

2021/11/01 08:14

なるほど!解決しました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問