[대체] 10. 정렬하기

2011. 2. 17. 01:20 from PROGRAMMING/C

1)오름차순 : 작 -> 큰 순서로의 나열
2)내림차순 : 큰 -> 작은값 순서로의 나열

원래---
199 100 -200 155 300

정렬후---
-200 100 155 199 300
*/
#include<stdio.h>
int main()
{
     int i,j,temp,score[5]={199,100,-200,155,300};
     printf("원래---\n");
     for(i=0;i<5;i++)
     {
         printf("%5d",score[i]);
     }
     printf("\n");

     //정렬하기
     for(i=0;i<4;i++)
     {
         for(j=i+1;j<5;j++)
         {
             if(score[i] > score[j])
             {
                 temp=score[i];
                 score[i]=score[j];
                 score[j]=temp;
             }
         }
     }

     printf("정렬후---\n");
     for(i=0;i<5;i++)
     {
         printf("%5d",score[i]);
     }
     printf("\n");

 

     return 0;
}

 


 

/성적처리에 정렬하기 추가/

/*5명의 data를 입력하여 다음처럼 성적처리!
#1)
이름: 홍 길 동
국어? 88
영어? 87
#2)
.....
------------------------*성적표*---------------------------
이름    국어 영어  총점  평균     평가
XXX     XX    XX   XXX   XX.X    X
...
평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F
*/

#include<stdio.h>
#define Si 5
#include<string.h>
int main()
{
    int i,j,tot[Si],kor[Si],eng[Si],rank[Si],temp;
    double ave[Si],tave;
    char grade[Si],name[Si][15],tgrade,tname[15];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("이름? ");
        fflush(stdin);
        gets(name[i]);//==gets(%name[i][0]);
        printf("국어? ");
        scanf("%d",&kor[i]);
        printf("영어? ");
        scanf("%d",&eng[i]);
        tot[i]=kor[i]+eng[i];
        ave[i]=tot[i]/2.0;
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
    //등수구하기
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if (i==j) continue;
            if(tot[i] < tot[j] ) rank[i]++;
        }
    }

    printf("--------------------------*성적표*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i],rank[i]);
    }
    //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if(rank[i] > rank[j])
            //  3                   1
            {
                strcpy(tname,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],tname);
                temp=kor[i];kor[i]=kor[j];kor[j]=temp;
                temp=eng[i];eng[i]=eng[j];eng[j]=temp;
                temp=tot[i];tot[i]=tot[j];tot[j]=temp;
                tave=ave[i];ave[i]=ave[j];ave[j]=tave;
                temp=rank[i];rank[i]=rank[j];rank[j]=temp;
                tgrade=grade[i];grade[i]=grade[j];grade[j]=tgrade;
            }
        }
    }
    printf("--------------------------*성적표(등수순)*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i],rank[i]);
    }
    return 0;
}

'PROGRAMMING > C' 카테고리의 다른 글

[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
[대체] 정렬, rank실습  (0) 2011.02.17
[대체] 9. 배열 예제  (0) 2011.02.17
[대체] 9.배열 ① 일차원배열  (0) 2011.02.17
[대체] 8.다중반복문  (0) 2011.02.16
Posted by 마마필로 :