/*=============================================================
有个班,3个学生,各学4门课,计算总平均分数,以及输出第n个学生的成绩 和平均成绩
算法分析:
1、定义一个指针变量指向成绩数组的列元素,逐个元素移动求算总平均成绩
2、定义一个指向4个元素的指针变量,逐行移动求取第n个学生的平均成绩和各门课的成绩
==============================================================
作者:最后的村长
时间:2009年10月28日
工具:DEV C++ 4.9.9.2
version:1.0
==============================================================*/
#include
#include
#define N 3
#define M 4
/*=============================================================*/
int main()
{
void average(float *p,int n) ;//声明求总平均成绩函数
void search(float (*p)[4],int n);//声明求第n个学生平均成绩和输出各门课成绩函数
float score[N][M]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
average(score[0],N*M);//求总平均成绩函数 ,以指向首个元素地址的指针变量为实参
search(score,2);//求第n个学生平均成绩和输出各门课成绩函数 ,以数组的首地址为实参变量
system("PAUSE");
return 0;
}
void average(float *p,int n)
{
float *p_end;//定义指向数组末端的指针
float sum=0,aver;
p_end=p+n-1;//初始化数组末端指针
for(;p<=p_end;p++)
sum=sum+(*p);//sum等于各个元素之和
aver=sum/n;//求总平均成绩
printf("平均成绩=%5.2f\n",aver);
}
void search(float (*p)[4],int n)//定义指向一维4个元素的指针变量
{
int i;
float sum=0,average_solo;
printf("第%d个学生的成绩是:\n",n+1);
for(int i=0;i<4;i++)
{
sum=sum+*(*(p+n)+i);//求取第n个学生的总成绩
printf(" %5.2f ",*(*(p+n)+i));//按行移动输出第n个学生的各门课的成绩
}
average_solo=sum/M;//求第n个学生的平均成绩
printf("\n第%d个学生的平均成绩是:%5.2f\n",n+1,average_solo);
}