求大佬解决C语言问题 5

有3个学生,每个学生有4门课程的成绩,编程用指针函数实现:(1)在用户输入学生序号以后,能在主函数输出该学生的全部成绩;(2)找出其中有不及格的课程的学生并输出他们的成绩... 有3个学生,每个学生有4门课程的成绩,编程用指针函数实现:
(1)在用户输入学生序号以后,能在主函数输出该学生的全部成绩;
(2)找出其中有不及格的课程的学生并输出他们的成绩。
展开
 我来答
自我编程
2020-04-02 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

题目要求用指针函数,既返回值为指针类型的函数。

在主函数接收返回值并输出打印。

从输入的学生中找出有不及格的学生,并输出其不及格的课目成绩。(在打印所有学生的同时就筛选出存在不及格的学生,可减少循环次数,本题只有3个学生,假设更多的话)。

下面是代码:

#include <stdio.h>

#include <malloc.h>

#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<MS;printf("\n"),i++)//2、输出成绩

    {

        for(j=1,printf("学生编号%d:",stus[i][0]);j<MC+1;printf("%d ",stus[i][j]),j++)

            if(stus[i][j]<JG) p[cnt]=stus[i];//打印输出数组的同时,计算不及格的学生,减少循环次数

        if(p[cnt]!=NULL) cnt++;

    }

    for(i=0,printf("\n其中存在课程不及格的学生:\n");i<cnt;i++)

    {

        for(j=1,printf("学生编号%d,不及格的课程有:\n",p[i][0]);j<MC+1;j++)

            if(p[i][j]<JG) printf("--课程%d不及格,分数为:%d\n",j,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<MS;i++)

    {

        stus[i]=p,p+=MC+1;

        printf("请输入学生的%d科成绩:\n",MC);

        for(j=1,stus[i][0]=id++;j<MC+1;scanf("%d",&stus[i][j]),j++);

    }

    printf("\n");

    return stus;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式