#include
#include
void aver_stu(int t[][5]); //定义学生平均分函数
void aver_course(int t[][5]); //定义课程平均分函数
void high(int t[][5]); //定义最高分函数
void vari(int t[][5]); //定义方差函数
int main()
{
int stu[10][5];
int i, j;
for (i=0; i<10; i++)
for (j=0; j<5; j++)
scanf("%d", &stu[i][j]); //输入10个学生各5门课的成绩
aver_stu(stu); //调用学生平均分函数
aver_course(stu); //调用课程平均分函数
high(stu); //调用最高分函数
vari(stu); //调用方差函数
return 0;
}
//学生平均分函数
void aver_stu(int t[][5])
{
int i, j;
float k, ave;
for (i=0; i<10; i++){
for (j=0, k=0.0; j<5; j++)
k+=t[i][j];
ave=k/5;
printf("No.%d student average is %f\n", i+1, ave);
}
}
//课程平均分函数
void aver_course(int t[][5])
{
int i, j;
float k, ave;
for (j=0; j<5; j++){
for (i=0, k=0.0; i<10; i++)
k+=t[i][j];
ave=k/10;
printf("No.%d course average is %f\n", j+1, ave);
}
}
//最高分函数
void high(int t[][5])
{
int i, j, h, stu, cour;
for (i=0, h=0, stu=0, cour=0; i<10; i++){
for (j=0, j<5; j++)
if (t[i][j]>h){
h=t[i][j];
stu=i+1;
cour=j+1;
}
}
printf("The highest score is %d, from No.%d student & No.%d course\n", h, stu, cour);
}
//方差函数
void vari(int t[][5])
{
int i, j, k, m;
float temp[10], var, x1, x2;
for (i=0, m=0; i<10; i++, m++){
for (j=0, k=0; j<5; j++)
k+=t[i][j];
temp[m]=k/5;
}
for (i=m=x1=x2=0; i<10; i++){
x1+=pow(temp[i], 2);
x2+=temp[i];
}
var=x1/10-pow(x2/10, 2);
printf("The variance is %f\n", var);
}
scanf()用法:
输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。
scanf("%s",s);改为scanf("%s",&s);
scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);
格式控制字符串包含:格式控制说明,普通字符。
1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)
2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。
3、输入的参数是变量的地址,所以要在变量前面加&。
相信我这个是最简单的了. 你看看. 有不明白的可以问我.#include
void main()
{
float stu_ave[10],lessom_ave[5]={0.0};
//stu_ave用于存放每个学生的总成绩,lessom_ave用于存放5门课的总成绩 float t1,t2,t3,t4,t5; //用于输入每个学生5门课的成绩.
int i;
for(i=0;i<10;i++)
{
printf("输入第%d个学生5门课的成绩: ",i+1);
scanf("%f%f%f%f%f",&t1,&t2,&t3,&t4,&t5);
stu_ave[i]=t1+t2+t3+t4+t5; //计算每个学生的总成绩;
//计算5门课的总分.
lessom_ave[0]+=t1;
lessom_ave[1]+=t2;
lessom_ave[2]+=t3;
lessom_ave[3]+=t4;
lessom_ave[4]+=t5;
}
//计算每个学生的平均分.并输出
for(i=0;i<10;i++)
{
stu_ave[i]/=5;
printf("第%d个学生的平均分:%.3f\n",i+1,stu_ave[i]);
}printf("\n\n");
//计算5门课程的平均分.并输出
for(i=0;i<5;i++)
{
lessom_ave[i]/=10;
printf("第%d门课的平均分:%.3f\n",i+1,lessom_ave[i]);
}
}
这里定义的数组score[2][3]
这里使用的是max=a[0][0],
=(v[0]+v[1]/3;没有括号)
printf("the 平均成绩是%d",v[i]);这里输且仅输出一次,此时i=2,是个越界的值
这样看这段代码本身就是错的,没有什么可取的地方
下面这段是谭老师参考书上的一个例题,大意相似,可以参考一下
要求: 通过键盘输入3名学生4门课程的成绩,
分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。
#include
#include
main()
{ float a[4][5],sum1,sum2;
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
{sum1=0;
for(j=0;j<4;j++)
sum1+=a[i][j];
a[i][4]=sum1/4;
}
for(j=0;j<5;j++)
{ sum2=0;
for(i=0;i<3;i++)
sum2+=a[i][j];
a[3][j]=sum2/3;
}
for(i=0;i<4;i++)
{ for(j=0;j<5;j++)
printf("%6.2f",a[i][j]);
printf("\n");
}
}
#include
#include
main()
{
float a[11][6],sum1,sum2;
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{
scanf("%f",&a[i][j]);
}
}
for(i=0;i<10;i++)
{
sum1=0;
for(j=0;j<5;j++)
{
sum1+=a[i][j];
a[i][5]=sum1/5;
}
}
for(j=0;j<=5;j++)
{
sum2=0;
for(i=0;i<10;i++)
{
sum2+=a[i][j];
a[10][j]=sum2/10;
}
}
for(i=0;i<=10;i++)
{
for(j=0;j<=5;j++)
{
printf("%6.2f",a[i][j]);
}
printf("\n");
}
}
打印bug..