1.文件指针设置操作。定义一个文件类型指针,指向文本文件d:\xsxx.txt,对文件可读写,把文本文件中的全部学生信息循环赋值给数组xs中。 2. 添加操作。给数组xs中的最后面添加从键盘输入的一个学生前三项信息。 3.计算操作。用指针法,计算每个学生的总分,并显示每个学生的姓名和总分。 4.统计操作。统计并显示最高总分和对应的学生姓名。 5.排序操作。按总分从从小到大排序,输出排序后的学号、姓名和总分。 6.文件读写操作。将这次运行添加的学生信息也写入d:\xsxx.txt文件中。
时间: 2024-03-17 12:40:54 浏览: 113
好的,我会按照你的要求回答你的问题。
1. 文件指针设置操作
```c
#include <stdio.h>
#define MAX 100
struct student {
char name[20];
int num;
int score[3];
};
int main() {
FILE *fp;
struct student xs[MAX];
int i = 0;
if ((fp = fopen("d:\\xsxx.txt", "r+")) == NULL) {
printf("Cannot open file!");
return 0;
}
while (!feof(fp)) {
fscanf(fp, "%s %d %d %d %d", xs[i].name, &xs[i].num, &xs[i].score[0], &xs[i].score[1], &xs[i].score[2]);
i++;
}
fclose(fp);
return 0;
}
```
2. 添加操作
```c
int n;
printf("请输入学生的姓名、学号、三门课程成绩:");
scanf("%s %d %d %d %d", xs[i].name, &xs[i].num, &xs[i].score[0], &xs[i].score[1], &xs[i].score[2]);
n = i;
i++;
```
3. 计算操作
```c
int j, sum;
for (i = 0; i < n; i++) {
sum = 0;
for (j = 0; j < 3; j++) {
sum += xs[i].score[j];
}
printf("%s的总分为:%d\n", xs[i].name, sum);
}
```
4. 统计操作
```c
int max = 0, index = 0;
for (i = 0; i < n; i++) {
sum = 0;
for (j = 0; j < 3; j++) {
sum += xs[i].score[j];
}
if (sum > max) {
max = sum;
index = i;
}
}
printf("最高总分为:%d,对应的学生姓名为:%s\n", max, xs[index].name);
```
5. 排序操作
```c
int k, l;
struct student temp;
for (k = 0; k < n - 1; k++) {
for (l = k + 1; l < n; l++) {
int sum1 = 0, sum2 = 0;
for (i = 0; i < 3; i++) {
sum1 += xs[k].score[i];
sum2 += xs[l].score[i];
}
if (sum1 > sum2) {
temp = xs[k];
xs[k] = xs[l];
xs[l] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d %s %d\n", xs[i].num, xs[i].name, xs[i].score[0] + xs[i].score[1] + xs[i].score[2]);
}
```
6. 文件读写操作
```c
fp = fopen("d:\\xsxx.txt", "a");
fprintf(fp, "%s %d %d %d %d\n", xs[n].name, xs[n].num, xs[n].score[0], xs[n].score[1], xs[n].score[2]);
fclose(fp);
```
以上是根据你的要求编写的一份代码,希望对你有所帮助。如果还有什么问题,请随时问我。
阅读全文