用指针当函数参数,传二维数组中的数据
//一个班3个学生,3门课程
#include<stdio.h>
void average(float (*p)[3],int n) //求第一门课程的平均分
{
float ave,sum=0;
int i,q;
q=n-1;
for(i=0;i<3;i++)
{
sum=sum+*(*(p+i)+q);
}
ave=sum/3;
printf("第一门课程的平均分是:");
printf("the average score is:%f\n",ave);
}
void fail(float (*score)[3]) //要想传入二维数组,需这样引用做参数 //找出两门及以上课程不及格的学生
{
int k=0,i,j;
float a;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(*(*(score+i)+j)<60)
{k++;}
}
while(k>=2)
{
printf("有两门及以上不及格的同学学号是%d\n",i+1);
printf("他的所有成绩如下:");
for(j=0;j<3;j++)
{
printf("%f ",*(*(score+i)+j));
}
a=(*(*(score+i)+0)+*(*(score+i)+1)+*(*(score+i)+2))/3;
printf("\n他的平均成绩为:%f\n",a);
k=0;
}
}
}
void excel(float (*score)[3]) //找出优秀的学生
{
int flag=0,i,j;
float ave1,sum1;
for(i=0;i<3;i++)
{
sum1=0;
for(j=0;j<3;j++)
{
sum1=sum1+*(*(score+i)+j);
if(*(*(score+i)+j)>85)
{
flag++;
}
}
ave1=sum1/3;
if(ave1>90)
{
printf("平均成绩在90分以上的学生学号为:%d\n",i+1);
}
if(flag==3)
{
printf("全部成绩都在85分以上的学生学号为:%d\n",i+1);
flag=0;
}
}
}
void main()
{
int i,j;
float score[3][3]={0};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("请输入序号为%d的学生的第%d门成绩:\n",i+1,j+1);
scanf("%f",&score[i][j]);
}
}
average(score,1);
fail(score);
excel(score);
}
调试过程中遇到的问题及体会:
1.因为刚开始是设置数组为整型,后来因为算成绩才改成浮点型,但是输出语句中的%d没有跟着改成%f,因而打印出来的成绩结果总是显示为0 0 0.以后一定要注意同步修改这个问题。
2.main()函数中的scanf语句又忘记加&了,故而一输入程序就崩溃。
3.老是忘记设置循环停止条件,总是要跑一遍才知道,比如void fail(float (*score)[3]) 中的k=0那里。
4.明白了如何用指针将二维数组传入函数里进行调用。