컴퓨터를 공부하고자 마음먹은지 N일차

[21일차, 22일](홍정모의따배c)최대, 최소, 평균 구하기 예제 본문

🖥C

[21일차, 22일](홍정모의따배c)최대, 최소, 평균 구하기 예제

졸린새 2020. 9. 29. 23:57
728x90

[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;;
    
}

둘이 이렇게 합치기도 가능

Comments