C语言实践
#include
#include
#define SIZE 300
typedef struct
{
int num;
int score[3];
}STUDENT;
typedef enum//
{
False,True
}FLAG;
int accept_data(STUDENT stu[],int grade[]);
void show_data(STUDENT stu[],int sum,int grade[]);
void draw(int grade[]);
void count(int *max,int *min,double *pass,double ave[],double f[],STUDENT stu[],int sum);
void show_data2(int max,int min,double pass,double ave[],double f[]);
int main()
{
int sum,max,min;//
double pass=0;//
int grade[11]={0};//
STUDENT stu[SIZE];
double ave[SIZE],f[SIZE];
sum=accept_data(stu,grade);
show_data(stu,sum,grade);
draw(grade);
count(&max,&min,&pass,ave,f,stu,sum);//
show_data2(max,min,pass,ave,f);
return 0;
}
accept_data(STUDENT stu[],int grade[])
{
int i,sum=0,temp,a1,a2;
FLAG flag;
printf("请输入计算总评成绩时平时成绩与期末成绩所占的比例,用整数表示: ");
scanf("%d%d",&a1,&a2);
for(i=0;i
{
printf("\n请输入学号:");
scanf("%d",&stu[i].num);
if(stu[i].num==-1)//'==' not'='
{
sum=i;
break;//
}
printf("\n请输入学生的平时成绩与期末成绩:");
flag=True;//
while(flag==True)
{
scanf("%d%d",&stu[i].score[0],&stu[i].score[1]);
if(stu[i].score[0]<=100 && stu[i].score[0]>=0 && \
stu[i].score[1]<=100 && stu[i].score[1]>=0)
flag=False;//
else
printf("\n\007 错误数据!请再次输入学生的平时成绩与期末成绩:\n");
}
temp=(int)(1.0*a1/100*stu[i].score[0]+1.0*a2/100*stu[i].score[1]);//
stu[i].score[2]=temp;//score[2] not score[3]
temp=(stu[i].score[1]/10);
if(temp==10)
grade[10]++;
else
grade[temp+1]++;//
}
return sum;
}
void show_data(STUDENT stu[],int sum,int grade[])
{
int i,j;
for(i=0;i
{
printf("%4d",stu[i].num);//
for(j=0;j<3;j++)//
printf("%4d",stu[i].score[j]);
printf("\n");
}
for(i=1;i<=10;i++)// i的范围要弄清楚
printf("%4d",grade[i]);
printf("\n");
}
void count(int *max,int *min,double *pass,double ave[],double f[],STUDENT stu[],int sum)//
{
int i,j,p_sum=0;//p_sum为期末成绩及格的总人数
int total[3]={0};//平时成绩,期末,总评成绩的初始值设为0
double temp;//存储平时成绩与平均平时成绩的差,期末成绩与期末平均成绩的差,总评成绩与总评平均的差
*max=*min=stu[0].score[1];//
if(stu[0].score[1]>=60) p_sum++;
for(i=1;i
{
if(stu[i].score[1]>*max) *max=stu[i].score[1];
if(stu[i].score[1]
if(stu[i].score[1]>=60) p_sum++;//p_sum为期末成绩及格的总人数
}
*pass=(1.0*p_sum/sum)*100;//及格率*100,输出及格率的时候用printf输出一个%,*pass%
for(i=0;i<3;i++)
for(j=0;j
total[
i]=total[i]+stu[j].score[i];//计算平时成绩和,期末和,总评成绩和
for(i=0;i<3;i++)
ave[i]=total[i]/sum;//计算平时平均分,期末平均分,总评平均分
for(i=0;i<3;j++)
{
f[i]=0;