<C語言程式例項>輸入10個學生5門課的成績,分別用函式實現下列功能:①計算每個學生的平均分;②計算每門課的平均分;③找出所有50個分數中最高的分數所對應的學生和課程;④計算平均分方差;
阿新 • • 發佈:2021-01-15
<C語言程式例項>輸入10個學生5門課的成績,分別用函式實現下列功能:
①計算每個學生的平均分;
②計算每門課的平均分;
③找出所有50個分數中最高的分數所對應的學生和課程;
④計算平均分方差;
б=1/n·∑Xi²-〔∑Xi/n〕²;其中Xi為某一學生的平均值
程式碼如下:
#include "stdio.h"
#include "string.h"
#include "math.h"
void main()
{
int a[10][5];
int i;
int j;
/*********************函式宣告**************************/
void aver_stu(int a[10][5]);
void aver_score(int a[10][5]);
void max_core(int a[10][5]);
void fangCha(int a[10][5]);
/*********************成績輸入**************************/
for(i=0;i<10;i++)
{
printf("請輸入第%d個同學的五門成績:" ,i+1);
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
/********************每個學生的平均值***********************************/
aver_stu(a);
/********************每個學生的平均值***********************************/
aver_score(a);
/********************找出所有50分數中的最高分所對應的學生和課程********/
max_core (a);
/********************平均分方差***********************************/
fangCha(a);
}
/*****************每個學生的平均分******************************/
void aver_stu(int a[10][5])
{
float sum;
float ave;
int i,j;
for(i=0;i<10;i++)
{
for(j=0,sum=0.0;j<5;j++)//這裡sun要每一次迴圈後歸零
{sum+=a[i][j];}
ave=sum/5;
printf("第%d個學生的平均值為:%f\n",i+1,ave);
}
printf("-------------------------------------------------\n");
}
/*****************每門課的平均分******************************/
void aver_score(int a[10][5])
{
float sum;
float ave;
int i,j;
for(i=0;i<5;i++)
{
for(j=0,sum=0;j<10;j++)
{
sum+=a[j][i];
}
ave=sum/10;
printf("第%d門課程的平均分為:%f\n",i+1,ave);
}
printf("-------------------------------------------------\n");
}
/*****************找出所有50分數中的最高分所對應的學生和課程**********************/
void max_core(int a[10][5])
{
float hi=0;
int stu_num=0;
int scor_num=0;
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{
if(a[i][j]>hi)
{
hi=a[i][j];
stu_num=i+1;
scor_num=j+1;
}
}
}
printf("50個成績中最高分是:%f,對應第%d個同學的第%d門課程\n",hi,stu_num,scor_num);
printf("-------------------------------------------------\n");
}
/*****************計算平均分方差******************************/
void fangCha(int a[10][5])
{
float ave_stu[10];
int i,j;
float sum1=0;
float sum2=0;
float sum3=0;
float FC;
for(i=0;i<10;i++)
{
for(j=0,sum1=0;j<5;j++) //sum1每完成一次計算歸零
{
sum1+=a[i][j];
}
ave_stu[i]=sum1/5;//每名同學的五門課程的平均值,傳入陣列
}
for(i=0;i<10;i++)
{
sum2+=pow(ave_stu[i],2);
sum3+=ave_stu[i];//累加所有同學的平均值
}
FC=sum2/10-pow(sum3/10,2);
printf("平均分方差為:%f",FC);
}
寫在後面
這是博主自己看到這道題後的第一反映所編寫的程式,寫完之後在執行測試過程中發現這樣的一個問題,及題目要求的是找出所有50個分數中最高的分數所對應的學生和課程我所做的也確實能夠找出最高的分數所對應的學生和課程,但有個小bug,就是:他只能輸出第一位的,即若出現好幾個同學平分,則只能輸出輸入順序在前的同學的最高分科目和學生姓名。顯然,好幾個同學平分是會客觀存在的,這樣並不能說完美解決了問題0.0
歡迎大家提出你的見解,我們一同進步!Sulate!