二维数组与指针,其中发现关于scanf和函数返回值得问题,向各位请教!!!
问题:1、输入3个学生的4门成绩(3*4矩阵);
2、计算所有成绩平均分(总分/12);
3、查找第n个学生的成绩,并输出;
程序设计:
第一种,不利用函数返回值,在调用函数中直接输出结果:
程序代码:#include<stdio.h>
void average(float *p,int n);//计算成绩平均值,并在函数中输出。
void search(float (*p)[4],int n);//查找第n名学生的成绩,并输出。
void main()
{
float score[3][4],ave;
int i,j,n;
printf("The students' scores are:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%f ",&score[i][j]);
}
printf("\n");//此句本想使输入每个学生4四门成绩之后自动换行,但是并没有效果。
}
printf("The averange of scores is:\n");
average(*score,12);
printf("Search the scores of No.n,please input n:\n");
scanf("%d",&n);//此句本想等前几句printf输出之后,再输入,可是却要和上句scanf一起输入。
printf("\n");
search(score,n);
}
void average(float *p,int n)
{
float sum=0,ave;
float *p_end;
p_end=p+n;
for(;p<p_end;p++) sum=sum+(*p);
ave=sum/n;
printf("%f\n",ave);
}
void search(float (*p)[4],int n)
{
int i;
printf("the scores of No.%d is:\n",n);
for(i=0;i<4;i++) printf("%f",*(*(p+n)+i));
}程序虽然能执行;
但发现一些问题:
1、本程序中利用中的第一个scanf语句本来的想法是这样的:每输入4个数(也就是一个学生的全部4门成绩),自动换行。结果没有达到效果。程序标红部分。
2、第二个scanf语句,本来想等上面的程序执行完,在输入n,也就是代表查找第几个学生,不过却要和前面的scanf语句一起输入。不知道怎样能达到效果。程序标绿部分。
3、之后又将average函数该为利用返回值,不在函数中利用printf函数,而是返回计算出来的平均值,在主函数中付值给变量,然后再输出,结果输出的结果怎样都是零,不知道哪错鸟???程序如下:
第二种,利用函数返回值:
程序代码:#include<stdio.h>
int average(float *p,int n);//计算成绩平均值。
void search(float (*p)[4],int n);//查找第n名学生的成绩,并输出。
void main()
{
float score[3][4],ave;
int i,j,n;
printf("The students' scores are:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%f ",&score[i][j]);
}
printf("\n");//此句本想使输入每个学生4四门成绩之后自动换行,但是并没有效果。
}
printf("The averange of scores is:\n");
ave=average(*score,12);//另ave等于函数的返回值。
printf("%d\n",ave);//输出ave。
printf("Search the scores of No.n,please input n:\n");
scanf("%d",&n);//此句本想等前几句printf输出之后,再输入,可是却要和上句scanf一起输入。
printf("\n");
search(score,n);
}
int average(float *p,int n)
{
float sum=0,ave1;
float *p_end;
p_end=p+n;
for(;p<p_end;p++) sum=sum+(*p);
ave1=sum/n;
return (ave1);//改为返回平均值,不在函数中输出。
}
void search(float (*p)[4],int n)
{
int i;
printf("the scores of No.%d is:\n",n);
for(i=0;i<4;i++) printf("%f",*(*(p+n)+i));
}请各位大神帮忙诊断下,看看怎样能解决,是不是我什么地方没搞清楚???谢谢啦!!!
[ 本帖最后由 马也 于 2012-8-10 14:46 编辑 ]





)