#include
#include
#include
#define NUM 30 /* 学生总数 */
struct student
{
int number; /* 学号 */
char name[20]; /* 姓名 */
int mark[4]; /* 3门成绩和总分 */
};
struct student studs[NUM];
void input()
{
FILE *fp;
int i;
// 学生信息保存在data.txt文件中
if ((fp = fopen("data.txt", "w")) == NULL)
{
printf("打开文件出错\n");
exit(1);
}
printf("请输入%d个学生信息(eg, 学号 姓名 英语成绩 数学成绩 计算机成绩):\n", NUM);
for (i = 0; i < NUM; ++i)
{
scanf("%d %s %d %d %d", &studs[i].number, &studs[i].name,
&studs[i].mark[0], &studs[i].mark[1], &studs[i].mark[2]);
/* 计算总分 */
studs[i].mark[3] = studs[i].mark[0] + studs[i].mark[1] + studs[i].mark[2];
}
for (i = 0; i < NUM; ++i)
{
/* 以行为单位将学生信息保存到文件 */
fprintf(fp, "%d %s %d %d %d %d\n", studs[i].number, studs[i].name,
studs[i].mark[0], studs[i].mark[1], studs[i].mark[2], studs[i].mark[3]);
}
fclose(fp);
}
/* 排序学生成绩*/
void asort()
{
int i, j, k, len = sizeof(struct student);
struct student stud;
for (i = 0; i < NUM -1; ++i)
{
k = i;
for (j = i + 1; j < NUM; ++j)
{
if (studs[k].mark[3] < studs[j].mark[3])
k = j;
}
if (k != i)
{
memcpy(&stud, studs + i, len);
memcpy(studs + i, studs + k, len);
memcpy(studs + k, &stud, len);
}
}
}
/* 打印学生信息 */
void output()
{
FILE *fp;
int i;
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("打开文件出错\n");
exit(1);
}
memset(studs, 0, sizeof(student) * NUM);
for (i = 0; i < NUM; ++i)
{
/* 从文件读取数据 */
fscanf(fp, "%d %s %d %d %d %d", &studs[i].number, studs[i].name,
&studs[i].mark[0], &studs[i].mark[1], &studs[i].mark[2], &studs[i].mark[3]);
}
printf("学号\t姓名\t英语成绩\t数学成绩\t计机成绩\t总分\n");
asort();
for (i = 0; i < NUM; ++i)
{
printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", studs[i].number, studs[i].name,
studs[i].mark[0], studs[i].mark[1], studs[i].mark[2], studs[i].mark[3]);
}
fclose(fp);
}
void main()
{
input();
output();
system("PAUSE");
}
用c++的话 还可以考虑下 c的话就不行了
随便挑吧,一抓一大把,都是和你的要求差不多的。
http://zhidao.baidu.com/question/79373719.html
发,消,息,给,你,了
你个二笔