#include<stdio.h>
int main()
{
float a, f,sum;
float score[4][5] = { 60,70,80,90,91,88,87,88,89,90,98,67,45,23,56,34,78,98,89,90 };
float arange1(float* p1);
float* search(float(*pointer)[5]);
float* search1(float(*pointer)[5], int n);
float* p1,*p2,*p3;
p1 =& score[0][0];
int i, j;
printf("第一门课程的平均分为:%5.2f\n", f = arange1(p1));
for (i = 0; i < 4; i++)
{
p2 = search(score + i);
if (p2 == *(score + i))
{
printf("两门以上不及格的同学学号为:%d\n", i);
printf("其五门课程的成绩分别为:");
for (j = 0; j < 5; j++)
printf("%8.2f", *(p2 + j));
printf("\n");
p3 = search1(score, i);
for (i = 0,sum=0; i < 5; i++)//求个人平均分
sum = sum + *(p3 + i);
a = sum / 5;
printf("其平均成绩为:%5.2f\n", a);
}
}
for (i = 0; i < 4; i++)
{
int j,m=0;
p3 = search1(score, i);
for (j = 0, sum = 0; j< 5; j++)//求个人平均分
sum = sum + *(p3 +j);
a = sum / 5;
for (j = 0; j < 5; j++)//求大于85分的课程数量
{
if (*(p3+j)>85)
m = m + 1;
}
if (m==5||a>90)
printf("成绩优异的学生学号为:%d\n", i);
}
return 0;
}
float arange1(float* p1)//求第一门课程的平均分
{
int i;
float f, sum = 0;
for (i = 0; i < 4; i++)
sum = sum + (*(p1 + i) + 0);
f = sum / 4;
return(f);
}
float* search(float(*pointer)[5])//标记有两门以上不及格同学
{
int i,m=0;
float* pt;
pt = NULL;
for (i=0; i < 5; i++)
{
if (*(*pointer + i) < 60)
m = m + 1;
}
if (m > 2)
pt = *pointer;
return(pt);
}
float* search1(float(*pointer)[5], int n)//确定二维数组里边的一维数组
{
float* pt;
pt = *(pointer + n);
return(pt);
}
照着书里给的例子,写了下来,还是挺有成就感的,但是似乎过于复杂了,日后可以加以改善。
if (m==5||a>90),这里把==写成了=,面对左值一时竟然有些无措。依旧还是度娘,原来使赋值语句的左值。可见自身对于基础知识的掌握还不牢固,加油哇!