mayiyougekai 2015-06-11 12:48 采纳率: 0%
浏览 2757

求帮忙找问题,C语言程序

在一个学生成绩管理系统中,保存学生个人的成绩情况,其中包括学号,姓名,性别,5门课成绩。对所有成绩作如下处理:

(1)从键盘输入10个学生的学号,姓名,性别,5门课成绩,并计算出每个人平均成绩,全班每门课的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stu.c”中。

(2)将上题“stu.c”文件中的学生数据,按每个人的平均分进行排序处理,将已排序的学生数据存入一个新文件“stu-sort”中。

(3)将上题已排序的学生成绩文件进行插入处理。插入一个学生的5门课成绩,程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。

#include
#include
#define SIZE 2

struct Student
{
int num;
char name[20];
char sex[2];
int score[5];
float aver;
struct Student *next;
}stu[SIZE],*head,*p,*q;

void save()
{
FILE *fp;
int i,j;
fp = fopen("stu.c","w+");
head = p = (struct Student *)malloc(sizeof(struct Student));
head ->next = &stu[0];
for(i = 0;i < SIZE;i++)
{

    scanf("%d ",&stu[i].num);
    fprintf(fp,"%d\n",stu[i].num);
    gets(stu[i].name);
    fprintf(fp,"%s\n",stu[i].name);
    gets(stu[i].sex);
    fprintf(fp,"%s\n",stu[i].sex);
    for(j = 0;j < 5;j++)
        scanf("%d",&stu[i].score[j]);
    fprintf(fp,"%d %d %d %d %d\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],
        stu[i].score[3],stu[i].score[4]);
    stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2] + stu[i].score[3]
        + stu[i].score[4])/5.0;
    fprintf(fp,"%f\n",stu[i].aver);
    if(i <= SIZE - 2)
        stu[i].next = &stu[i + 1];
    else
        stu[i].next = NULL;
}
fclose(fp);

}

void sort()
{
FILE *fp_in,*fp_sort;
int i,j;
float stu_aver[SIZE];
struct Student temp;
fp_in = fopen("stu.c","r+");
for(i = 0;i < SIZE;i++)
{
fscanf(fp_in,"%d%f",&stu[i].num,&stu[i].aver);
printf("fuck %f\n",stu[i].aver);
stu_aver[i] = stu[i].aver;
}
for(i = 0;i < SIZE;i++)
printf("%f\n",stu_aver[i]);
for(i = 0;i < SIZE - 1;i++)
{
for(j = 0;j < SIZE - 1 - i;j++)
{
if(stu[j].aver > stu[j + 1].aver)
{
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
fp_sort = fopen("stu-sort","w+");
for(i = 0;i < SIZE;i++)
{
fprintf(fp_sort,"%d\n",stu[i].num);
fprintf(fp_sort,"%s\n",stu[i].name);
fprintf(fp_sort,"%s\n",stu[i].sex);
fprintf(fp_sort,"%d %d %d %d %d\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],
stu[i].score[3],stu[i].score[4]);
fprintf(fp_sort,"%lf\n",stu[i].aver);
}
fclose(fp_sort);
fclose(fp_in);
}

void add()
{
FILE *fp_new,*fp_in;
int i;
head ->next = &stu[0];
q = (struct Student *)malloc(sizeof(struct Student));
scanf("%d ",&(q ->num));
gets(q ->name);
gets(q ->sex);
for(i = 0;i < 5;i++)
scanf("%d",&(q ->score[i]));
q ->aver = (q ->score[0] +q ->score[1] + q ->score[2] +q ->score[3]
+ q ->score[4])/5.0;
fp_in = fopen("stu-sort","r+");
for(i = 0;i < SIZE;i++)
{
fscanf(fp_in,"%d%f",&stu[i].num,&stu[i].aver);
//printf("fuck %f\n",stu[i].aver);
//stu_aver[i] = stu[i].aver;
}
for(i = 0;i < SIZE;i++)
printf("%f\n",stu[i].aver);
printf("%f\n",q ->aver);
p = head;
if(q ->aver <= stu[0].aver)
{
p ->next = q;
q ->next = &stu[0];
}
else if(q ->aver >= stu[SIZE - 1].aver)
{
stu[SIZE - 1].next = q;
q ->next = NULL;
}
else
{
for(i = 0;i < SIZE - 1;i++)
{
if((q ->aver > stu[i].aver) && (q ->aver < stu[i + 1].aver))
{
stu[i].next = q;
q ->next = &stu[i + 1];
}
}
}
fclose(fp_in);
fp_new = fopen("new","w+");
p = head ->next;
for(;;)
{
fprintf(fp_new,"%d\n",p ->num);
fprintf(fp_new,"%s\n",p ->name);
fprintf(fp_new,"%s\n",p ->sex);
fprintf(fp_new,"%d %d %d %d %d\n",p ->score[0],p ->score[1],p ->score[2],
p ->score[3],p ->score[4]);
fprintf(fp_new,"%lf\n",p ->aver);
p = p ->next;
if(p == NULL)
break;
}
fclose(fp_new);

}

int main(void)
{
//FILE *fp;
//int i,j;
save();
sort();
add();
return 0;
}

(1)(2)问处理好像没问题了,第(3)点插入处理,输出的学生数据只有两个人的。。是不是链表链接有问题,还是别的地方出现错误。~

  • 写回答

13条回答 默认 最新

  • weixin_28957315 2015-06-11 13:33
    关注

    只做过单片机的程序,其他的不知道

    评论

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?