那就这样吧e 2022-11-16 13:06 采纳率: 98.1%
浏览 6
已结题

列指针和行指针解决问题

img

img


这个是题目,要求用行指针或列指针解决问题,题目要求如图所示,看看该怎么思考动笔

  • 写回答

3条回答 默认 最新

  • 关注

    你这个数据在上一个问题里的啊。
    (1)
    定义二维数组scores[5][5]用来保存5个学生的学号和4门课程成绩
    int (* p)[5] = scores; 行指针访问

    定义二维数组scores[5][5]用来保存5个学生的学号和4门课程成绩,每行代表1个学生,每行第一列代表学生的学号,后面4行代表4门课程的成绩,
    int (* p)[5] = scores; //行指针,t = *(*(p + j) + i + 1);获取j行的第i门课程成绩
    
    

    代码(数据没有输入,直接用你上一个题目里的数据固定了):

    
    #include <stdio.h>
    //课程平均分,因为把学号也放在数组中了,所以m是5
    void average(int scores[][5], int n, int m, const char kc[][10])
    {
        int i, j, t;
        float ave = 0;
        int(*p)[5] = scores; //行指针
        for (i = 0; i < m - 1; i++) //m-1门课程,第0列是学号
        {
            ave = 0; //重置平均值
            for (j = 0; j < n; j++) //n个学生累加
            {
                t = *(*(p + j) + i + 1); //相当于scores[j][i+1]
                printf("%d ", t);
                ave += t; //累加i列的成绩
            }
            ave /= n;
            printf("%s:%.2f\n", kc[i], ave);
        }
    }
    //找出两门课不及格的学生
    void search(int scores[][5], int n, int m, const char name[][10])
    {
        int i, j, cnt = 0;
        float ave = 0;
        int(*p)[5] = scores; //行指针
        int* q;
        int flag = 0;
        printf("两门课以上不及格的学生:\n");
        for (i = 0; i < n; i++)
        {
            q = *(p + i);//第i行的指针
            cnt = 0;
            ave = 0;
            for (j = 1; j < m; j++)
            {
                ave += q[j];
                if (q[j] < 60)
                    cnt++;
            }
            ave /= (m - 1);
            if (cnt > 2) //多于2门不及格
            {
                flag = 1;
                //输出
                printf("%d %s ", q[0], name[i]);
                for (j = 1; j < m; j++)
                    printf("%d ", q[j]);
                printf("%.2f\n", ave);
            }
        }
        if (flag == 0)
            printf("没有符合条件的学生\n");
    }
    
    
    //找出所有课程成绩大于85分的学生
    void search2(int scores[][5], int n, int m, const char name[][10])
    {
        int i, j, cnt = 0,flag = 0;
        float ave = 0;
        int(*p)[5] = scores; //行指针
        int* q;
        printf("所有课程成绩大于等于85分的学生:\n");
        for (i = 0; i < n; i++)
        {
            q = *(p + i);//第i行的指针
            cnt = 0;
            ave = 0;
            for (j = 1; j < m; j++)
            {
                ave += q[j];
                if (q[j] >= 85)
                    cnt++;
            }
            ave /= 4;
            if (cnt == 4) //4门成绩都大于85
            {
                flag = 1;
                //输出
                printf("%d %s ", q[0], name[i]);
                for (j = 1; j < m; j++)
                    printf("%d ", q[j]);
                printf("%.2f\n", ave);
            }
        }
        if (flag == 0)
            printf("没有满足条件的学生\n");
    }
    
    int main()
    {
        const char kc[4][10] = { "math","eng","phys","chem" };
        const char name[5][10] = { "Zhang","Wang","Li","Sun","Zhao" };
        int scores[5][5] = { {3001,82,78,88,93},{3002,46,68,62,57},{3003,92,86,85,87},{3004,52,77,55,47},{3005,58,90,85,77} };
        average(scores, 5, 5, kc);
        search(scores, 5, 5, name);
        search2(scores, 5, 5, name);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 如何将下列的“无限压缩存储器”设计出来
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口