#include?<stdlib.h>
#include?<time.h>
#include?<string.h>
#define?N?30
typedef?struct
{
char?name[20];
char?No[20];
char?sex[20];
float?score[5];
float?avg;
}STUDENT;
void?sort(STUDENT*?s)//按平均成績由高到低排序?
{
STUDENT?t;
int?i,j;
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(s[j].avg<s[j+1].avg)
{
t=s[j+1];
s[j+1]=s[j];
s[j]=t;
}
}
}
}
void?input(STUDENT*?s)//輸入函數?
{
system("cls");
int?i,j;
for(i=0;i<N;i++)
{
printf("\n請輸入第%d個同學的姓名:",i+1);
fflush(stdin);
scanf("%s",s[i].name);
printf("\n請輸入第%d個同學的學號:",i+1);
fflush(stdin);
scanf("%s",s[i].No);
printf("\n請輸入第%d個同學的性別:",i+1);
fflush(stdin);
scanf("%s",s[i].sex);
for(j=0;j<5;j++)
{
printf("\n請輸入第%d個同學的第%d門課成績:",i+1,j+1);
fflush(stdin);
scanf("%f",&(s[i].score[j]));
}
}
}
void?prt(STUDENT*?s)?//輸出函數?
{
int?i;
printf("\n\n");
for(i=0;i<N;i++)
{
printf("%s?%s?%s?%5.1f?%5.1f?%5.1f?%5.1f?%5.1f?%5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg);
}
}
float?calc(STUDENT*?s)?//計算函數--計算第三門課平均分?
{
float?all=0;
int?i,j;
for(i=0;i<N;i++)
{
all+=s[i].score[2];
}
return?all/N;
}?
void?find(STUDENT*?s)//查找函數---平均分在95以上的女生和全部成績在85分以上的女生?
{
int?i,j;
printf("\n平均成績在90分以上的女生有:\n");
for(i=0;i<N;i++)
{
if(s[i].avg>=90.0?&&?strcmp(s[i].sex,"女")==0)
{
printf("%s?%s?%s?%5.1f?%5.1f?%5.1f?%5.1f?%5.1f?%5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg);
}
}
printf("\n全部成績在85分以上的女生有:\n");
for(i=0;i<N;i++)
{
if(strcmp(s[i].sex,"女")==0)
{
for(j=0;j<5;j++)
{
if(s[i].score[j]<85.0)
{
break;
}
}
if(j>=5)
{
printf("%s?%s?%s?%5.1f?%5.1f?%5.1f?%5.1f?%5.1f?%5.2f\n",s[i].name,s[i].No,s[i].sex,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4],s[i].avg);
}
}
}
}
int?main()
{
STUDENT?s[N];
int?i,j;
////----------------如果要用手動輸入全部數據,請註釋掉虛線間的代碼---------開始-------//
char*?name1[20]={"張","王","李","趙","錢","孫","蔣","秦","任","劉","周","鄭","吳","朱","許","何","呂","謝","方","葉"};
char*?name2[20]={"子","欣","晨","紫","詩","夢","嘉","壹","思","靜","可","佳","心","梓","俊","明","浩","博","文","天"};
char*?name3[20]={"軒","勇","濤","軍","浩","豪","宇","俊","鳴","熙","文","國","佑","澤","然","傑","遠","平","秋","飛"};
srand((unsigned)time(0));
int?n;
float?f,avg;
for(i=0;i<N;i++)//隨機初始30個同學姓名學號成績等數據?
{
n=rand()%20;
strcpy(s[i].name,name1[n]);
n=rand()%20;
strcat(s[i].name,name2[n]);
n=rand()%20;
strcat(s[i].name,name3[n]);
//以上為隨機生成姓名?
n=0;
for(j=0;j<5;j++)
{
n=n*10+rand()%10;
}
sprintf(s[i].No,"%05d",n);
//以上為隨機生成學號?
if(rand()%2==0)
{
strcpy(s[i].sex,"男");
}
else
{
strcpy(s[i].sex,"女");
}
//以上為隨機生成性別
avg=0;
for(j=0;j<5;j++)
{
n=rand()%50+51;
f=(float)n;
if(rand()%2==1?&&?f<100.0)
{
f+=0.5;
}
s[i].score[j]=f;
avg+=f;
}
s[i].avg=avg/5;
//以上為隨機生成5門成績和平均分?
}
////----------------如果要用手動輸入全部數據,請註釋掉虛線間的代碼---------結束-------//
//?input(s);?//如果不用隨機生成姓名學號成績等數據,請用此函數?
sort(s);
printf("按平均成績由高到低打印\n");
prt(s);
printf("\n\n第三門課的平均分為:?%.2f\n",calc(s));
find(s);
return?0;
}