📄 学生.c
字号:
#include<stdio.h>
#include<stdlib.h>
#define LINE1 printf("--------------------------------------------------\n")
struct student
{ int xuhao;
int xuehao;
int sex;
float score[3];
float aver;//为个人的平均分
};
int i,j;
void liebiao_sex(struct student a[3])
{ int sex;
printf("please input sex to choose(0:男; 1:女)\n");
scanf("%d",&sex);
LINE1;
switch(sex)
{case 0:for(i=0;i<3;i++)
{ if(a[i].sex==0)
printf("%d %d %d %f %f %f\n",a[i].xuhao,a[i].xuehao,a[i].sex,a[i].score[0],a[i].score[1],a[i].score[2]);
}break;
case 1:for(i=0;i<3;i++)
{ if(a[i].sex==1)
printf("%d %d %d %f %f %f\n",a[i].xuhao,a[i].xuehao,a[i].sex,a[i].score[0],a[i].score[1],a[i].score[2]);
}break;
}return;
}
void liebiao_high(struct student a[3])//按高于指定的个人平均分列表
{ float score;
float aver[3];//定义个人平均分数组
for(i=0;i<3;i++)
aver[i]=(a[i].score[0]+a[i].score[1]+a[i].score[2])/3;//求个人平均分
printf("please input a score to liebiao\n");
scanf("%f",&score);
LINE1;
for(i=0;i<3;i++)
{if(aver[i]>=score)
printf("%d %d %d %f %f %f\n",a[i].xuhao,a[i].xuehao,a[i].sex,a[i].score[0],a[i].score[1],a[i].score[2]);
}return;
}
void liebiao_average(struct student a[3])
{ float score=0;float b[3],c[3];
for(i=0;i<3;i++)
{b[i]=(a[i].score[0]+a[i].score[1]+a[i].score[2])/3;c[i]=b[i];}
for(i=0;i<2;i++)
for(j=0;j<3-i;j++) //此算法的思想如下 :先用数组求出个人平均分,然后用冒泡法给此数组按从小到大排序,但若用
if( b[j]>b[j+1]) // for循环输出结构体仍然会原样输出,故用另一数组,先将其赋值同未排序时的b[i],待排序后的b[i]
{score=b[j+1]; // 用两个for循环当c[j]等于b[i]时,用stu[j]输出结构体,此时输出的就是排好序的stu[j];
b[j+1]=b[j];
b[j]=score;
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(b[i]==c[j])
printf("%d %d %d %f %f %f %f\n",a[j].xuhao,a[j].xuehao,a[j].sex,a[j].score[0],a[j].score[1],a[j].score[2],c[j]);
return;
}
void liebiao(struct student stu[3]) //按什么列表选择函数
{ int num;
printf("please input to choose\n1:按性别\n2:按高于个人平均分\n3:按个人平均分\n");
scanf("%d",&num);
switch(num)
{ case 1:liebiao_sex(stu);break;
case 2:liebiao_high(stu);break;
case 3:liebiao_average(stu);break;
default:printf("please input to choose\n");
}return;
}
void aver_personaly(struct student a[3])
{
for(i=0;i<3;i++)
{a[i].aver=(float)(a[i].score[0]+a[i].score[1]+a[i].score[2])/3;
printf("%d %d %d %f %f %f %f\n",a[i].xuhao,a[i].xuehao,a[i].sex,a[i].score[0],a[i].score[1],a[i].score[2],a[i].aver);
}return;
}
void aver_subject(struct student a[3])
{ float score[3],b[3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
score[i]+=a[j].score[i];//求科目平均分
for(i=0;i<3;i++)
b[i]=score[i]/3;
for(i=0;i<3;i++)
printf("%d %d %d %f %f %f\n",a[i].xuhao,a[i].xuehao,a[i].sex,a[i].score[0],a[i].score[1],a[i].score[2]);
for(i=0;i<3;i++)
printf("\t\t\t%d ",score[i]);
return ;
}
void average(struct student stu[3])
{ char n;
printf("please input to choose\np:按个人平均成绩\ns:按科目平均成绩\n");
getchar();
scanf("%c",&n);
LINE1;
switch(n)
{ case 'p':aver_personaly(stu);break;
case 's':aver_subject(stu);break;
default:printf("input to choose\n");
}
return;
}
void find_personly(struct student a[3])
{ float score[3],num=0.0;int t=0;
for(i=0;i<3;i++)
score[i]=(a[i].score[0]+a[i].score[1]+a[i].score[2])/3;//求个人平均分
for(i=0;i<3;i++) //求最高个人平均分
if(score[i]>num)
{ num=score[i];
t=i;
}
printf("你要查找的最高个人平均分的信息如下:\n");
printf("%d %d %d %f %f %f %f\n",a[t].xuhao,a[t].xuehao,a[t].sex,a[t].score[0],a[t].score[1],a[t].score[2],num);
return;
}
void find_subject(struct student a[3])//按科目最高分查找
{
float num=0.0;
int t,n;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("please input to choose \n1:语文;\n2:数学\n;3:英语\n");
scanf("%d",&n);
switch(n)
{ case 1: { for(i=0;i<3;i++)
if(a[i].score[0]>num)
{num=a[i].score[0];
t=i;
}
printf("%d %d %d %f %f %f %f\n",a[t].xuhao,a[t].xuehao,a[t].sex,a[t].score[0],a[t].score[1],a[t].score[2],num);
break;}
case 2: {for(i=0;i<3;i++)
if(a[i].score[1]>num)
{num=a[i].score[1];
t=i;
}
printf("%d %d %d %f %f %f %f\n",a[t].xuhao,a[t].xuehao,a[t].sex,a[t].score[0],a[t].score[1],a[t].score[2],num);
break;}
case 3: for(i=0;i<3;i++)
if(a[i].score[3]>num)
{num=a[i].score[3];
t=i;
}
printf("%d %d %d %f %f %f %f\n",a[t].xuhao,a[t].xuehao,a[t].sex,a[t].score[0],a[t].score[1],a[t].score[2],num);
break;
default : printf("please input to choose\n");
}
return;
}
void find(struct student stu[3])
{
char find;
printf("please input to choose\np:按最高个人平均分查找\ns:按指定科目的最高分查找\n");
getchar();
scanf("%c",&find);
switch(find)
{ case 'p' : find_personly(stu);break;
case 's': find_subject(stu);break;
default :printf("please input to choose\n");
}
return;
}
void main()
{ FILE *fp;
char num;
struct student stu[3];//={{1,052601,0,91,84,92},{2,052602,1,82,98,74},{3,052603,1,85,83,87}};
fp=fopen("D:\\原程序文件\\xuesh","r");
/*={{1,052601,0,91,84,92},{2,052602,1,82,98,74},{3,052603,1,85,83,87}};
printf("please input to choose\nlie biao\naverage\nhigh score\n");*/
for(i=0;i<3;i++)
//fread(&stu[i],sizeof(struct student),1,fp);
fscanf(fp,"%d %d %d %f %f %f",&stu[i].xuhao,&stu[i].xuehao,&stu[i].sex,&stu[i].score [0],&stu[i].score[1],&stu[i].score[2]);
LINE1;
while(1)
{ printf("please input to choose\nl:lie biao\na:average\nf:find\no:结束\n");
scanf("%c",&num);
switch(num)
{ case 'l': liebiao(stu);break;
case 'a': average(stu);break;
case 'f': find(stu);break;
case 'o': exit(0);break;
default :printf("please input to choose\n");
}
getchar();
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -