n人の教科ごとの最高点、最低点を求めるプログラム
C言語で、タイトルのようなプログラムを作成しています。(n≦100)
教科は国語、数学、英語の3教科です。
作る際の条件として、最高点と最低点を同時に求める関数minmaxを一つだけしか作れません。
入力例)
% ./a.out
number of persons: 3
Japanese Math English
No.1: 90 80 70
No.2: 71 91 81
No.3: 82 72 92
min score: 71 72 70
max score: 90 91 92
現在、構造まで習いました。その知識をもとに以下のようにプログラムしました。(ただ、教科ごとの最高、最低点を求める部分は代表して国語の点の最低点を求める部分だけ載せました)
#include <stdio.h>
#define MAX 100
struct score{
int jpn;
int math;
int eng;
};
void minmax(struct score, int, struct score *, struct score *);
main(){
struct score s[MAX], min, max;
int n, i;
printf("number of persons: ");
scanf("%d", &n);
printf("Japanese, Math, English\n");
for (i = 0; i < n; i++) {
printf("No.%d: ", i+1);
scanf("%d %d %d", &(s[i].jpn), &(s[i].math), &(s[i].eng));
}
minmax(s[MAX], n, &min, &max); <------------(☆)
printf("min score: %3d%3d%3d\n", min.jpn, min.math, min.eng);
printf("max score: %3d%3d%3d\n", max.jpn, max.math, max.eng);
}
void
minmax(struct score s[], int n, struct score *minscore, struct score *maxscore)
{
int i, max, min;
for (i = 1, min = s[0].jpn; i < n; i++) {
if (min > s[i].jpn) {
min = s[i].jpn;
}
}
minscore->jpn = min;
(以下略)
}
しかし、これをコンパイルすると、
「(☆):パラメータの型1が関数宣言と一致しません。」と出ます。
どこがおかしいのでしょうか、どなたか教えてください。
No.2ベストアンサー
- 回答日時:
よくみたら、プロトタイプと実際の定義が不一致です
> void minmax(struct score, int, struct score *, struct score *);
→void minmax(struct score [], int, struct score *, struct score *);
> minmax(struct score s, int n, struct score *minscore, struct score *maxscore)
> ということですか?
違います。対処法が逆です。
関数minmaxで受け取りたいのは、struct scoreの配列全体ですから、
> minmax(s[MAX], n, &min, &max); <------------(☆)
→ minmax(s, n, &min, &max);
です。
宣言で 「struct score s[MAX]」となっていますが、これは、「『s』という名前のstruct score がMAX個の配列」であって、「『s[MAX]』という名前のstcruct scroreの配列」ではないです。
配列全体を示す変数は s であって s[MAX]ではありません。
#defineで定義したマクロはコンパイル前の置き換わります。s[MAX]は実際にはs[100]としてコンパイルされます。そう考えれば、s[0],s[1]といったものと同じだということがおわかりいただけるのではないでしょうか。
No.1
- 回答日時:
s[MAX] は struct scoreの配列s の要素の一つであり、 struct score 型になります。
s[0],s[1]といったものと同じです。
(より正確に言えば、struct score s[MAX]と宣言しているので、s[MAX]は範囲外となり、どんな動作をするかはわかりません)
> minmax(struct score s[], int n, struct score *minscore, struct score *maxscore)
とstruct scoreの配列を要求しているのですから、型が一致していません。
この場合、struct scoreの配列は 「s」 です。
ご回答ありがとうございます。
minmax(struct score s[], int n, struct score *minscore, struct score *maxscore)
↓
minmax(struct score s, int n, struct score *minscore, struct score *maxscore)
ということですか?
しかしこれでコンパイルすると、minmax関数内のs[0]やs[i]の'['に対して、「structに対して正しくありません」と出てしまいます…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語 構造体
-
関数から配列を返すには?
-
C言語の2次元配列 容量が大き...
-
C言語 ファイルの指定された行...
-
C言語において、 配列要素をひ...
-
配列の要素数に変数を入れたい...
-
MFCのCArrayを使った二次元配列
-
構造体のextern方法
-
C言語の課題が出たのですが自力...
-
C言語の穴埋め問題です
-
c言語
-
小数点第200位近くまでの商...
-
C#で構造体の配列を持った構造...
-
char型配列をint型に代入するには
-
2番目の最大値を求める
-
ファイルのデータを構造体に代...
-
C++DLLからC#へのコールバック...
-
callocで二次元配列を作成する...
-
C言語の配列のコピーについて質...
-
円周率を求めるプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報