ABOUT ME

chanho Yoon
chyoon0512@gmail.com


깃허브


블로그 이사!

이 블로그로 이사했어요!!


Today
-
Yesterday
-
Total
-
  • C언어 배열을 이용한 성적 입력, 정렬
    Programming/C 2017. 7. 12. 16:48
    반응형

    배열을 이용한 성적 입력, 정렬

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    int main()
    {
        int student_arr[7];
        int student_arr1[7];
        int i, j;
        int tmp;
        for (i = 0; i < 7; i++) {
            printf("학생 %d 성적을 입력 : ", i + 1);
            scanf_s("%d"&student_arr1[i], sizeof(int));
        }
     
        for (i = 0; i < 7; i++)
            student_arr[i] = student_arr1[i];
     
        for (i = 0; i < 7; i++) {
            for (j = i; j < 7; j++) {
                if (student_arr[i] < student_arr[j]) {
                    tmp = student_arr[i];
                    student_arr[i] = student_arr[j];
                    student_arr[j] = tmp;
                }
            }
        }
     
        for (i = 0; i < 7; i++) {
            for (j = 0; j < 7; j++) {
                if (student_arr1[j] == student_arr[i]) {
                    printf("학생 %d 성적: %d \n", j+1, student_arr[i]);
                    break;
                }
            }
        }
     
        return 0;
    }
    cs



    입력 결과



    설명

    int student_arr[7]; //성적이 큰 수부터 정렬할 배열
    int student_arr1[7]; //처음에 성적을 입력 받을 배열


    int i, j; // 반복문을 돌릴 변수
    int tmp; // 정렬할 때에 발생되는 변수끼리의 값을 교체할 때 필요한 임시변수



        for (i = 0; i < 7; i++) {
            printf("학생 %d 성적을 입력 : ", i + 1);
            scanf_s("%d"&student_arr1[i], sizeof(int));
        }

    배열은 인덱스 0번부터 시작 하기 때문에 출력문에서는 i+1로 사람이 조금 더 이해하기 편하게 출력된 화면을 보여주기 위해서 사용 0번째 학생 이라고 하기에는 어색하지 않은가??

    반복문은 0번째 인덱스부터 6번째 인덱스까지 총 7명의 학생을 입력 받는다. 

    index0 

    index1 

    index2 

    index3 

    index4 

    index5 

    index6 



        for (i = 0; i < 7; i++)
            student_arr[i] = student_arr1[i];

    arr은 큰 수로 정렬하기 위한 배열로 arr1에서 받은 성적을 그대로 arr 배열에 복사한다.


        for (i = 0; i < 7; i++) {
            for (j = i; j < 7; j++) {
                if (student_arr[i] < student_arr[j]) {
                    tmp = student_arr[i];
                    student_arr[i] = student_arr[j];
                    student_arr[j] = tmp;
                }
            }
        }

    arr[j] 가 arr[i] 보다 클 경우 큰 수가 가장 왼쪽으로 와야 하기 때문에 자리를 교체한다


    ex)

    if(arr[0] < arr[0]) 조건에 성립하지 않아서 넘어감 j+1;

    50 

    60 

    40 

    80 

    90 

     70

    8

    if(arr[0] < arr[1]) 조건에 성립 함으로 자리 교체

    60

    50 

    40 

    80 

    90 

     70

    84 

    if(arr[0] < arr[2]) 조건에 성립하지 않아서 넘어감 j+1;

    60

    50 

    40 

    80 

    90 

     70

    84 

    if(arr[0] < arr[3]) 조건에 성립 함으로 자리 교체

    80

    50 

    40 

    60

    90 

     70

    84 

    if(arr[0] < arr[4]) 조건에 성립 함으로 자리 교체

    90

    50 

    40 

    60

    80

     70

    84 


    이런 형식으로 비교하면서 정렬을 하는건데 이것 말고도 정렬하는 방법은 많으니 따로 검색해서 찾아보시는 것도 좋은 방법 입니다. 직접 노트에 이렇게 쓰면서 하면 금방 어떻게 되는 것인지 알게 될겁니다.



        for (i = 0; i < 7; i++) {
            for (j = 0; j < 7; j++) {
                if (student_arr1[j] == student_arr[i]) {
                    printf("학생 %d 성적: %d \n", j+1, student_arr[i]);
                    break;
                }
            }
        }

    여기는 이제 arr1[] 정렬되지 않은 배열과 정렬이 된 arr[]이 서로 비교를 해서 점수가 똑같을 경우 

    실행 결과에서 보듯이 내림차순으로 정렬이된 arr[]에서 arr1[index번째] 학생의 점수를 출력하는 것 입니다.

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

    포인터 *연산자 , & 참조연산자 이해  (0) 2017.07.13

    댓글

Designed by Tistory.