[21일차, 22일차](홍정모의따배c)최대, 최소, 평균 구하기 예제
*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시
안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.
정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고
제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소
생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면
'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.
강의가 시작하자마자 바로 문제
- 문제
위와같이 입력한 숫자중
가장 작은 값과 가장 큰값을 구하고 그것의 평균을 구하는 예제를
조건연산자를 활용해서 만들어보자
- 교수님코드
#include <stdio.h>
#include <float.h>
int main()
{
float max = -FLT_MAX;
float min = FLT_MAX;
float sum = 0.0f;
float input;
int n = 0;
while (scanf("%f", &input) == 1)
{
//max =
//min =
sum += input;
//TODO: ignore negative values
n++; //Count number of inputs
}
if (n > 0)
printf("min = %f, max = %f, ave = %f\n", min, max, sum / n);
else
printf("No input\n");
return 0;;
}
위에 max와 min에 논리연산자를 입력하면된다.
솔직히
생일껴서
이틀을 놀러다니며 고민했는데
도저히 모르겠다..
- 교수님코드
#include <stdio.h>
#include <float.h>
int main()
{
float max = -FLT_MAX;
float min = FLT_MAX;
float sum = 0.0f;
float input;
int n = 0;
while (scanf("%f", &input) == 1)
{
max = (input > max) ? input : max;
min = (input < min) ? input : min;
sum += input;
//TODO: ignore negative values
n++; //Count number of inputs
}
if (n > 0)
printf("min = %f, max = %f, ave = %f\n", min, max, sum / n);
else
printf("No input\n");
return 0;;
}
max = (input > max) ? input : max;
max는 float자료형중 가장 작은수인 -flt_max가 대입되어있다
처음입력한 숫자는 당연히 대입되어있는 max보다 크기때문에 일단 입력값이
들어간다.
만약 처음입력한 수보다 그다음 입력한숫자가 클때 큰 숫자가 대입된다.
이런식으로 대입한값과 비교하면서 큰 수를 구하는것이다.
아직 내 머릿속에 대입에 대한 개념이 완전히 자리잡지 못한것같다.
다음은 continue를 활용해
0보다 작으면 무시하고 100보다 커도 무시하는 코드를 알아보자.
- 교수님코드
#include <stdio.h>
#include <float.h>
int main()
{
float max = -FLT_MAX;
float min = FLT_MAX;
float sum = 0.0f;
float input;
int n = 0;
while (scanf("%f", &input) == 1)
{
if(input < 0.0f) continue;
if(input > 100.f) continue;
max = (input > max) ? input : max;
min = (input < min) ? input : min;
sum += input;
n++; //Count number of inputs
}
if (n > 0)
printf("min = %f, max = %f, ave = %f\n", min, max, sum / n);
else
printf("No input\n");
return 0;;
}
여기서 함정은
if문이
max와 min에 대입하는 코드뒤에 오는것이아닌
전에 와야 continue를 만나서 무시한다
뒤에오면 이미 input값을 받고 연산을 처리하는 과정을 거친다.
#include <stdio.h>
#include <float.h>
int main()
{
float max = -FLT_MAX;
float min = FLT_MAX;
float sum = 0.0f;
float input;
int n = 0;
while (scanf("%f", &input) == 1)
{
if(input < 0.0f||input > 100.f) continue;
max = (input > max) ? input : max;
min = (input < min) ? input : min;
sum += input;
n++; //Count number of inputs
}
if (n > 0)
printf("min = %f, max = %f, ave = %f\n", min, max, sum / n);
else
printf("No input\n");
return 0;;
}
둘이 이렇게 합치기도 가능