C语言二维数组+函数+for语句

写出程序并给每一步注释,越详细越好,最好能举个具体的例子,不要用指针
某班期末考试科目为数学,英语,和物理,有最多不超过30人参加考试。考试后要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数

#include <stdio.h>
#include <stdlib.h>
#define   MAX_LEN  9                    /* 字符串最大长度 */
#define   STU_NUM 30                      /* 最多的学生人数 */
/*
定义一个录入成绩的方法,参数为学号数组、三门成绩数组、录入学生人数 
*/ 
void  ReadScore(long num[],int score[][3],int n)
{
    int i,k;
    for(i=0;i<n;i++)
    {printf("输入第%d个学生学号以及数学、英语、物理成绩:\n",i+1);
        scanf("%ld",&num[i]);
        getchar();//清除缓存 
        for(k=0;k<3;k++)
        {
            scanf("%d",&score[i][k]);//输入当前第i名学生的第k门成绩 
            getchar();
        }
    }
}

/*
定义一个计算学生总成绩、平均成绩的方法,参数为 总成绩数组、平均成绩数组、各科成绩二维数组、录入学生人数 
*/ 
void  Student(int Studentsum[STU_NUM],float Studentaver[STU_NUM],int score[][3],int n)
{
    int i,k,s;
    for(i=0;i<n;i++) //遍历每一个学生 
    {
        s=0;
        for(k=0;k<3;k++) //遍历每门成绩(一共三门) 
        {
            s+=score[i][k];//统计求当前学生i的总成绩 
        }
        Studentsum[i]=s;    
        Studentaver[i]=(float)s/3;// 统计求当前学生i的平均成绩 
    }
}


int main()
{
    //定义学生人数变量、成绩二维数组、学生总成绩数组 
    int n,score[STU_NUM][3],Studentsum[STU_NUM];
    //定义学号、学号数组 
    long no,num[STU_NUM];
    //定义平均分数组 
    float Studentaver[STU_NUM];
    printf("请输入学生人数:");
    scanf("%d",&n);
    //调用方法录入成绩 
    ReadScore(num,score,n);
    //调用方法计算总成绩、平均成绩 
    Student(Studentsum,Studentaver,score,n);
    printf("学号\t总分\t平均分\n");
    for(int t=0;t<n;t++)
    {
        printf("%ld\t%4d\t%4.1f\n",num[t],Studentsum[t],Studentaver[t]);
    }
    
    //按照总成绩进行排名  
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1-i;j++){
            if(Studentsum[j]<Studentsum[j+1]){
                //交换学号
                long temp=num[j];
                num[j]=num[j+1];
                num[j+1]=temp;
                 
                //交换总成绩 
                int temp1=Studentsum[j];
                Studentsum[j]=Studentsum[j+1];
                Studentsum[j+1]=temp1;
                
                //交换平均成绩
                int temp2=Studentaver[j];
                Studentaver[j]=Studentaver[j+1];
                Studentaver[j+1]=temp2;
                
                //交换各科成绩
                int temp3[]={0};
                temp3[0]=score[j][0];
                temp3[1]=score[j][1];
                temp3[2]=score[j][2];
                
                score[j][0]=score[j+1][0];
                score[j][1]=score[j+1][1];
                score[j][2]=score[j+1][2];
                
                score[j+1][0]=score[j][0];
                score[j+1][1]=score[j][1];
                score[j+1][2]=score[j][2];
            }
        }
    } 
    
    printf("\n名次    学号   数学成绩 英语成绩 物理成绩 总分 平均分\n");
    for(int i=0;i<n;i++)
    {
        printf("%d\t%ld\t",i+1,num[i]);
        for(int k=0;k<3;k++)
        {
            printf("%6d\t",score[i][k]);
        }
        printf("%6d\t%5.1f\n",Studentsum[i],Studentaver[i]);
    }
    
    printf("请输入待查询学号:");
    scanf("%ld",&no); 
    bool flag=true;
    for(int i=0;i<n;i++){
        if(no==num[i]){
            flag=false;
            printf("名次:%d,学号:%ld,数学成绩:%d,英语成绩:%d,物理成绩:%d\n",i+1,no,score[i][0],score[i][1],score[i][2]);
            break;
        }
    }
    if(flag)
        printf("当前学号不存在!"); 
    return 0;
}

矩阵转换,只需要行序号和列序号交换就行

#include <stdio.h>
int main()
{
    int a[3][4],b[4][3];
    int i,j,maxi,maxj,t,mini,minj;
    maxi=maxj = mini=minj0;
    for(i=0;i<3;i++)
      for(j=0;j<4;j++)
        scanf("%d",&a[i][j]);
    for(i=0;i<3;i++)
      for(j=0;j<4;j++)
      {
          b[j][i] = a[i][j];
          if(a[i][j] > a[maxi][maxj])
          {
              maxi = i;
              maxj = j;
          }
         if(a[i][j] < a[mini][minj])
          {
              mini = i;
              minj = j;
          }
      }
    for(i=0;i<4;i++)
    {
      for(j=0;j<3;j++)
        printf("%d ",b[i][j]);
      printf("\n"):
    }
    printf("最大值为: a[%d][%d]=%d\n",maxi,maxj,a[maxi][maxj]);
    printf("最小值为: a[%d][%d]=%d\n",mini,minj,a[mini][minj]);
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

你看下这篇博客吧, 应该有用👉

C语言数组——二维数组_C语言中文社区的博客-CSDN博客_c 二维数组 C语言目录C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语言程序的7个步骤和编程机制C语言基础-第一个C程序C语言基础-简单程序分析VS2019编写简单的C程序示例简单示例,VS2019调试C语言程序C语言基础-基本算法C语言基础-数据类型C语言中的输入输出函数C语言流程控制语句C语言数组——一维数组二维数组前面介绍了... https://blog.csdn.net/csdn_wangchong/article/details/104209962?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166632112016800182189873%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166632112016800182189873&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-104209962-null-null.nonecase&utm_term=C%E8%AF%AD%E8%A8%80%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84%2B%E5%87%BD%E6%95%B0%2Bfor%E8%AF%AD%E5%8F%A5&spm=1018.2226.3001.4450