cdsg


私信TA

用户名:dotcpp0701227

访问量:1473

签 名:

正十七

等  级
排  名 1144
经  验 3160
参赛次数 1
文章发表 82
年  龄 0
在职情况 学生
学  校 安徽师范大学
专  业

  自我简介:

落第儒生,顾府家丁。 卖面老板,随军参谋。 景泰状元,长洲知州。 十年水怪,三眼大叔。 飘飘何所似?天地一沙鸥。

解题思路:

注意事项:

  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 人评分

  评论区

  • «
  • »