본문 바로가기
c언어

c언어 printf(), scanf() 함수를 이용한 예제 풀기

by 개발자 L 2022. 11. 27.
반응형

c언어 printf(), scanf() 함수를 이용한 예제 풀기

네 안녕하세요, 이번 포스팅에서는 그간 배웠던 c언어 함수와 변수를 이용하여 간단한 예제를 같이 풀어보면서

c언어에 대한 이해를 같이 해보는 시간을 가져보려고 해요.

c언어에 대한 이론적인 부분을 배웠는데 응용을 하지 않는다면 사실상 하지 않은 것과 다름이 없겠죠?

그래서 직접 풀어보기에 쉬운 예제들을 준비했으니 함께 풀어보도록 해요.

그럼 같이 보실까요?

 

1. 사칙연산 프로그램

첫 문제는 아주 쉬운 문제인 사칙연산을 하는 프로그램을 짜 볼 겁니다.

우리가 배운 연산자인 +, -, *, /, %를 이용하여 합, 차, 곱, 몫, 나머지까지 구하는 프로그램을 짜 볼 예정입니다.

그럼 소스코드를 짜서 그에 대한 설명을 해보도록 하겠습니다.

#include <stdio.h>

int main()
{
    int a;
    int b;
    int sum, diff, mul, div, mod;

    printf("정수를 2개 입력하세요");
    scanf("%d %d", &a, &b);

    sum = a + b;
    diff = a - b;
    mul = a * b;
    div = a / b;
    mod = a % b;

    printf("두 수의 합은 %d\n", sum);
    printf("두 수의 차는 %d\n", diff);
    printf("두 수의 곱은 %d\n", mul);
    printf("두 수를 나눈 몫은 %d\n", div);
    printf("두 수의 나머지는 %d\n", mod);

    return 0;
}

이제 코드에 대한 설명을 한 번 해보도록 하겠습니다.

일단 연산을 해야만 하기 때문에 연산을 할 변수가 2개가 필오하겠죠?

그래서 피연산자에 해당하는 변수를 정수형으로 a와 b로 선언을 해줬습니다.

그리고 그 피연산자에 대한 연산의 결괏값도 있어야 하기 때문에 연산의 결과를 나타낼 수 있는 변수를 선언하여

각각 sum, diff, mul, div, mod로 선언을 했으며, 순서대로 합, 차, 곱, 몫, 나머지입니다.

그래서 입력할 정수를 초기값으로 선언을 하지 않고 직접 입력하여 받을 것이기 때문에 정수를 입력하라는 문구를

printf() 함수로 출력을 해주고, scanf() 함수를 이용하여 해당 변수의 주소를 받아줍니다.

여기에서 형식 지정자는 정수형으로 받아야 하기 때문에 %d로 받았고, 주소 값을 받아야 하기 때문에 &를 붙여서 받았습니다.

그리고 여기에서 팁이 있다면, scanf() 함수에서 여러 개의 자료를 받을 때 위에 있는 소스처럼 다수의 자료를 한 번에 받을 수 있습니다.

그리고 주의할 것은 형식 지정자를 여러개 받을 때에는 형식 지정자를 적는 자리에는 공백 한 칸 띄우는 것만 허용되고,

쉼표를 쓰지 않는다는 것을 인지하여야 합니다.

그 후에 결과에 대한 변수가 어떻게 나오는지에 대하여 써야겠죠?

각각 합, 차, 곱, 몫, 나머지에 해당하는 연산 로직을 작성을 해줍니다.

그리고 출력을 하는 함수인 printf() 함수를 이용하여 출력을 해주는데, 각각 합, 차, 곱, 몫, 나머지를 받죠?

그 결괏값이 형식 지정자가 있는 위치에 있어야 하기 때문에 형식 지정자를 받을 변수를 각각 적어주고,

좀 더 깔끔하게 보기 위해서 개행(\n)을 해줍니다.

그리고 맨 마지막에 리턴 값을 선언을 해주면 로직이 끝이 납니다.

그래서 실행을 하면 이런 식으로 뜹니다.

정수를 2개 입력하세요 10 4
두 수의 합은 14
두 수의 차는 6
두 수의 곱은 40
두 수를 나눈 몫은 2
두 수의 나머지는 2

저는 10과 4를 입력해서 이런 결과가 나왔습니다.

실행은 cmd창, 또는 IDE 프로그램에 있는 터미널 창에서 되니까 알아두시면 좋습니다.

그리고 윈도를 사용하는 사람이라면 시큐어 코드 때문에 그냥 쓰면 에러가 납니다.

그래서 그걸 무시하고 쓰고 싶다면 sdl 검사를 '아니오'로 바꿔서 해제시키거나,

전처리기가 있는 위치에 #define _CRT_SECURE_NO_WARNINGS라고 적어서 무시를 해주면 정상작동합니다.

그래서 이 점을 알아두시면 좋겠고, 이를 인지하셨다는 전제 하에 그게 생략이 된 코드만 쓸 겁니다.

 

2. 연봉 계산하는 프로그램

두 번째로는 연봉을 계산하는 프로그램입니다.

연봉을 입력해서 월 급여를 확인하는 계산 프로그램입니다.

연봉을 입력을 해야 하기 때문에 딱 떨어지는 정수형으로 받을 거고,

연봉을 직접 입력해서 연산을 할 것이기 때문에 scanf() 함수가 필요하고요, 출력도 해야 하기 때문에 printf() 함수도 필요합니다.

그럼 소스코드와 함께 같이 보실까요?

#include <stdio.h>

int main()
{
    int ysal, msal;

    printf("연봉을 입력하세요");
    scanf("%d", &ysal);

    msal = ysal / 12;

    printf("월급여는 %d입니다\n", msal);

    return 0;
}

이번 문제도 월급을 받을 때, 그리고 연봉이 월급이 몇 번 모여서 생기는 것인지 생각을 하면 바로 풀리는 문제였죠?

그래서 변수는 sal이라고 하여 salary를 줄여서 선언을 했습니다.

그런데 각각 연봉과 월급이기 때문에 연봉은 year salary, 월급은 month salary라 하여 각각 ysal, msal로 지정을 해줬습니다.

이 상태에서 연봉을 입력하여 월급을 출력할 것이기 때문에 연봉을 입력하기 위해 printf() 함수를 이용하여 적어주고,

그 주소 값을 얻기 위하여 scanf()를 이용하여 받아줬습니다.

그 후에 월급을 구하는 것이기 때문에 연봉을 12로 나눠줬습니다.

그 이유는 1년은 열두 달이기 때문에 연봉은 월급을 12번 받아야 생기는 돈이죠?

그래서 월급을 구하려면 연봉을 12로 나눠줘야 하고, 연봉을 구하려면 월급에 12를 곱해줘야 결과가 나옵니다.

그래서 이제 결과를 호출하기 위해서 다시 printf() 함수를 이용하여 월급을 구해줍니다.

그리고 형식은 정수형이기 때문에 형식 지정자는 %d를 써주고, 월급을 출력하기 때문에

형식 지정자를 받는 변수는 msal이 됩니다. 

그래서 결과를 출력하면 이런 식으로 나옵니다.

연봉을 입력하세요 5000
월급여는 416입니다

저는 5000으로 입력을 했더니 월 급여가 416만 원이 나왔습니다.

이런 식으로 간단한 계산 프로그램도 만들어볼 수 있습니다.

반응형

 

3. 원의 면적 구하기

이번에는 원의 면적을 구하는 프로그램을 작성해보려고 합니다.

역시 하는 건 똑같습니다.

여기에서 바뀌는 건 원의 넓이를 구하는 식을 쓰는 것 말고는 없습니다.

원의 넓이 공식은 반지름 * 반지름 * 3.14죠?

c언어에서 그냥 파이 기호를 입력하면 인식을 못하기 때문에 원주율을 숫자로 입력을 해줘야 합니다.

그럼 소스코드로 함께 보실까요?

#include <stdio.h>

int main()
{
    float r, area;

    printf("반지름을 입력하세요");
    scanf("%f", &r);

    area = r * r * 3.14;

    printf("원의 면적은 %.2f입니다\n", area);

    return 0;
}

이런 식으로 쓸 수 있습니다.

그럼 이어서 설명을 해볼게요.

이번에는 소수점이 존재하기 때문에 실수형으로 받았어요.

그래서 int 대신 float형을 썼습니다.

그리고 r은 반지름, area는 원의 넓이를 정의하는 변수명입니다.

다른 부분들은 똑같은 방법으로 진행을 했습니다.

원의 반지름을 입력하기 위해 printf() 함수를 썼고,

그 주소 값을 가져오기 위해 scanf() 함수를 썼으며,

넓이를 어떤 식으로 구할 것인지 선언하기 위해 원의 넓이 공식을 써줬으며,

그것을 출력하는 함수인 printf() 함수를 이용하여 그대로 출력을 했습니다.

그리고 이번에는 실수형으로 받기 때문에 형식 지정자를 %f를 썼습니다.

그리고 여기에서 중요한 포인트 한 가지!

실수형을 %.nf없이 %f로만 받으면 소수점 아래 6자리가 출력이 됩니다.

그리고 더블형의 경우는 소수점 아래 15자리까지 받습니다.

그래서 수가 너무 많아서 자릿수를 자르기 위해 씁니다.

저는 .2f를 썼는데, 그렇게 하면 소수점 아래 2자리까지만 출력이 되기 때문에 수가 매우 깔끔해집니다.

그리고 정수형을 받을 때에도 %nd라고 쓰게 되면 n의 자리 정수까지 받겠다는 의미가 됩니다.

예를 들어서 %3d라고 하면 3자리 정수까지 받고 나머지는 자르겠다는 뜻입니다.

그래서 소스대로 결과를 내면 이렇게 나옵니다.

반지름을 입력하세요 5
원의 면적은 78.50입니다

저는 5를 입력했더니 이런 식으로 결과가 나왔습니다.

 

4. 환율 계산 프로그램

이번에는 환율을 계산하는 프로그램을 만들어볼 거예요.

이번에도 환율은 소수가 나오기 때문에 실수형 변수를 이용하여 받을 겁니다.

그럼 바로 소스코드와 함께 설명을 드려보도록 하겠습니다.

#include <stdio.h>

int main()
{
    float rate;
    float usd;
    int krw;

    printf("환율을 입력하세요");
    scanf("%f", &rate);

    printf("원화 금액을 입력하세요");
    scanf("%d", &krw);

    usd = krw / rate;

    printf("원화 %d원은 %.2f달러입니다.\n", krw, usd);

    return 0;
}

이렇게 쓸 수 있습니다.

여기에서 달러는 보통 소수점 둘째 자리까지 나타내고, 그로 인해 환율 역시 소수점이 있어서 실수로 받아줘야 하고,

원화는 정수로 딱 떨어지기 때문에 정수형으로 받아줍니다.

그래서 현시점 달러의 환율을 입력을 해주시고, 달러 환율의 주소 값을 받아준 후에,

환산하고자 하는 원화를 입력합니다.

그리고 여기에서 달러는 원화를 환율로 나누면 그 값이 나오겠죠?

그래서 결괏값을 도출할 때는 한화와 달러의 환율을 보기 때문에 krw와 usd를 이용하여 받아줍니다.

그리고 각각은 정수형, 실수형을 받기 때문에 형식 지정자를 %d와 %f로 씁니다.

그 후에 리턴 값을 받아주면 로직은 끝이 납니다.

그럼 결과를 한 번 볼까요?

환율을 입력하세요 1291.50
원화 금액을 입력하세요 10000
원화 10000원은 7.74달러입니다..

현재 환율이 달러가 1291.50이라 입력을 해봤더니 원화 10000원을 달러로 환산을 하면 7.74달러가 나오네요!!

 

5. 사각형의 둘레와 면적 구하기

이번에는 사각형의 둘레와 면적을 구하는 프로그램을 작성을 해볼 거예요.

사각형에서 필요한 것들을 생각해봅시다.

일단 가로와 세로의 길이를 알아야겠죠?

그러면 그 값을 입력하는 로직이 필요합니다.

그리고 둘레를 구하는 공식이 필요하고, 넓이를 구하는 공식이 필요합니다.

둘레와 넓이는 각각 (가로 + 세로) * 2, 가로 * 세로 이렇게 구하죠?

그래서 이 식을 적용을 시켜서 결과를 도출할 겁니다.

또한, 굳이 소수점을 붙여서 실수로 받지 않아도 상관이 없으니 정수형으로 받아서 로직을 작성을 할 겁니다.

그럼 바로 소스코드를 통해 같이 보실까요?

#include <stdio.h>

int main()
{
    int width, height, round, area;

    printf("가로, 세로의 길이를 입력하세요");
    scanf("%d %d", &width, &height);

    round = (width + height) * 2;
    area = width * height;

    printf("사각형의 둘레는 %d이고, 넓이는 %d입니다.\n", round, area);

    return 0;
}

이런 식으로 작성을 할 수 있습니다.

가로, 세로, 둘레, 넓이를 정수형으로 선언을 해준 후, 가로와 세로를 입력을 받아서 연산을 합니다.

입력받은 숫자를 조건에 맞게 연산을 하기 위해서 사각형의 둘레와 넓이 공식을 각 변수에 적용을 시켜준 후에

printf() 함수를 써서 출력을 해줍니다.

그러면 결과는 이런 식으로 나옵니다.

가로, 세로의 길이를 입력하세요 3 5
사각형의 둘레는 16이고, 넓이는 15입니다.

저는 가로와 세로를 각각 3과 5를 입력했는데, 결과가 16과 15가 나왔습니다.

 

지금까지 printf()와 scanf()를 활용한 간단한 예제를 풀어보았는데요, 도움이 되셨나요?

다음 시간에는 변수와 상수에 대한 기본적인 개념에 대하여 알아보는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사합니다 ~

반응형

댓글