본문 바로가기
Drill/프로그래밍언어

[프로그래밍언어]쉽게 풀어쓴 C언어 Express 3장 프로그램 구성요소 Programming

by wintercamo3482 2024. 11. 16.

01 사용자로부터 세 개의 실수를 입력받은 후, 합계와 평균값을 계산하여 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
    double x, y, z, sum, avg;

    printf("실수를 입력하시오: ");
    scanf("%lf", &x);

    printf("실수를 입력하시오: ");
    scanf("%lf", &y);

    printf("실수를 입력하시오: ");
    scanf("%lf", &z);

    sum = x + y + z;
    avg = sum / 3;

    printf("합은 %lf이고 평균은 %lf입니다.\n", sum, avg);
    return 0;
}

 

데이터 유형을 다루는 챕터에서 더 자세하게 다룰 예정이긴한데, 실수를 입력받고 이를 저장하는 변수 역시 실수로 지정해야한다.

 

그리고 부동 소수점 데이터 유형 중 double은 %lf을 사용해서 출력한다.

02 미국에서는 거리를 표시하는데 마일을 사용한다. 마일을 미터로 환산하는 프로그램을 만들어보자. 사용자로부터 마일단위로 거리를 입력 받아서 변수에 저장한다. 이 변수에 1,609를 곱하여 미터로 변환한다. 미터로 변환된 값을 화면에 출력한다. 실수값을 사용한다.

#include <stdio.h>

int main(void)
{
    double mile, meter;

    printf("마일을 입력하시오: ");
    scanf("%lf", &mile);

    meter = 1609.0 *mile;

    printf("%.1lf이고 평균은 %lf미터입니다.\n", mile, meter);
    return 0;
}

 

마찬가지로 다음 추후 게시물에서 다룰 예정이지만 실수형 데이터들은 출력하면 소수점이하가 0이더라도 일단 출력을 한다.

 

이게 싫거나 n 번째까지만 표시하고 싶은 경우라면 %.0lf (double일 경우) 혹은 %.f (float일 경우) 이렇게 해주면 x번째 소수점까지만 표시된다.

03 사용자로부터 삼각형의 높이와 밑변을 받아서 넓이를 계산하여 출력하는 프로그램을 작성하라. 단 모든 데이터는 실수로 입력되며 출력도 모두 실수형으로 하여야 한다.

#include <stdio.h>

int main(void)
{
    double base, height, area;

    printf("삼각형의 밑변: ");
    scanf("%lf", &base);

    printf("삼각형의 높이: ");
    scanf("%lf", &height);

    area = 0.5 * height * base;

    printf("삼각형의 넓이: %lf\n", area);

    return 0;
}

 

수학 수식으로 치면 f(x, y) = 0.5 * x * y 인데, 이 이부분을 코드로 나타내면 위와 같다.

04 섭씨 온도와 화씨 온도는 다음과 같은 수식을 만족한다. 사용자로부터 화씨 온도를 받아서 섭씨온도로 환산하여 출력하는 프로그램을 작성하라. 온도는 실수형으로 처리한다.

#include <stdio.h>

int main(void)
{
    double f, c;

    printf("화씨값을 입력하시오: ");
    scanf("%lf", &f);

    c = (5.0 / 9.0) * (f - 32.0);

    printf("섭씨값은 %lf도입니다.\n", c);


    return 0;
}

 

공식에 따르면 C = 5 / 9 * (F - 32)이다.

 

그러나 C언어 코드에 5.0나 9.0가 아니라 그냥 5와 9를 넣으면 0.0000이라는 결과가 출력될 것이다.

 

5.0처럼 소수점을 표시한 것은 실수형 값이고, 그냥 5나 9같은 것들은 정수형 상수이다.

 

이렇게 자료형이 다른 변수끼리 연산을 시도하게 된다면, 컴파일러에선 일단 이 자료형을 똑같은 자료형으로 변환하여 연산한 다음, 결과를 출력한다.

 

즉, c = (5 / 9) * (f - 32); 이런 식으로 연산을 하게 된다면, (5 / 9)가 정수형으로 계산될 것이고, int형의 특성상 소수점 이하

는 버리기 때문에 0이 되버린다.

 

그래서 c = 0 * ( f - 32 ); 가 되기 때문에 결과가 0으로 출력되는 것이다.

 

그러나 자주 사용하는 자료형의 크기는 int < float < double이다.

 

즉, c = (5 / 9.0) * (f - 32); 이렇게 할 경우라면 정수형 상수인 5가 5.0라는 실수형 상수로 변환되어서 연산되기 때문에 정상적인 결과가 나온다.

 

그러나 이런식으로 예기치 못한 결과가 나올 수도 있기 때문에 연산을 할 때는 될 수 있으면 자료형을 통일시키고 연산하는 것이 좋다.

 

자료형에 대한 것은 다음 챕터에서 더 깊게 다룰 것이니 당장은 이 정도만 알아두도록 한다.

05 다항식 3x^2 + 7x + 11의 값을 계산하는 프로그램을 작성하라. x의 값은 실수로 사용자에게 입력받는다.

#include <stdio.h>

int main(void)
{
    double x, result;

    printf("실수를 입력하시오: ");
    scanf("%lf", &x);

    result = 3.0*x*x + 7.0 * x + 11.0;

    printf("다항식의 값은 %lf\n", result);

    return 0;
}

 

위 문제의 해결에서 언급한 것처럼 실수를 입력받고 실수 출력이 나오기를 원한다면 수식에 있는 모든 상수(3.0, 7.0 등)은 실수로 통일시키는 게 좋다.

 

제곱의 경우엔 단순히 한 번 같은 것을 더 곱하면 되지만, 만약 n개를 곱해야하는 경우도 발생할 수 있다.

이는 수식과 관련된 함수가 다양하게 존재하는 다른 헤더 파일을 사용하면 되는데, 이 역시도 다른 게시글에서 다룰 예정이다.

06 달의 중력은 지구의 약 17%라고 한다. 자신의 몸무게를 입력받아서 달에서의 몸무게를 계산하는 프로그램을 작성하여 보라. 실수형으로 계산한다.

#include <stdio.h>

int main(void)
{
    double weight_on_earth, weight_on_moon;

    printf("몸무게를 입력하시오(단위: Kg): ");
    scanf("%lf", &weight_on_earth);

    weight_on_moon = weight_on_earth * 0.17;

    printf("달에서의 몸무게는 %lfKg입니다.\n", weight_on_moon);

    return 0;
}

 

간단한 문제다. 단, 변수명을 굉장히 자세하게 되있는데, 이럴 수록 좋다.

 

혼자서 간단한 예제를 풀어볼 때는 오히려 시간 낭비겠지만, 타인과 협업을 하거나 남의 코드를 가져와서 내 입맛에 개조를 해야하는 순간엔 이렇게 길더라도 무슨 용도의 변수인지 확실히 알 수 있어야 코드를 해석하는데 도움이 된다.