![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
ソースを載せます
============ ソースはここから ========================
// Seiseki.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
// 人数を定義します
#define STUDENT_COUNT5
// 成績を格納する領域です
// 構造体配列でも作れますが、教科を通じての合計を取るのであれば
// 2次元配列のほうが適しています
#define SUBJECT_COUNT3// 強化の数
// 各教科のインデックス
#define MATHEMATICS0// 数学
#define ENGLISH1// 英語
#define JAPANEASE2// 国語
// データ格納域
// 2次元配列です
// 1次元目で生徒を識別します
// 2次元目で科目を識別します
static int SCORE[STUDENT_COUNT][SUBJECT_COUNT];
// 指定教科の最高点を求めます
// 成績は既にSCOREに格納済みとします
static int GetHighScore(int SubJect)
{
int i;// 生徒用
// 最初の生徒の成績を基準とし
// それを超えたら最高得点(仮)を更新します
// 全生徒分チェックし終わった時点の最高得点(仮)
// が真の最高得点です
int n = SCORE[0][SubJect];// 仮の最高得点
// 先頭の生徒の得点はチェックしたので
// 2番目以降をチェックします
for (i = 1; i < STUDENT_COUNT; ++i)
{
if (SCORE[i][SubJect] > n)
{
n = SCORE[i][SubJect];
}
}
return n;
}
// 指定教科の最低点を求めます
// 成績は既にSCOREに格納済みとします
static int GetLowScore(int SubJect)
{
int i;// 生徒用
// 最初の生徒の成績を基準とし
// それを超えたら最低得点(仮)を更新します
// 全生徒分チェックし終わった時点の最低得点(仮)
// が真の最高得点です
int n = SCORE[0][SubJect];// 仮の最低得点
// 先頭の生徒の得点はチェックしたので
// 2番目以降をチェックします
for (i = 1; i < STUDENT_COUNT; ++i)
{
if (SCORE[i][SubJect] < n)
{
n = SCORE[i][SubJect];
}
}
return n;
}
// 指定教科の平均点を求めます
// 成績は既にSCOREに格納済みとします
// 小数点以下も戻したいのでdoubleとします
static double GetAve(int SubJect)
{
int i;// 生徒用
int s = 0;// 合計用
// 合計を算出します
for (i = 0; i < STUDENT_COUNT; ++i)
{
s += SCORE[i][SubJect];
}
// 平均点を戻します
// 分母に1.0を掛けているのは、浮動小数点演算を行わせるためです
// s / STUDENT_COUNTだと小数点以下は切り捨てられます
// (例え戻り値がdoubleでもです)
return s / (STUDENT_COUNT * 1.0);
}
// 個人の合計得点を算出します
static int GetPersonalTotal(int Student)
{
int s = 0;// 合計用
int i;
// 合計を算出します
for (i = 0; i < SUBJECT_COUNT; ++i)
{
s += SCORE[Student][i];
}
return s;
}
int main(int argc, _TCHAR* argv[])
{
int i;
// 成績を入力させます
for (i = 0; i < STUDENT_COUNT; ++i)
{
printf("%d番目の生徒の数学の成績を入力してください : ", i + 1);
scanf("%d", &SCORE[i][MATHEMATICS]);
printf("%d番目の英語の成績を入力してください : ", i + 1);
scanf("%d", &SCORE[i][ENGLISH]);
printf("%d番目の国語の成績を入力してください : ", i + 1);
scanf("%d", &SCORE[i][JAPANEASE]);
}
// 結果を表示します
printf("数学成績(最高, 最低, 平均) = %d, %d, %.1f\n",
GetHighScore(MATHEMATICS), GetLowScore(MATHEMATICS),
GetAve(MATHEMATICS));
printf("英語成績(最高, 最低, 平均) = %d, %d, %.1f\n",
GetHighScore(ENGLISH), GetLowScore(ENGLISH),
GetAve(ENGLISH));
printf("国語成績(最高, 最低, 平均) = %d, %d, %.1f\n",
GetHighScore(JAPANEASE), GetLowScore(JAPANEASE),
GetAve(JAPANEASE));
for (i = 0; i < STUDENT_COUNT; ++i)
{
printf("%d番目の生徒の総得点 : %d\n", i + 1, GetPersonalTotal(i));
}
return 0;
}
======================= ソースはここまで ==========================
わかりやすさを重視して書きました。
その為、プログラムは処理速度的にも、行数的にも
非効率になっています。
ご了承ください。
詳細は、ソースのコメントを参照してください
生徒数を5人から変更したい場合は
#define STUDENT_COUNT5
を修正してください
(ex.
#define STUDENT_COUNT10
で10人)
以上です
No.4
- 回答日時:
No.3です。
お恥ずかしいことです。
コメントに誤記があります
#define SUBJECT_COUNT 3 // 強化の数
は
#define SUBJECT_COUNT 3 // 教科の数
の誤りです。
ごめんなさい
No.1
- 回答日時:
その問題を解くために、ご自分で書かれたソースコードを見せてください。
途中まででもかまいません。
この回答への補足
まだ途中で構造体についてすごい微妙なのであってるかどうかわからないのですがまだほとんど初めのほうだけしか書いていませんが
#include <stdio.h>
struct stdent {
char name[15];
int jpn;
int eng;
int math;
};
struct stdent getData(void);
struct stdent addData(struct stdent, struct stdent, struct stdent);
struct stdent aveData(struct stdent, struct stdent, struct stdent);
//void printData(struct stdent, struct stdent);
main()
{
struct stdent []Ver;
struct stdent answer1, answer2;
int i;
for(i = 0; i < 5; i++){
[i]Ver = getData();
}
answer1 = addData([i]Ver);
answer2 = aveData([i]Ver);
return 0;
}
struct stdent getData(void)
{
scanf("%d", &inputVer.num);
printf("Name? ");
scanf("%s" inputVer.name);
printf("Japanese? ");
scanf("%d", &inputVer.jpn);
printf("English? ");
scanf("%d", &inputVer.eng);
printf("Math? ");
scanf("%d", &inputVer.math);
return(inputVer);
}
ここまではとりあえずこうかなと思って書いてみました。
どうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 大学受験 関西外国語大学の国際共生学科、英米語学科(Super IESプログラム)、大阪外語専門学校、同志社大 1 2023/03/29 22:34
- 中学校 理科だけが極端に苦手 5 2022/09/10 14:18
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- 大学受験 推薦入試について教えていただきたいことがあります。 私は、この春高校三年生になります。進路について考 1 2022/04/05 02:04
- 高校受験 中学校3年生です。 今回の前期中間のテストが9教科 900点中364点でした。 僕は高校に進学を取る 3 2022/06/25 01:56
- 高校受験 あと3ヶ月で偏差値10上げる方法を教えてください 3 2022/12/16 19:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
数字列を3桁ごとにカンマで区切...
-
c++でテンプレートのコードでわ...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
C言語
-
プログラミング☆
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
Arduinoのプログラムにエラーが...
-
毎回違う乱数を生成するにはど...
-
16進数の計算の仕方を教えて下さい
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
-
構造体の勉強中です 合計点の高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
へんな現象
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
if と配列の組み合わせ
-
C言語での奇数の和
-
C言語 配列と関数の練習問題
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
C言語
-
実数の整数部,小数部の取得
-
足して100になるような乱数のア...
-
卒業研究でよく分からないとこ...
-
数字列を3桁ごとにカンマで区切...
-
c言語
-
std::set<int> で、ある値が何...
-
比較回数と交換回数表示について
おすすめ情報