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 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)