-
C언어 배열을 이용한 성적 입력, 정렬Programming/C 2017. 7. 12. 16:48반응형
배열을 이용한 성적 입력, 정렬
1234567891011121314151617181920212223242526272829303132333435int 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
84
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