二维数组与指针,其中发现关于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 编辑 ]