題目內容:某班有10名同學,建立學生結構體型別,包括學號、姓名、3門課程的成績,撰寫程式,讀入已準備好的文本檔案student1.txt,為結構體陣列變數賦值,計算每名學生的平均成績及名次。結果輸出到螢屏的同時保存到student2.txt檔案中。將源程式作為答案提交,程式運行后將生成的student2.txt檔案作為附件上傳。
(student1.txt已提供,直接從附件下載)。
student1:
201701 zhao 29.8 85.4 65.4
201702 qian 96.5 87.5 65.4
201703 sun 85.4 65.4 84.6
201704 li 63.4 95.4 86.3
201705 zhou 65.9 84.6 97.5
201706 wu 39.8 85.4 75.4
201707 zheng 96.5 82.5 75.9
201708 wang 75.4 85.4 94.6
201709 feng 73.4 95.4 56.3
2017010 chen 75.9 74.6 77.5
#include <stdio.h>
#include <stdlib.h>
struct student
{
long num;
char name[10];
float score[3];
}ml[10];
void mr(float aver[],int rank[])
{
int i,j,a;
for(i=0;i<10;i++)
{
a=1;
for(j=0;j<10;j++)
{
if(aver[i]<aver[j])
a=a+1;
}
rank[i]=a;
}
}
int main()
{
FILE *fp1,*fp2;
int i,rank[10];
float aver[10];
if((fp1=fopen("E:\\student1.txt","r"))==NULL)
{
printf("無法打開檔案\n");
exit(0);
}
fp2 = fopen("E:\\student2.txt","w");
for(i=0;i<10;i++)
fscanf(fp1,"%ld %s %f %f %f",ml[i].num,ml[i].name,ml[i].score[0],ml[i].score[1],ml[i].score[2]);
for(i=0;i<10;i++)
{
aver[i]=(ml[i].score[0]+ml[i].score[1]+ml[i].score[2])/3.0;
}
mr(aver,rank);
for(i=0;i<10;i++)
fprintf(fp2,"%-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n",ml[i].num,ml[i].name,ml[i].score[0],ml[i].score[1],ml[i].score[2],aver[i],rank[i]);
fclose(fp1);
fclose(fp2);
return 0;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
struct student
{
long num;
char name[10];
float score[3];
}ml[10];
void mr(float aver[],int rank[])
{
int i,j,a;
for(i=0;i<10;i++)
{
a=1;
for(j=0;j<10;j++)
{
if(aver[i]<aver[j])
a=a+1;
}
rank[i]=a;
}
}
int main()
{
FILE *fp1,*fp2;
int i,rank[10];
float aver[10];
if((fp1=fopen("E:\\student1.txt","r"))==NULL)
{
printf("無法打開檔案\n");
exit(0);
}
fp2 = fopen("E:\\student2.txt","w");
if (!fp2) {
printf("無法打開檔案\n");
exit(0);
}
#if 0
for(i=0;i<10;i++)
//fscanf(fp1,"%ld %s %f %f %f",ml[i].num,ml[i].name,ml[i].score[0],ml[i].score[1],ml[i].score[2]);
fscanf(fp1,"%ld %s %f %f %f", &ml[i].num,ml[i].name, &ml[i].score[0], &ml[i].score[1], &ml[i].score[2]);
for(i=0;i<10;i++)
{
aver[i]=(ml[i].score[0]+ml[i].score[1]+ml[i].score[2])/3.0;
}
#else
for(i=0;i<10;i++) {
//fscanf(fp1,"%ld %s %f %f %f",ml[i].num,ml[i].name,ml[i].score[0],ml[i].score[1],ml[i].score[2]);
fscanf(fp1,"%ld %s %f %f %f", &ml[i].num,ml[i].name, &ml[i].score[0], &ml[i].score[1], &ml[i].score[2]);
aver[i] = (ml[i].score[0]+ml[i].score[1]+ml[i].score[2])/3.0;
}
#endif
mr(aver,rank);
for(i=0;i<10;i++)
fprintf(fp2,"%-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n",ml[i].num,ml[i].name,ml[i].score[0],ml[i].score[1],ml[i].score[2],aver[i],rank[i]);
fclose(fp1);
fclose(fp2);
return 0;
}
供參考~
uj5u.com熱心網友回復:
謝謝你
,感覺自己是真的蠢總犯這種小錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56541.html
標籤:C語言
