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

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

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

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

1201閲覧

構造体とポインタについて

heyhey1212

総合スコア0

C

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/08/28 15:12

構造体とポインタ

プログラミング演習の質問です
「stdata.hを読み込んで英語,数学,物理の平均値と分散を求めるプログラムを作成せよ。コンパイルに必要なヘッダーファイル(.hファイル)と
プログラムファイル(.cファイル)を全て提出してください。
stdata.hはプログラム中で以下のようにインクルードすることで
データを読み込んでください。
include "stdata.h"」
おそらくポインタが間違っていると思いますが、どこがだめで、どのように直せばいいのかわかりません。

stdata.hは

c++

1#define NUM 100 2student st[NUM] = { 3 {"0001", "ayase kurumi", 85, 84, 71} 4,{"0002", "iijima mitsuru", 90, 70, 83} 5,{"0003", "ishizaka yutaka", 55, 81, 88} 6..... 7,{"0100", "yoshinaga yuu", 78, 77, 65} 8};

発生している問題・エラーメッセージ

horyu1.c:23:17: error: expected identifier or ‘(’ before ‘[’ token
struct test_data[]=(student *p,char *id, char *name,
^
horyu1.c: In function ‘main’:
horyu1.c:46:11: error: invalid operands to binary + (have ‘int’ and ‘student’ {aka ‘struct <anonymous>’})
total += st[i];
^~ ~~~~~
horyu1.c:51:20: error: invalid operands to binary - (have ‘student’ {aka ‘struct <anonymous>’} and ‘float’)
var += ((st[i] - avg) * (st[i] - avg)) / (float)NUM;
~~~~~ ^
horyu1.c:51:36: error: invalid operands to binary - (have ‘student’ {aka ‘struct <anonymous>’} and ‘float’)
var += ((st[i] - avg) * (st[i] - avg)) / (float)NUM;

該当のソースコード

c++

1#include <stdio.h> 2#define N 100 3 4 typedef struct{ 5 char id [8]; 6 char name [64]; 7 int eng; 8 int math; 9 int phys; 10 double avg; 11 double var; 12} student; 13 14#include "stdata.h" 15 16 17struct test_data[]=(student *p,char *id, char *name, 18 int eng, int math, int phys) 19 20 { 21 strcpy(p->id,id); 22 strcpy(p->name,name); 23 p->eng = eng; 24 p->math = math; 25 p->phys = phys; 26} 27 28 29 int main() 30 { 31 ; 32 int i; 33 int total; 34 float avg; 35 float var; 36 total = 0; 37 avg = 0.0; 38 var = 0.0; 39 for(i = 0; i < NUM; i++){ 40 total += st[i]; 41 avg = total/(float)NUM; 42 printf("Average: %.2f\n",avg); 43 } 44 for(i = 0; i < NUM; i++){ 45 var += ((st[i] - avg) * (st[i] - avg)) / (float)NUM; 46 printf("Variance: %.2f\n",var); 47 } 48 49 printf("----------------------------\n"); 50 51 printf(" English Average:%.2f\n",st[i].eng); 52 printf(" Math Average:%.2f\n",st[i].math); 53 printf(" Physics Average:%.2f\n",st[i].phys); 54 printf(" English Variance:%.2f\n",st[i].eng); 55 printf(" Math Variance:%.2f\n",st[i].math); 56 printf(" Physics Variance:%.2f\n",st[i].phys); 57 58 return 0; 59}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

bboydaisuke

2021/08/28 16:28 編集

> 全て提出してください。 大学の宿題ですよね。他所でもまったく同じ質問がありますね。
ishina_yum

2021/08/28 15:50

プログラム以前に「何すれば良いのか」が分かっていないように見えます。 まず『どういう手順で計算するのか』をプログラムではなく言葉で書いてみるところから始めるのが良いような気がします。
jimbe

2021/08/28 17:26

> おそらくポインタが間違っていると思います 残念ながら、そのような段階までも進んでいません。 ソースの一部が C の構文としてメチャクチャなのでコンパイラがエラーと報告しているだけです。課題でしたら、過去に習ったことを見直すことをお勧めします。
BeatStar

2021/08/29 01:40

基礎からやりましょう
guest

回答2

0

どこがだめで、どのように直せばいいのかわかりません。

この↓部分がダメで、何をしたいのかわからんので直せません。

C

1struct test_data[]=(student *p,char *id, char *name, 2 int eng, int math, int phys) 3 4 { 5 strcpy(p->id,id); 6 strcpy(p->name,name); 7 p->eng = eng; 8 p->math = math; 9 p->phys = phys; 10}

投稿2021/08/28 15:32

episteme

総合スコア16614

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

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

0

見にくいコードになってしまい申し訳ありません。

stdata.hのなかでは#define NUM 4としています。
studentのavgとvarを削除しました。
test_data関数(?)も削除しました。

このコードの出力は,

English Average:77.00 Math Average:78.00 Physics Average:76.75 English Variance:0.25 Math Variance:0.25 Physics Variance:34.50

コード

c

1#include <stdio.h> 2 3typedef struct{ 4 char id [8]; 5 char name [64]; 6 int eng; 7 int math; 8 int phys; 9} student; 10 11 12#include "stdata.h" 13 14extern student st[NUM]; 15 16int main(void){ 17 int english_total=0; 18 int math_total=0; 19 int physics_total=0; 20 int english_num=0; 21 int math_num=0; 22 int physics_num=0; 23 for(int i=0;i<NUM;i++){ 24 english_total+=st[i].eng; 25 math_total+=st[i].math; 26 physics_total+=st[i].phys; 27 } 28 for(int i=0;i<NUM;i++){ 29 english_num=(st[i].eng-english_total/(double)NUM)*(st[i].eng-english_total/(double)NUM); 30 math_num=(st[i].math-math_total/(double)NUM)*(st[i].math-math_total/(double)NUM); 31 physics_num=(st[i].phys-physics_total/(double)NUM)*(st[i].phys-physics_total/(double)NUM); 32 } 33 printf(" English Average:%.2f\n Math Average:%.2f\n Physics Average:%.2f\n English Variance:%.2f\n Math Variance:%.2f\n Physics Variance:%.2f\n",english_total/(double)NUM,math_total/(double)NUM,physics_total/(double)NUM,english_num/(double)NUM,math_num/(double)NUM,physics_num/(double)NUM); 34 return 0; 35}

投稿2021/08/29 15:37

編集2021/08/31 13:53
kansuke_t

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問