[7.11] 최대, 최소, 평균 구하기 예제
우선 내가 짠 코드에 대해서 보면 아래와 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float num = .0f, box = .0f, max_box = .0f, min_box = .0f;
float max = .0f, min = .0f, ave = .0f;
int count = 0;
while (scanf("%f", &num) == 1)
{
//최대값, 최소값
if (count == 0)
{
max = num;
min = num;
}
else
{
max_box = num;
if (max_box > max)
max = max_box;
min_box = num;
if (min_box < min)
min = min_box;
}
//평균값
box = num + box;
count++;
}
ave = box / count;
printf("min = %f. max = %f. ave = %f", min, max, ave);
return 0;
}
우선 float 형 으로 위와 아래에 두줄을 사용했다. 위에는 숫자를 임시로 담아두기 위한 float형 변수명. 알해는 최소와 최대를 담을 float 형 변수명.
int 형 변수는 나중에 평균값을 구해주기 위해서 count로 사용했다.
while 문으로 들어가보면 scanf는 float 형 자료형을 받게 되어있다. 만약 scanf 에 문자가 입력된다면, 종료된다. (원리는 정확히 모르겠으니, 문자는 float 변수명에 담길 수 없음.)
count가 0일때, scanf로 숫자를 입력하고 num에 담는다. 그리고 num을 max에 담아둠.
count가 1부터는, scanf로 받은 숫자를 num에 담는 과정까지는 똑같고 num을 max_box에 담아둔다.
count = 0 일때 입력받은 숫자는 max이고, count = 1 일때 입력받은 숫자는 max_box일때, max 와 max_box를 비교해서 max가 max_box보다 크다면 그대로 유지, max가 max_box보다 작다면, max = max_box.
count = 2 일때 입력받은 숫자는 다시 max_box에 넣어주고, max와 max_box의 비교를 반복한다면, 입력 받은 숫자 중 가장 큰 숫자를 max에 입력시켜놓을 수 있게된다.
같은 원리로 min 함수도 작성 했고, 코드를 읽어보고 이해해보자.
ave 부분
scanf로 입력받은 숫자들은 num을 통해 임시 저장되는데 다음 숫자를 입력 받고나면 num에 있던 기존의 숫자가 지워지고 새로운 숫자로 대체된다.
그래서 scanf로 숫자를 입력받아서 num라는 함수명에 담은 뒤에 num의 값과 box의 값을 더한 값을 box에 넣어준다.
box = num + box; box 초기 값은 0이기 때문에 count = 0 일때 box의 값은 box = num 이다.
count 는 숫자를 입력받은 총 횟수가 되므로, 숫자가 3개 들어왔으면 count = 3이 되어서 box / count를 해주면 평균값이 구해진다.