80 likes | 365 Views
실습 : 최대치 구하기. 배열 score 에 저장된 5 개의 정수 중에서 최대치를 max 에 구하기 알고리즘 일단 최대치 max 를 배열원소 중 하나 로 정한다 . 보통 첫번째 원소로 지정 max = score[0]; 배열 score 의 나머지 모든 원소 score[i] 에 대하여 차례대로 max 와 비교하여 큰 값이 max 에 저장되도록 한다 . if (max < score[i]) max = score[i]; 최종적으로 max 에 들어 있는 값이 최대치가 된다 . 실습
E N D
실습: 최대치 구하기 배열 score에 저장된 5개의 정수 중에서 최대치를 max에 구하기 • 알고리즘 • 일단 최대치 max를 배열원소 중 하나로 정한다. • 보통 첫번째 원소로 지정 max = score[0]; • 배열 score의 나머지 모든 원소 score[i]에 대하여 차례대로 max와 비교하여 큰 값이 max에 저장되도록 한다. • if (max < score[i]) max = score[i]; • 최종적으로 max에 들어 있는 값이 최대치가 된다. • 실습 • 5명 학생의 수학점수(80, 90, 51, 60, 70)에 대해서 최대치와 최소치를 구하여 출력하기
실습: 최대치 구하기 max = score[0]; for ( i= _____ ; i < N ; i++) { if ( ) ________________; } printf(“최대치: %d “, max);
실습: 표준 편차 구하기 • 표준 편차 구하기 • xi : i번째 학생의 점수 • m : n 명의 평균 • a의 제곱근 : sqrt(a) , an : pow(a, n); • #include <math.h>가 필요함 • 실습 #define N 5 int s[N]={66, 88, 99, 55, 77};일 때 표준편차 구하기
[실습] 석차 구하기 ==================== 국어 수학 평균 석차 ==================== 90 81 85.50 2 80 91 85.50 2 70 81 75.50 4 60 81 70.50 5 100 100 100.00 1 • 나의 석차 • 나보다 점수가 높은 사람의 수 + 1 • 초기화 int kor[5]={90, 80, 70, 60, 100}; int math[5]={81, 91, 81, 81, 100}; int order[5]; double ave[5]; • 알고리즘 • kor[i], math[i]를 이용하여 ave[i]를 구함 • 배열 ave의 값으로 석차 order[i]를 구함 • kor, math, ave, order 배열을 출력
[실습] 석차 구하기 ==================== 국어 수학 평균 석차 ==================== 90 81 85.50 2 80 91 85.50 2 70 81 75.50 4 60 81 70.50 5 100 100 100.00 1 • 학생의 평균 • ave[i]= (double) (kor[i]+math[i]) / 2; • 첨자가 i인 학생의 석차 order[i] • 나의 석차 order[i]를 1로 초기화 • 나의 평균(ave[i])과 모든 학생의 평균(ave[u], u=0~N-1)을차례로 비교하면서내 평균이 ave[u]보다 작을 때마다나의 석차(order[i])를 1 증가 order[i]에는 첨자 i에 해당하는 학생의 석차가 저장된다.
[실습] 석차 구하기 i가 0일 때부터 N-1일 때까지 사각형 부분을 반복하면 모든 학생의 석차가 구해진다. order[0]=1; for (u=0; u<N; u++) { if (ave[0] < ave[u]) order[0]++; } ==================== 국어 수학 평균 석차 ==================== 90 81 85.50 2 80 91 85.50 2 70 81 75.50 4 60 81 70.50 5 100 100 100.00 1 order[1]=1; for (u=0; u<N; u++) { if (ave[1] < ave[u]) order[1]++; } : order[4]=1; for (u=0; u<N; u++) { if (ave[4] < ave[u]) order[4]++; }
최대치를 배열의 맨 뒤로 옮기기 a a 70 90 • 두 변수의 값을 바꾸기 b b 90 70 temp=a; a = b; (*) b=temp; a=b; (1) b=a; (2) 문제점 :(1)을 수행하면 다음과 같이 두 변수의 값이 같아짐(a의 원래 값이 지워지므로 b의 값을 70으로 바꿀 방법이 없어짐) 해결: (*)를 수행하기 전에 a의 원래 값을 다른 변수에 저장해 둔다. (*)수행후 temp 70 70 90 a a 70 90 b 90 b 90
최대치를 배열의 맨 뒤로 옮기기 • 이웃하는 두 원소 중 큰 값을 뒤의 원소가 되게 하는 것을 반복함 맨 마지막 원소에 가장 큰 값이 저장되게 된다. if ( n[i] > n[i+1] ) n[i]와 n[i+1]을 교환 이웃한 두 원소 중 큰 값은 계속해서 뒤로 밀려 맨 마지막에 위치하게 됨