简答题 上机操作题: 用c语言 编程:使用221001 张三 男 2004-3-15 85 95 85 221002 李四 女 2005-12-10 90 80 95 221003 王五 男 2004-4-12 75 80 80 221004 刘一 男 2003-12-5 82 88 86 221005 陈二 男 2004-1-10 80 92 85 221006 赵六 女 2005-6-18 88 85 98,计算这些学生的成绩之和保存到数组a的总分中,将数组a按总分从大到小排序,创建名为data2.txt的文本文件,将排序后的数组a的6个学生的8列信息项以空格分隔、一行一个学生写入该文件中。执行程序后,找到data2.txt文件用记事本打开查看结果。
时间: 2024-03-17 07:41:50 浏览: 97
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 6
struct student {
char id[7];
char name[10];
char sex[3];
char birth[11];
int scores[3];
int sum;
};
void sort(struct student *students, int n);
void write_to_file(struct student *students, int n);
int main() {
struct student students[N] = {
{"221001", "张三", "男", "2004-3-15", {85, 95, 85}},
{"221002", "李四", "女", "2005-12-10", {90, 80, 95}},
{"221003", "王五", "男", "2004-4-12", {75, 80, 80}},
{"221004", "刘一", "男", "2003-12-5", {82, 88, 86}},
{"221005", "陈二", "男", "2004-1-10", {80, 92, 85}},
{"221006", "赵六", "女", "2005-6-18", {88, 85, 98}}
};
int i, j;
for (i = 0; i < N; i++) {
students[i].sum = 0;
for (j = 0; j < 3; j++) {
students[i].sum += students[i].scores[j];
}
}
sort(students, N);
write_to_file(students, N);
return 0;
}
void sort(struct student *students, int n) {
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (students[j].sum > students[i].sum) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void write_to_file(struct student *students, int n) {
FILE *fp = fopen("data2.txt", "w");
if (fp == NULL) {
printf("Failed to open file.\n");
exit(1);
}
int i, j;
for (i = 0; i < n; i++) {
fprintf(fp, "%s %s %s %s", students[i].id, students[i].name, students[i].sex, students[i].birth);
for (j = 0; j < 3; j++) {
fprintf(fp, " %d", students[i].scores[j]);
}
fprintf(fp, "\n");
}
fclose(fp);
}
```
程序分为三个部分:
1. 定义了一个结构体 `student`,表示学生信息,包括学号、姓名、性别、生日、三门成绩和总分。
2. 在 `main` 函数中定义了一个 `students` 数组,存储了六个学生的信息。然后计算每个学生的总分,并调用 `sort` 函数将 `students` 按总分从大到小排序。
3. `write_to_file` 函数将排序后的 `students` 数组写入到名为 `data2.txt` 的文件中。每一行表示一个学生的信息,包括学号、姓名、性别、生日、三门成绩和总分,以空格分隔。
注:在写文件时,每个学生的信息后面需要加上一个换行符,这样可以使每个学生的信息单独占一行,方便查看。
阅读全文