解题思路:

注意事项:

  1. 多组输入代码实现

  2. 二级动态数组的内存分配及释放

  3. strcmp及strcpy函数



参考代码:

#include<stdio.h>
#include<string.h>
int main()
{
    int m;
    while(~scanf("%d",&m)){        //多组输入
        char **xm,middle_xm[101];        //建立二级动态姓名数组
        int *nl,*cj,i,j,k,n=101,min,middle_nlcj;        //建立一级动态年龄成绩数组
         
        //逐级分配二级姓名数组的内存空间
        xm=(char **)calloc(m,sizeof(char*));
        for(i=0;i<m;i++)
            xm[i]=(char *)calloc(n,sizeof(char));
             
        //为年龄和成绩动态数组分配空间
        nl=(int *)calloc(m,sizeof(int));
        cj=(int *)calloc(m,sizeof(int));
         
        //将输入的姓名字符串及年龄成绩分别放进姓名年龄成绩数组
        for(j=0;j<m;j++){
            scanf("%s",xm[j]);
            scanf("%d",&nl[j]);
            scanf("%d",&cj[j]);
        }
         
         
        //从小到大进行排序
        for(k=0;k<m;k++){
            min=k;
            for(i=k+1;i<m;i++){
                if(cj[i]<cj[min])
                    min=i;
                if(cj[i]==cj[min]){
                    if(strcmp(xm[i],xm[min])<0)
                        min=i;
                    else if(strcmp(xm[i],xm[min])==0)
                        if(nl[i]<nl[min])
                            min=i;
                }
            }
            middle_nlcj=nl[k];
            nl[k]=nl[min];
            nl[min]=middle_nlcj;
            middle_nlcj=cj[k];
            cj[k]=cj[min];
            cj[min]=middle_nlcj;
            strcpy(middle_xm,xm[k]);
            strcpy(xm[k],xm[min]);
            strcpy(xm[min],middle_xm);
        }
        
        //排序后输出
        for(j=0;j<m;j++)
            printf("%s %d %d\n",xm[j],nl[j],cj[j]);
            
        //释放动态数组
        for(i=0;i<m;i++)
            free(xm[i]);
        free(xm);
        free(nl);
        free(cj);
    }
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论