C语言求学生及格率 保留两位小数,C语言案例 学生试卷分数统计

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;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值