C语言高手,帮忙做一道编程题,高分悬赏,中午之前就要!!

一编写一个程序,建立一个学生成绩文件(三十名学生),每名同学的信息包括学号、姓名和英语、数学、计算机三门课程成绩。分别将所有同学的信息存放到顺序文件中,学生的数据信息通过... 一 编写一个程序,建立一个学生成绩文件(三十名学生),每名同学的信息包括学号、姓名和英语、数学、计算机三门课程成绩。分别将所有同学的信息存放到顺序文件中,学生的数据信息通过键盘录入。
二 打开上题所建立的顺序文件,从中读取同学的信息,并利用选择顺序法按总成绩从大到小的顺序显示所有同学的学号,姓名和英语、数学、计算机和总分这六项内容。
要求:有适当注释。
展开
 我来答
梦想窗外
2009-06-29 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1658万
展开全部
#include <memory.h> /* TC 2 mem.h */
#include <stdio.h>
#include <stdlib.h>
#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");
}
icelemon1314
2009-06-29 · TA获得超过131个赞
知道答主
回答量:237
采纳率:0%
帮助的人:158万
展开全部
用c++的话 还可以考虑下 c的话就不行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-06-29
展开全部
随便挑吧,一抓一大把,都是和你的要求差不多的。
http://zhidao.baidu.com/question/79373719.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e1b9539c0c
2009-06-29 · TA获得超过734个赞
知道大有可为答主
回答量:2241
采纳率:33%
帮助的人:802万
展开全部
发,消,息,给,你,了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-06-29
展开全部
你个二笔
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式