void inputFromFile(struct student stu[], int num, FILE *fp) 从文件输入学生信息(姓名、各科成绩和平均成绩)的函数。stu 为结构体数组,num 为数组中元素的个数,fp 为文件指针。(注:文件的打开和关闭放在主函数中,fp为以“读”方式打开的文本文件指针)。
时间: 2024-03-16 18:47:34 浏览: 15
这个函数可以通过以下代码实现:
```c
void inputFromFile(struct student stu[], int num, FILE *fp) {
for (int i = 0; i < num; i++) {
fscanf(fp, "%s %d %d %d %d", stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].avg);
}
}
```
这个函数的作用是从以“读”方式打开的文本文件中读取学生信息,包括姓名、各科成绩和平均成绩,并将其存储到结构体数组中。具体实现方法是通过循环遍历数组,使用 fscanf 函数按照指定的格式从文件中读取每个学生的信息,并将其存储到对应的结构体变量中。在读取过程中,需要注意使用正确的格式字符串,以确保能够正确地读取文件中的数据。
相关问题
void outputToFile(struct student stu[], int num, FILE *fp) 将学生信息(姓名、各科成绩和平均成绩)输出到文件的函数。stu 为结构体数组,num 为数组中元素的个数,fp 为文件指针。(注:文件的打开和关闭放在主函数中,fp为以“写”方式打开的文本文件指针)。
这是一个将学生信息输出到文件的函数,以下是函数的代码实现:
```c
void outputToFile(struct student stu[], int num, FILE *fp) {
int i;
fprintf(fp, "姓名\t语文\t数学\t英语\t平均成绩\n");
for (i = 0; i < num; i++) {
fprintf(fp, "%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].average);
}
}
```
该函数使用了 fprintf 函数来将学生信息输出到文件中。在函数中,先输出表头,然后使用循环遍历结构体数组 stu,将每个学生的姓名、各科成绩和平均成绩输出到文件中。其中,%s 表示输出字符串,%.2f 表示输出浮点数,并保留两位小数。最后,关闭文件指针 fp。
定义一个 student 结构体如下: struct student { char name[20]; /*姓名*/ float score[4]; /*四门功课的成绩*/ float average; /*四门功课的平均成绩*/ }; 其中,name 中存放同学的姓名;score[4]数组中存放同学的英语、数学、物理、化学成绩;average中存放上述四门功课的平均成绩。 2) 编写下面5个函数。函数的具体要求: void inputFromKeyboard(struct student stu[], int num) 从键盘输入学生信息的函数。stu 为结构体数组,num 为数组中元素的个数。 void outputToScreen(struct student stu[], int num) 将学生信息输出到屏幕的函数。stu 为结构体数组,num 为数组中元素的个数。 void averageScore(struct student stu[], int num) 计算学生平均成绩的函数。stu 为结构体数组,num 为数组中元素的个数。 int compare(struct student stu1, struct student stu2) 对两个学生的平均成绩进行比较。若学生1的平均成绩高于学生2,返回值为1,否则返回值为0。stu1 和stu2为两个结构体变量,分别代表学生1和学生2。 void sortByAverageScore(struct student stu[], int num) 根据学生的平均成绩对学生信息整体排序的函数,其中两学生成绩比较要求调用函数compare。stu 为结构体数组,num 为数组中元素的个数。
1. 输入学生信息的函数 inputFromKeyboard:
```
void inputFromKeyboard(struct student stu[], int num) {
for (int i = 0; i < num; i++) {
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的英语、数学、物理、化学成绩:", i+1);
for (int j = 0; j < 4; j++) {
scanf("%f", &stu[i].score[j]);
}
}
}
```
2. 输出学生信息的函数 outputToScreen:
```
void outputToScreen(struct student stu[], int num) {
printf("姓名\t英语\t数学\t物理\t化学\t平均成绩\n");
for (int i = 0; i < num; i++) {
printf("%s\t", stu[i].name);
for (int j = 0; j < 4; j++) {
printf("%.2f\t", stu[i].score[j]);
}
printf("%.2f\n", stu[i].average);
}
}
```
3. 计算学生平均成绩的函数 averageScore:
```
void averageScore(struct student stu[], int num) {
for (int i = 0; i < num; i++) {
float sum = 0;
for (int j = 0; j < 4; j++) {
sum += stu[i].score[j];
}
stu[i].average = sum / 4;
}
}
```
4. 对两个学生的平均成绩进行比较的函数 compare:
```
int compare(struct student stu1, struct student stu2) {
if (stu1.average > stu2.average) {
return 1;
} else {
return 0;
}
}
```
5. 根据学生的平均成绩对学生信息整体排序的函数 sortByAverageScore:
```
void sortByAverageScore(struct student stu[], int num) {
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - i - 1; j++) {
if (compare(stu[j], stu[j+1])) {
struct student temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
```