解题思路:
例8.26对例8.25中的学生,找出其中有不及格的课程的学生及其学生号。
- 定义二维数组score存放成绩
- 定义输出某学生全部成绩的函数search,它是返回指针的函数,形参是行指针和整型
- 主函数将score和要找的学号k传递给形参
- 函数的返回值是&score[k][0](k号学生的序号为0的课程地址)
- 在主函数中输出该生的全部成绩
#include <stdio.h>
int main()
{float score[ ][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; //定义数组,存放成绩
float *search(float (*pointer)[4],int n); // 函数声明
float *p;
int i,k;
printf("enter the number of student:");
scanf("%d",&k); // 输入要找的学生的序号
printf("The scores of No.%d are:\n",k);
p=search(score,k); //调用search函数,返回score[k][0]的地址
for(i=0;i<4;i++)
printf("%5.2f\t",*(p+i)); // 输出score[k][0]到score[k][3]的值
printf("\n");
return 0;
}
float *search(float (*pointer)[4],int n) // 定义函数,形参pointer是指向一维数组的指针变量
{float *pt;
pt=*(pointer+n); // pt的值是&score[k][0]
return(pt);
}
例8.26对例8.25中的学生,找出其中有不及格的课程的学生及其学生号。
解题思路:
在例8.25程序基础上修改。
main函数不是只调用一次search函数,而是先后调用3次search函数,其中检查3个学生有无不及格的课程,如果有,就返回该学生的0号课程的地址&score[i][0],否则返回NULL
在main函数中检查返回值,输出有不及格学生4门课的成绩
在例8.25程序基础上修改。
main函数不是只调用一次search函数,而是先后调用3次search函数,其中检查3个学生有无不及格的课程,如果有,就返回该学生的0号课程的地址&score[i][0],否则返回NULL
在main函数中检查返回值,输出有不及格学生4门课的成绩
#include <stdio.h>
int main()
{float score[ ][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; //定义数组,存放成绩
float *search(float (*pointer)[4]); // 函数声明
float *p;
int i,j;
for(i=0;i<3;i++)
{p=search(score+i); //调用search函数,如有不及格返回score[i][0]的地址,否则返回NULL,
if(p==*(score+i)) //如果返回的是score[i][0]的地址
{printf("No.%d score:",i);
for(j=0;j<4;j++)
printf("%5.2f ",*(p+j)); // 输出score[i][0]到score[i][3]的值
printf("\n");
}
}
return 0;
}
float *search(float (*pointer)[4]) // 定义函数,形参pointer是指向一维数组的指针变量
{int i=0;
float *pt;
pt=NULL; // 先使pt的值为NULL
for(;i<4;i++)
if(*(*pointer+i)<60) pt=*pointer; // 如果有不及格课程,使pt指向score[i][0]
return(pt);
}