#include<stdio.h>
#include<string.h>
#define XS 3
struct student
{ char xuehao[10];
char name[10];
int a;
int b;
int c;
int pj;
}stud[XS+1];
void save() /*存儲*/
{ FILE * fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{printf("不能打開\n");
return;
}
for(i=0;1<XS;i++)
if (fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
printf("文件錯誤\n");
fclose(fp);
};
void main() /*輸入和處理*/
{ int i;
int j;
printf("請輸入十名學生的學號,姓名,三門課的成績(請依次輸入):\n");
for(i=0;i<XS;i++)
{scanf("%s%s%d%d%d%d%",&stud[i].xuehao,
stud[i].name,&stud[i].a,&stud[i].b,&stud[i].c);
stud[i].pj=(stud[i].a+stud[i].b+stud[i].c)/3;}
printf("ddd");
save();
for(j=0;j<XS;j++)
{ for(i=1;i<XS;i++)
if(stud[j].pj<stud[i].pj)
{strcpy(stud[i].xuehao,stud[XS+1].xuehao);
strcpy(stud[i].name,stud[XS+i].name);
stud[i].a=stud[XS+i].a;
stud[i].b=stud[XS+i].b;
stud[i].c=stud[XS+i].c;
stud[i].pj=stud[XS+i].pj;
strcpy(stud[j].xuehao,stud[i].xuehao);
strcpy(stud[j].name,stud[i].name);
stud[j].a=stud[i].a;
stud[j].b=stud[i].b;
stud[j].c=stud[i].c;
stud[j].pj=stud[i].pj;
strcpy(stud[XS+i].xuehao,stud[j].xuehao);
strcpy(stud[XS+i].name,stud[j].name);
stud[XS+i].a=stud[j].a;
stud[XS+i].b=stud[j].b;
stud[XS+i].c=stud[j].c;
stud[XS+i].pj=stud[j].pj;};};
for(i=0;i<XS;i++)
printf("%s%s%d%d%d%d",stud[i].xuehao,stud[i].name,stud[i].a,stud[i].b,stud[i].c,stud[i].pj);
}
1、 有10個學生,每個學生有3門課程成績,從鍵盤輸入以上信息(包括學生學號、姓名、三門課程成績),計算出平均成績,將所有數據以空格分開,與平均成績一並按每人一行的格式存入文件stu.dat中。並按平均成績由高到低輸出到屏幕(要求有學號、平均成績、排名序號。讀寫文件和排序輸出必須使用函數)。
改錯 急急急!!
看了你的程序,感覺走了很多彎路,現把我修改後的程序,你看看能否幫上你;
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define XS 5
struct student
{
char xuehao[10];
char name[10];
int a;
int b;
int c;
int pj;
}stud[XS+1];
void save() /*存儲*/
{
FILE * fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("不能打開\n");
return;
}
for(i=0;i<XS;i++)
if (fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
printf("文件錯誤\n");
fclose(fp);
printf("保存成功\n");
};
void main() /*輸入和處理*/
{
int i;
int j;
printf("請輸入十名學生的學號,姓名,三門課的成績(請依次輸入):\n");
for(i=0;i<XS;i++)
{
printf("請輸入第%d個學生的資料",i+1);
printf("學號:");
scanf("%s",&stud[i].xuehao);
printf("姓名:");
scanf("%s",stud[i].name);
printf("成績1:");
scanf("%d",&stud[i].a);
printf("成績2:");
scanf("%d",&stud[i].b);
printf("成績3:");
scanf("%d",&stud[i].c);
stud[i].pj=(stud[i].a+stud[i].b+stud[i].c)/3;
system("cls");
}
save();
for(i=0;i<XS-1;i++)
{
int max=i;
for(j=i;j<XS;j++)
{
if(stud[j].pj>stud[max].pj)
{
max = j;
}
}
if (max!=i)
{
struct student tempstu;
tempstu = stud[i];
stud[i] = stud[max];
stud[max] = tempstu;
}
};
for(i=0;i<XS;i++)
{
printf("第%d名:",i+1);
printf("%6s%6s%5d%5d%5d%5d\n",stud[i].xuehao,stud[i].name,stud[i].a,stud[i].b,stud[i].c,stud[i].pj);
}
}
謝謝幫忙 多謝了