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

2024-12-14 15:58:44
推荐回答(5个)
回答1:

#include /* TC 2 mem.h */
#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");
}

回答2:

用c++的话 还可以考虑下 c的话就不行了

回答3:

随便挑吧,一抓一大把,都是和你的要求差不多的。
http://zhidao.baidu.com/question/79373719.html

回答4:

发,消,息,给,你,了

回答5:

你个二笔