题目要求用指针函数,既返回值为指针类型的函数。
在主函数接收返回值并输出打印。
从输入的学生中找出有不及格的学生,并输出其不及格的课目成绩。(在打印所有学生的同时就筛选出存在不及格的学生,可减少循环次数,本题只有3个学生,败慧假设更多的话)。
下面是代码:
#include
#include
#define JG 60//及格分数线
#define MS 3//学生人数
#define MC 4//课程数量
int **input();
int main()
{
int i,j,*p[MS]={NULL},cnt=0;
int **stus=NULL;
printf("输入的%d个学生%d科成绩分别为:\n",MS,MC);
stus=input();//1、输入
if(!stus) return 1;
for(i=0;i { for(j=1,printf("学生编号%d:",stus[i][0]);j if(stus[i][j] if(p[cnt]!=NULL) cnt++; } for(i=0,printf("\n其中存在课程不及格的学生:\n");i { for(j=1,printf("学生编号%d,不及格的课程有:\n",p[i][0]);j if(p[i][j] printf("\n"); } //malloc申请的内存需要手动释放,这里可写free释放,因为程序到此结束,自动释放 察察答 了,我就不写了。 return 0; } int **input() { static int id=1;//stus数组第1列为学生编号(唯一的),id是学生编号自增序列 int **stus=NULL,*p=NULL,i,j; p=(int *)malloc(sizeof(int)*MS*(MC+1)); if(!p) return NULL; stus=(int **)malloc(sizeof(int *)*MS); if(!stus) return NULL; for(i=0;i 没散 { stus[i]=p,p+=MC+1; printf("请输入学生的%d科成绩:\n",MC); for(j=1,stus[i][0]=id++;j } printf("\n"); return stus; }