
C语言高手,帮忙做一道编程题,高分悬赏,中午之前就要!!
一编写一个程序,建立一个学生成绩文件(三十名学生),每名同学的信息包括学号、姓名和英语、数学、计算机三门课程成绩。分别将所有同学的信息存放到顺序文件中,学生的数据信息通过...
一 编写一个程序,建立一个学生成绩文件(三十名学生),每名同学的信息包括学号、姓名和英语、数学、计算机三门课程成绩。分别将所有同学的信息存放到顺序文件中,学生的数据信息通过键盘录入。
二 打开上题所建立的顺序文件,从中读取同学的信息,并利用选择顺序法按总成绩从大到小的顺序显示所有同学的学号,姓名和英语、数学、计算机和总分这六项内容。
要求:有适当注释。 展开
二 打开上题所建立的顺序文件,从中读取同学的信息,并利用选择顺序法按总成绩从大到小的顺序显示所有同学的学号,姓名和英语、数学、计算机和总分这六项内容。
要求:有适当注释。 展开
展开全部
#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");
}
#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");
}
展开全部
用c++的话 还可以考虑下 c的话就不行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-06-29
展开全部
随便挑吧,一抓一大把,都是和你的要求差不多的。
http://zhidao.baidu.com/question/79373719.html
http://zhidao.baidu.com/question/79373719.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
发,消,息,给,你,了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-06-29
展开全部
你个二笔
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询