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

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

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

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

Q&A

解決済

3回答

456閲覧

c:構造体 ポインター配列

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2018/06/27 15:57

編集2018/06/28 00:19

c

1#include <stdio.h> 2 3struct Data { 4 int *tensu; 5 int *grede; 6 double av; 7}; 8 9int main() 10{ 11 struct Data item; 12 13 item.tensu[3]; 14 item.grede[3]; 15 int name[3] = {"英語","数学","情報"}; 16 double tatal = item.av; 17 18 for (int i = 0; i< 3; i++) { 19 printf("%d: ", name[i]); scanf("%d", &item.tensu[i]); 20 } 21 22 printf("平均点: %lf", item.tensu); 23 24 25 return 0; 26} 27

構造体を使用し、プログラム実行時に英語、数学、情報の得点を入力して、平均点、評価を出力するプログラムを作りたいです。
・秀:90 以上、優:80 以上、良:70 以上、可:60 以上、不可:60 未満
・繰り返し処理を使うこと
・科目名(英語、数学、情報)は文字型ポインタの配列を用いて定義する こと ・成績(秀、優、良、可、不可)も文字型ポインタの配列を用いて定義すること

困っていること

構造体の定義がこれであっているのかが分からなくて困っています。
また、入力後の判定や平均点を求めるプログラムが分からなくて困っています。

参考書に回答がなく分からなくて困っているので出来れば具体的なコードをご教授して頂けると助かります。

追記
[定義する構造体] 構造体タグ:Data (構造体のメンバ)
点数を入れるint型配列変数tensu 個人の平均点を入れるdouble型変数av
※構造体メンバのうち配列変数 tensu は、tensu[0]:英語、tensu[1]:数学、tensu[2]:情報として使用する
点数の入力は 0~100 までのみとして考えてよい (実行例の太字下線部は標準入力からの入力)
イメージ
英語:98
数学:76
情報:62 平均点:78.7
英語の成績:秀
数学の成績:良
情報の成績:可

c

1#include <stdio.h> 2 3struct Data { 4 int tensu[3]; 5 int *grede; 6 double av; 7}; 8 9int main() 10{ 11 struct Data item; 12 13 int *key = item.tensu; 14 item.grede[3]; 15 item.av; 16 float sum; 17 char *kamokumei[] = {"英語", "数学", "情報"}; 18 19 for (int i = 0; i< 3; i++) { 20 printf("%s: ", kamokumei[i]); 21 scanf("%d", &key[i]); 22 sum += key[i]; 23 } 24 25 item.av = sum / 3; 26 27 printf("平均点: %.1f\n", item.av); 28 29 return 0; 30}

現状のコードでは平均までを求めることができました。
繰り返し処理での判定の仕方がわからないです。

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

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

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

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

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

LouiS0616

2018/06/27 16:21

構造体にどのようなデータを格納する必要があるのか、具体的な指定はあるのでしょうか。
退会済みユーザー

退会済みユーザー

2018/06/27 16:27

追記しました。問題文を以上になります。
guest

回答3

0

ベストアンサー

構造体の定義がこれであっているのかが分からなくて困っています。

問題文に従ってそのまま書けば、こんなふうになるんじゃないでしょうか。

C

1struct Data { 2 int tensu[3]; 3 double av; 4};

tensuをポインタで宣言してしまうと、後から動的に領域を確保する必要が生じ面倒です。


科目名(英語、数学、情報)は文字型ポインタの配列を用いて定義すること

これも字義通りに捉えれば、次のようになります。

C

1char *kamokumei[] = {"英語", "数学", "情報"};

成績の配列も同様。


また、入力後の判定や平均点を求めるプログラムが分からなくて困っています。

以上の点を踏まえて、とりあえず書いてみましょう。
現状のコードは問題点が山積みなので、端から端まで指摘するのは避けたいです。

追記を受けて

まず、次の処理は全く不要です。
二行目に至っては存在しない第3要素にアクセスしようとしてしまっています。

C

int *key = item.tensu;
item.grede[3];
item.av;

それに伴って、入力処理周りも少し修正が要ります。

C

for (int i = 0; i< 3; i++) {
printf("%s: ", kamokumei[i]);
// scanf("%d", &key[i]);
scanf("%d", &item.tensu[i]);
// sum += key[i];
sum += item.tensu[i];
}

また、sumの型をfloatにする必然性が全くないので、doubleにした方が良いでしょう。


判定処理のところについてお聞きしたいのですが

条件分岐でならば判定処理出来るのですが繰り返し処理での判定の仕方が分からないです。

繰り返し処理は単に科目を巡回するためだけに使うのだと思います。
成績の判定は条件分岐で良いのでは。

C

1char *seiseki[] = {"秀", "優", "良", "可", "不可"}; 2for(int i = 0; i < 3; i++) { 3 int score = item.tensu[i]; 4 printf("%s ", kamokumei[i]); 5 6 if(tensuが90以上) { 7 seiseki[0]を出力; 8 } 9 else if(tensuが80以上) { 10 seiseki[1]を出力; 11 } 12 以下略 13}

投稿2018/06/27 16:37

編集2018/06/28 05:47
LouiS0616

総合スコア35658

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

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

退会済みユーザー

退会済みユーザー

2018/06/28 00:12

教えて頂いた通りにしました。 入力までは処理までは出来ました。 判定処理のところについてお聞きしたいのですが 条件分岐でならば判定処理出来るのですが繰り返し処理での判定の仕方が分からないです。 教えて頂けないでしょうか?
LouiS0616

2018/06/28 05:47

追記しました。
guest

0

投稿2018/06/27 16:31

AliHassan

総合スコア351

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

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

0

item.tensu = (int*)malloc(sizeof(int);
// this is the way to initialize dynamic memory

投稿2018/06/27 16:31

AliHassan

総合スコア351

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問