Subject chengjiguangli[3] = { {"English", 0, 0}, {"Math", 0, 0}, {"China", 0, 0} }; float min = 0; float max = 0; for(int i=0; i<3; i++){ std::cout << "学科:" << chengjiguangli[i].subject << " "; std::cout << "最低分:" << chengjiguangli[i].minscore << " "; std::cout << "最高分:" << chengjiguangli[i].maxscore << " "; } system("pause"); minscore(int n){ FILE *fp; float min=0; if((fp=fopen("file1.c","wb"))==NULL)//打开文件 { printf("cannot open the file!"); exit(0); } int i=0; fread(&stud1[i],sizeof(student_type),1,fp); for(i=0;i<SIZE;i++){ min=stud1[0].score[n]; for(int i=1;i<SIZE;i++){ if (min>stud1[i].score[n]) min=stud1[i].score[n]; } } return min; } maxscore(int n){ FILE *fp; float max=0; if((fp=fopen("file1.c","wb"))==NULL)//打开文件 { printf("cannot open the file!"); exit(0); } int i=0; fread(&stud1[i],sizeof(student_type),1,fp); for(int i=0;i<SIZE;i++){ max=stud1[0].score[n]; for(i=1;i<SIZE;i++){ if (max<stud1[i].score[n]) max=stud1[i].score[n]; } } return max; } 上述代码为什么无法求出最大值和最小值,如何改进
时间: 2024-04-08 15:29:32 浏览: 66
上述代码无法正确求出最大值和最小值的原因是在 `minscore` 和 `maxscore` 函数中存在一些问题。以下是需要改进的地方:
1. 在打开文件的部分,应该使用 `"rb"` 模式来以二进制读取方式打开文件,而不是 `"wb"` 模式以二进制写入方式打开文件。
2. 在读取文件的部分,每次读取都应该在循环中进行,而不是只读取一次。
3. 在比较最小值和最大值的部分,应该使用 `stud1[i].score[n]`,而不是 `stud1[i].score[n]`。
4. 函数声明时应该指定返回类型。
以下是修改后的代码:
```cpp
struct student_type {
float score[3];
};
const int SIZE = 10;
student_type stud1[SIZE];
float minscore(int n) {
FILE *fp;
float min = 0;
if ((fp = fopen("file1.c", "rb")) == NULL) {
printf("cannot open the file!");
exit(0);
}
fread(stud1, sizeof(student_type), SIZE, fp);
min = stud1[0].score[n];
for (int i = 1; i < SIZE; i++) {
if (min > stud1[i].score[n])
min = stud1[i].score[n];
}
fclose(fp);
return min;
}
float maxscore(int n) {
FILE *fp;
float max = 0;
if ((fp = fopen("file1.c", "rb")) == NULL) {
printf("cannot open the file!");
exit(0);
}
fread(stud1, sizeof(student_type), SIZE, fp);
max = stud1[0].score[n];
for (int i = 1; i < SIZE; i++) {
if (max < stud1[i].score[n])
max = stud1[i].score[n];
}
fclose(fp);
return max;
}
int main() {
Subject chengjiguangli[3] = {
{"English", 0, 0},
{"Math", 0, 0},
{"China", 0, 0}
};
float min = 0;
float max = 0;
for (int i = 0; i < 3; i++) {
min = minscore(i);
max = maxscore(i);
std::cout << "学科:" << chengjiguangli[i].subject << " ";
std::cout << "最低分:" << min << " ";
std::cout << "最高分:" << max << " ";
}
system("pause");
return 0;
}
```
修改后的代码中,`minscore` 和 `maxscore` 函数会读取文件中的数据,并且在每次循环时求得最小值和最大值。同时,在主函数中调用这两个函数来获取每个学科的最小值和最大值,并打印输出。
阅读全文