3-1. 카페 키오스크 주문 누적 프로그램

문제설명

카페 키오스크에서 여러 번 주문을 받는 프로그램을 작성하시오. 사용자는 메뉴 번호를 계속 입력할 수 있으며, 0을 입력하면 주문을 종료한다. 메뉴와 가격은 다음과 같다.

  • 1번: 아메리카노 (3000원)
  • 2번: 라테 (4000원)
  • 3번: 모카 (4500원)

올바른 메뉴 번호를 입력하면 수량을 입력받는다. 단, 한 번의 주문에서 수량이 2잔 이상이면 해당 주문 금액에서 500원 할인한다.

잘못된 메뉴 번호를 입력하면 "잘못된 메뉴입니다."를 출력하고 다시 메뉴를 입력받는다. 주문이 종료되면 다음 내용을 출력하시오.

  • 총 주문 건수
  • 총 음료 수량
  • 최종 결제 금액

목표

  • 반복문을 사용하여 여러 번 입력받을 수 있다.
  • 조건문을 사용하여 메뉴별 가격을 처리할 수 있다.
  • 잘못된 입력을 판별하고 다시 입력받을 수 있다.
  • 누적 합계와 개수를 계산할 수 있다.

요구사항

  1. 메뉴 번호를 반복해서 입력받는다.
  2. 메뉴 번호가 0이면 주문을 종료한다.
  3. 메뉴 번호가 1, 2, 3이 아니면 "잘못된 메뉴입니다."를 출력한다.
  4. 올바른 메뉴 번호를 입력한 경우 수량을 입력받는다.
  5. 메뉴별 가격에 따라 주문 금액을 계산한다.
  6. 수량이 2 이상이면 해당 주문 금액에서 500원을 할인한다.
  7. 주문이 끝나면 다음 형식으로 출력한다.
총 주문 건수: X
총 음료 수량: Y
최종 결제 금액: Z원
 

 

출력예시

========= 메뉴  =========
1. 아메리카노 (3000원)
2. 라테 (4000원)
3. 모카 (4500원)
0. 종료

선택: 1
수량 입력: 1
========= 메뉴  =========
1. 아메리카노 (3000원)
2. 라테 (4000원)
3. 모카 (4500원)
0. 종료

선택: 2
수량 입력: 2
========= 메뉴  =========
1. 아메리카노 (3000원)
2. 라테 (4000원)
3. 모카 (4500원)
0. 종료

선택: 3
수량 입력: 5
========= 메뉴  =========
1. 아메리카노 (3000원)
2. 라테 (4000원)
3. 모카 (4500원)
0. 종료

선택: 0
총 주문 건수: 3
총 음료 수량: 8
최종 결제 금액: 32500원

 

코드예시

더보기
#include <stdio.h>

int main(void)
{
    int menu;
    int count;
    int price = 0;

    int order_count = 0;
    int total_drink = 0;
    int total_price = 0;

    int order_price = 0;

    while (1)
    {
        printf("========= 메뉴  =========\n");
        printf("1. 아메리카노 (3000원)\n");
        printf("2. 라테 (4000원)\n");
        printf("3. 모카 (4500원)\n");
        printf("0. 종료\n");
        printf("\n선택: ");

        scanf("%d", &menu);

        if (menu == 0) break;
        
        switch (menu)
        {
        case 1:
            price = 3000;
            break;

        case 2:
            price = 4000;
            break;

        case 3:
            price = 4500;
            break;

        default:
            printf("잘못된 메뉴입니다.\n");
            continue;
        }

        printf("수량 입력: ");
        scanf("%d", &count);

        order_price = price * count;

        if (count >= 2)
        {
            order_price = order_price - 500;
        }

        order_count++;
        total_drink += count;
        total_price += order_price;
    }

    printf("총 주문 건수: %d\n", order_count);
    printf("총 음료 수량: %d\n", total_drink);
    printf("최종 결제 금액: %d원\n", total_price);

    return 0;
}
 

 

 

3-2. 특별한 수 찾기

문제설명

정수 N을 입력받아, 1부터 N까지의 수 중에서 특별한 수의 개수와 합을 구하는 프로그램을 작성하시오.

특별한 수의 조건은 다음과 같다.

  1. 3의 배수이거나 5의 배수이다.
  2. 단, 15의 배수는 제외한다.
  3. 그리고 짝수인 수만 포함한다.

즉, 1부터 N까지 반복하면서 조건을 만족하는 수의 개수을 구해야 한다.

 

목표

  • 반복문을 사용하여 일정 범위의 수를 검사할 수 있다.
  • 조건문을 사용하여 여러 조건을 조합할 수 있다.
  • 배수 조건과 짝수 조건을 정확히 판별할 수 있다.
  • 개수와 합을 동시에 누적할 수 있다.

요구사항

  1. 정수 N을 입력받는다.
  2. 1부터 N까지 반복한다.
  3. 각 수에 대해 다음 조건을 검사한다.
    • 3의 배수 또는 5의 배수
    • 15의 배수는 제외
    • 짝수만 포함
  4. 조건을 만족하는 수의 개수와 합을 구한다.
  5. 다음 형식으로 출력한다.
개수: X
합: Y
 

 

출력예시

N 입력: 20
개수: 3
합: 34

 

코드예시

 
더보기
#include <stdio.h>

int main(void)
{
    int n;
    int i;
    int count = 0;
    int sum = 0;

    printf("N 입력: ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++)
    {
        if ((i % 3 == 0 || i % 5 == 0) && (i % 15 != 0) && (i % 2 == 0))
        {
            count++;
            sum += i;
        }
    }

    printf("개수: %d\n", count);
    printf("합: %d\n", sum);

    return 0;
}
 

2-1. if 여러 개 

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

if가 여러 개 있을 때와 else if의 차이를 이해한다.

 

요구사항

  • if 문은 각각 독립적으로 실행된다.
  • 출력 결과를 순서대로 쓰시오.

코드

#include <stdio.h>

int main(void)
{
    int num = 5;

    if (num > 3)
        printf("A\n");

    if (num > 4)
        printf("B\n");

    if (num > 5)
        printf("C\n");

    return 0;
}
 

 

출력결과

 

2-2. else if 

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

else if는 위에서부터 검사함을 이해한다.

 

요구사항

  • 첫 번째로 참이 되는 블록만 실행된다.

코드

#include <stdio.h>

int main(void)
{
    int num = 10;

    if (num > 5)
        printf("A\n");

    else if (num > 8)
        printf("B\n");

    else
        printf("C\n");

    return 0;
}
 

 

출력결과

 

 

2-3. 중첩 if

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

중첩 if 구조를 이해한다.

 

요구사항

  • 바깥 if가 참일 때만 안쪽 if 실행

코드

#include <stdio.h>

int main(void)
{
    int a = 1;
    int b = 0;

    if (a == 1)
    {
        printf("A\n");

        if (b == 1)
            printf("B\n");
    }

    printf("C\n");

    return 0;
}
 
 

출력결과

 

 

2-4. break 없는 switch 문제 (fall-through)

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

break가 없으면 다음 case가 실행됨을 이해한다.

 

요구사항

  • break가 없으면 계속 실행됨

코드

#include <stdio.h>

int main(void)
{
    int num = 2;

    switch (num)
    {
    case 1:
        printf("ONE\n");

    case 2:
        printf("TWO\n");

    case 3:
        printf("THREE\n");
    }

    return 0;
}
 
 

출력결과

더보기
TWO
THREE
 

 

2-5. 중첩 + else 

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

else가 어느 if에 연결되는지 이해한다.

 

코드

#include <stdio.h>

int main(void)
{
    int a = 1;
    int b = 0;

    if (a == 1)
        if (b == 1)
            printf("A\n");
        else
            printf("B\n");

    return 0;
}
 
 

출력결과

 

1-1. if 문 읽기 문제

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

if 문이 참일 때만 실행되는 구조를 이해한다.

 

요구사항

  • 조건이 참이면 if 블록 안의 문장이 실행된다.
  • 마지막 printf는 항상 실행된다.
  • 출력 결과를 순서대로 쓰시오.

코드

#include <stdio.h>

int main(void)
{
    int num = 5;

    if (num > 3)
    {
        printf("A\n");
    }

    printf("B\n");

    return 0;
}
 
 

출력결과

1-2. if else 문 읽기 문제

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

if / else 문에서 둘 중 하나만 실행되는 구조를 이해한다.

 

요구사항

  • 조건이 참이면 if 실행
  • 조건이 거짓이면 else 실행
  • 출력 결과를 순서대로 쓰시오.

코드

#include <stdio.h>

int main(void)
{
    int num = 2;

    if (num > 3)
    {
        printf("A\n");
    }
    else
    {
        printf("B\n");
    }

    printf("C\n");

    return 0;
}

 

출력결과

 
 
 

1-3. if else if 문 읽기 문제

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

if → else if → else 순서로 조건을 검사하는 구조를 이해한다.

 

요구사항

  • 위에서부터 차례대로 조건을 검사한다.
  • 처음 참이 되는 블록 하나만 실행된다.
  • 출력 결과를 쓰시오.

코드

#include <stdio.h>

int main(void)
{
    int num = 3;

    if (num == 1)
    {
        printf("ONE\n");
    }
    else if (num == 2)
    {
        printf("TWO\n");
    }
    else if (num == 3)
    {
        printf("THREE\n");
    }
    else
    {
        printf("OTHER\n");
    }

    return 0;
}

 

출력결과

더보기
더보기
THREE​

 

1-4. switch 문 읽기 문제

문제설명

아래 코드를 보고 출력 결과를 쓰시오.

 

목표

switch 문에서 case와 break의 동작을 이해한다.

 

요구사항

  • switch의 값과 일치하는 case를 찾는다.
  • break를 만나면 switch문을 빠져나온다.
  • 출력 결과를 쓰시오.

코드

#include <stdio.h>

int main(void)
{
    int num = 2;

    switch (num)
    {
    case 1:
        printf("ONE\n");
        break;

    case 2:
        printf("TWO\n");
        break;

    case 3:
        printf("THREE\n");
        break;

    default:
        printf("OTHER\n");
    }

    return 0;
}
출력결과

 

3-1. 카페 메뉴 선택 프로그램

문제설명

카페 메뉴를 반복해서 선택할 수 있는 프로그램을 작성하시오. 


사용자는 메뉴 번호를 입력하여 음료를 주문할 수 있으며, 0을 입력하면 주문을 종료한다.

메뉴는 다음과 같다.

  • 1 : 아메리카노 3000원
  • 2 : 라떼 4000원
  • 3 : 모카 4500원
  • 0 : 종료

잘못된 번호를 입력하면 “잘못 입력”을 출력하고 다시 메뉴를 선택하도록 하시오.

 

목표

  • while문을 사용하여 메뉴를 반복 선택할 수 있다.
  • if, else if, else를 사용하여 메뉴를 구분할 수 있다.
  • continue와 break의 역할을 이해할 수 있다.
  • 반복 입력과 누적 금액 계산을 함께 다룰 수 있다.

요구사항

  • 메뉴를 반복해서 출력한다.
  • 사용자가 번호를 입력하면 해당 금액을 총 금액에 더한다.
  • 0을 입력하면 반복을 종료한다.
  • 잘못된 번호를 입력하면 “잘못 입력”을 출력하고 다시 입력받는다.
  • 주문 종료 후 총 금액을 출력한다.

출력예시

메뉴 선택
1. 아메리카노 3000
2. 라떼 4000
3. 모카 4500
0. 종료
선택: 1
현재 금액: 3000

메뉴 선택
1. 아메리카노 3000
2. 라떼 4000
3. 모카 4500
0. 종료
선택: 4
잘못 입력

메뉴 선택
1. 아메리카노 3000
2. 라떼 4000
3. 모카 4500
0. 종료
선택: 3
현재 금액: 7500

메뉴 선택
1. 아메리카노 3000
2. 라떼 4000
3. 모카 4500
0. 종료
선택: 0
총 금액: 7500
 
 
 

코드예시 

더보기
더보기
#include <stdio.h>

int main(void)
{
    int menu;
    int total = 0;

    while (1)
    {
        printf("\n메뉴 선택\n");
        printf("1. 아메리카노 3000\n");
        printf("2. 라떼 4000\n");
        printf("3. 모카 4500\n");
        printf("0. 종료\n");
        printf("선택: ");
        scanf("%d", &menu);

        if (menu == 0)
        {
            break;
        }

        if (menu == 1)
        {
            total += 3000;
        }
        else if (menu == 2)
        {
            total += 4000;
        }
        else if (menu == 3)
        {
            total += 4500;
        }
        else
        {
            printf("잘못 입력\n");
            continue;
        }

        printf("현재 금액: %d\n", total);
    }

    printf("총 금액: %d\n", total);

    return 0;
}

 

3-2. 간단한 시스템 제어 프로그램 만들기

문제설명

운영체제나 임베디드 프로그램은 보통 종료되기 전까지 계속 실행되면서 사용자의 요청을 처리한다.
이와 비슷하게, 메뉴를 반복해서 보여주고 사용자의 선택에 따라 작업을 수행하는 간단한 시스템 제어 프로그램을 작성하시오.

 

프로그램은 다음 메뉴를 반복해서 출력한다.

  • 1 : 시스템 시작
  • 2 : 시스템 상태 출력
  • 3 : 시스템 정지
  • 0 : 프로그램 종료

각 메뉴의 동작은 다음과 같다.

  • 1번을 선택하면 "시스템이 시작되었습니다."를 출력한다.
  • 2번을 선택하면 현재 시스템 상태를 출력한다.
    단, 시스템이 시작되지 않은 상태이면 "시스템이 시작되지 않았습니다."를 출력한다.
  • 3번을 선택하면 시스템을 정지시키고 "시스템이 정지되었습니다."를 출력한다.
    단, 이미 정지 상태이면 "이미 정지된 상태입니다."를 출력한다.
  • 0번을 선택하면 "프로그램을 종료합니다."를 출력하고 반복을 종료한다.
  • 그 외의 번호를 입력하면 "잘못된 입력입니다."를 출력한다.

시스템 상태는 두 가지이다.

  • 시작됨
  • 정지됨

처음 상태는 정지됨이다.

 

목표

  • 반복문이 실제 프로그램의 메인 루프처럼 동작함을 이해한다.
  • while문을 사용하여 종료 전까지 계속 실행되는 구조를 이해한다.
  • 조건문을 사용하여 상태에 따라 다른 동작을 수행할 수 있다.
  • 변수 하나로 시스템의 상태를 저장하고 변경할 수 있다.

요구사항

  • while문을 사용하여 메뉴를 계속 반복 출력한다.
  • scanf로 메뉴 번호를 입력받는다.
  • 시스템 상태를 저장할 변수를 사용한다.
  • 상태에 따라 다른 메시지를 출력한다.
  • 0을 입력하면 프로그램을 종료한다.
  • 잘못된 번호 입력도 처리한다.

출력예시

===== 시스템 제어 메뉴 =====
1. 시스템 시작
2. 시스템 상태 출력
3. 시스템 정지
0. 프로그램 종료
선택: 2
시스템이 시작되지 않았습니다.

===== 시스템 제어 메뉴 =====
1. 시스템 시작
2. 시스템 상태 출력
3. 시스템 정지
0. 프로그램 종료
선택: 1
시스템이 시작되었습니다.

===== 시스템 제어 메뉴 =====
1. 시스템 시작
2. 시스템 상태 출력
3. 시스템 정지
0. 프로그램 종료
선택: 2
현재 상태: 실행 중

===== 시스템 제어 메뉴 =====
1. 시스템 시작
2. 시스템 상태 출력
3. 시스템 정지
0. 프로그램 종료
선택: 3
시스템이 정지되었습니다.

===== 시스템 제어 메뉴 =====
1. 시스템 시작
2. 시스템 상태 출력
3. 시스템 정지
0. 프로그램 종료
선택: 0
프로그램을 종료합니다.
 

 

코드예시

더보기
더보기
#include <stdio.h>

int main(void)
{
    int menu;
    int is_running = 0;   // 0: 정지, 1: 시작

    while (1)
    {
        printf("\n===== 시스템 제어 메뉴 =====\n");
        printf("1. 시스템 시작\n");
        printf("2. 시스템 상태 출력\n");
        printf("3. 시스템 정지\n");
        printf("0. 프로그램 종료\n");
        printf("선택: ");
        scanf("%d", &menu);

        if (menu == 1)
        {
            is_running = 1;
            printf("시스템이 시작되었습니다.\n");
        }
        else if (menu == 2)
        {
            if (is_running == 1)
            {
                printf("현재 상태: 실행 중\n");
            }
            else
            {
                printf("시스템이 시작되지 않았습니다.\n");
            }
        }
        else if (menu == 3)
        {
            if (is_running == 1)
            {
                is_running = 0;
                printf("시스템이 정지되었습니다.\n");
            }
            else
            {
                printf("이미 정지된 상태입니다.\n");
            }
        }
        else if (menu == 0)
        {
            printf("프로그램을 종료합니다.\n");
            break;
        }
        else
        {
            printf("잘못된 입력입니다.\n");
        }
    }

    return 0;
}

 

 

2-1. *로 직각 삼각형 출력

문제설명

정수 n을 입력받아 다음과 같은 직각삼각형을 출력하시오.

예 (n = 5)
*
**
***
****
*****

목표

  • 중첩 반복문 기본
  • 줄과 출력 개수 관계 이해

요구사항

  • n 입력
  • i번째 줄에 별 i개 출력

출력예시

입력: 4
*
**
***
****

 

코드예시

더보기
#include <stdio.h>

int main(void)
{
    int n;
    int i, j;

    printf("입력: ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= i; j++)
        {
            printf("*");
        }

        printf("\n");
    }

    return 0;
}
 

 

2-2. *로 정삼각형 출력

 

문제설명

정수 n을 입력받아 다음과 같은 정삼각형을 출력하시오.

예 (n = 4)
   *
  ***
 *****
*******

 

목표

  • 공백 + 별 출력
  • 반복문 2개 사용
  • 규칙 찾기

요구사항

  • 공백 n-i
  • 별 2*i-1

출력예시

입력: 4
   *
  ***
 *****
*******

 

코드예시

더보기
#include <stdio.h>

int main(void)
{
    int n;
    int i, j;

    printf("입력: ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n - i; j++)
        {
            printf(" ");
        }

        for (j = 1; j <= 2 * i - 1; j++)
        {
            printf("*");
        }

        printf("\n");
    }

    return 0;
}
 

2-3. *로 다이아몬드 출력

문제설명

정수 n을 입력받아 다음과 같은 다이아몬드를 출력하시오.

예 (n = 4)
   *
  ***
 *****
*******
 *****
  ***
   *
 

목표

  • 반복문을 두 번 사용
  • 위 삼각형 + 아래 삼각형
  • 반복문 분할

요구사항

  • 위쪽 삼각형
  • 아래쪽 삼각형
  • 중첩 반복문 사용

출력예시

입력: 5
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

 

코드예시

더보기

 

#include <stdio.h>

int main(void)
{
    int n;
    int i, j;

    printf("입력: ");
    scanf("%d", &n);

    // 위쪽
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n - i; j++)
        {
            printf(" ");
        }

        for (j = 1; j <= 2 * i - 1; j++)
        {
            printf("*");
        }

        printf("\n");
    }

    // 아래쪽
    for (i = n - 1; i >= 1; i--)
    {
        for (j = 1; j <= n - i; j++)
        {
            printf(" ");
        }

        for (j = 1; j <= 2 * i - 1; j++)
        {
            printf("*");
        }

        printf("\n");
    }

    return 0;
}

 

1-1. while문으로 입력한 수까지 출력하기

문제설명

사용자로부터 정수를 입력받아 1부터 입력한 수까지 출력하는 프로그램을 작성하시오.

 

목표

  • scanf 사용
  • while문 사용
  • 반복 조건 이해

요구사항

  • 정수를 입력받는다.
  • 1부터 입력한 수까지 출력한다.
  • while문을 사용한다.

출력예시

정수 입력: 5
1
2
3
4
5

 

코드 예시

더보기
더보기
#include <stdio.h>

int main(void)
{
    int num;
    int i = 1;

    printf("정수 입력: ");
    scanf("%d", &num);

    while (i <= num)
    {
        printf("%d\n", i);
        i++;
    }

    return 0;
}
 

 

1-2. do while문으로 입력한 수까지 합 구하기

 

문제설명

정수를 입력받아 1부터 입력한 수까지의 합을 구하는 프로그램을 작성하시오.

 

목표

  • do while문 사용
  • 누적 합 계산
  • scanf 사용

요구사항

  • 정수를 입력받는다.
  • 1부터 입력한 수까지 더한다.
  • do while문을 사용한다.

출력예시

정수 입력: 5
sum: 15

 

코드예시

더보기
더보기
#include <stdio.h>

int main(void)
{
    int num;
    int i = 1;
    int sum = 0;

    printf("정수 입력: ");
    scanf("%d", &num);

    do
    {
        sum += i;
        i++;
    } while (i <= num);

    printf("sum: %d\n", sum);

    return 0;
}
 

1-3. for문으로 입력한 수까지의 합 구하기

 

문제설명

사용자로부터 정수를 입력받아 1부터 입력한 수까지의 합을 구하여 출력하는 프로그램을 작성하시오.

 

목표

  • for문 사용
  • scanf 사용
  • 누적 계산

요구사항

  • 정수를 입력받는다.
  • 1부터 입력한 수까지 더한다.
  • for문을 사용한다.

출력예시

정수 입력: 4
sum: 10
 

 

코드예시

더보기
더보기
#include <stdio.h>

int main(void)
{
    int num;
    int sum = 0;
    int i;

    printf("정수 입력: ");
    scanf("%d", &num);

    for (i = 1; i <= num; i++)
    {
        sum += i;
    }

    printf("sum: %d\n", sum);

    return 0;
}
 

 

1-4. break문 연습 — 합이 입력값을 넘으면 종료

문제설명

정수를 입력받고, 1부터 차례대로 더해 나가다가 합이 입력한 값보다 커지면 반복을 종료하고 결과를 출력하시오.

 

목표

  • break 사용
  • while문 사용
  • 입력 기반 종료

요구사항

  • 목표값을 입력받는다.
  • 합이 목표값을 넘으면 break 한다.
  • 합과 마지막 수 출력

출력예시

목표값 입력: 20
sum: 21
num: 6

 

코드예시

더보기
더보기
#include <stdio.h>

int main(void)
{
    int limit;
    int sum = 0;
    int num = 1;

    printf("목표값 입력: ");
    scanf("%d", &limit);

    while (1)
    {
        sum += num;

        if (sum > limit)
        {
            break;
        }

        num++;
    }

    printf("sum: %d\n", sum);
    printf("num: %d\n", num);

    return 0;
}
 
 

1-5. continue 연습 — 입력한 수까지 홀수만 출력

문제설명

정수를 입력받아 1부터 입력한 수까지 중에서 홀수만 출력하는 프로그램을 작성하시오.

 

목표

  • continue 사용
  • for문 사용
  • 조건 건너뛰기

요구사항

  • 정수를 입력받는다.
  • 홀수만 출력한다.
  • continue 사용

출력예시

정수 입력: 10
1 3 5 7 9

 

코드예시 

더보기
더보기
#include <stdio.h>

int main(void)
{
    int num;
    int i;

    printf("정수 입력: ");
    scanf("%d", &num);

    for (i = 1; i <= num; i++)
    {
        if (i % 2 == 0)
        {
            continue;
        }

        printf("%d ", i);
    }

    return 0;
}
 

 

1.  나이를 입력받아 출력하기 

문제설명

사용자의 나이를 입력받아 출력하는 프로그램을 작성하시오.

 

목표

  • scanf 기본 사용
  • printf 기본 사용
  • %d 사용

요구사항

  • 정수 1개 입력
  • 입력받은 값을 그대로 출력
  • 안내문 출력 포함

출력예시

Enter your age: 20
Your age is 20.
 

 

예상코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    int age;

    printf("Enter your age: ");
    scanf("%d", &age);

    printf("Your age is %d.\n", age);

    return 0;
}
 

2. 두개의 정수를 입력받아 합과 평균을 출력하기

 

문제설명

두 개의 정수를 입력받아 합과 평균을 출력하는 프로그램을 작성하시오.

 

목표

  • scanf 여러 값 입력
  • printf 여러 서식 사용
  • 형변환 없이 평균 계산

요구사항

  • 정수 2개 입력
  • 합 출력
  • 평균 출력 (정수 나눗셈)

출력예시

Enter two integers: 10 20
Sum = 30
Average = 15

 

 

예상 코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    int a, b;
    int sum;
    int avg;

    printf("Enter two integers: ");
    scanf("%d %d", &a, &b);

    sum = a + b;
    avg = sum / 2;

    printf("Sum = %d\n", sum);
    printf("Average = %d\n", avg);

    return 0;
}
 

3. 여러개의 자료를 입력받아 형식에 맞게 출력하기 

문제설명

이름, 나이, 키, 성별을 입력받아 형식에 맞게 출력하는 프로그램을 작성하시오.

 

목표

  • %s %d %f %c 사용
  • 여러 입력 처리
  • printf 서식 사용

요구사항

입력

  • 이름 (문자열)
  • 나이 (정수)
  • 키 (실수)
  • 성별 (문자)

출력

  • 입력값을 문장 형태로 출력

출력예시

Enter name: Kim
Enter age: 20
Enter height: 175.5
Enter gender (M/F): M

Name: Kim
Age: 20
Height: 175.50
Gender: M
 

예상코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    char name[20];
    int age;
    float height;
    char gender;

    printf("Enter name: ");
    scanf("%s", name);

    printf("Enter age: ");
    scanf(" %d", &age);

    printf("Enter height(cm): ");
    scanf(" %f", &height);

    printf("Enter gender (M/F): ");
    scanf(" %c", &gender);

    printf("\nName: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.2f\n", height);
    printf("Gender: %c\n", gender);

    return 0;
}
 

 

3. 카페 키오스크에서 메뉴 입력하기  

문제설명

카페 키오스크에서  커피 종류, 크기, hot/ice 여부를  입력받고, 각 입력에 따라 가격을 계산하여 총 가격 계산하여 주문내역으로 출력하시오.

 

목표

  • scanf 문자 입력
  • " %c" 사용
  • printf 출력
  • 변수 계산

요구사항

 

입력 데이타

  • 커피 종류 (A / L / M)
  • 크기 (S / M / L)
  • 온도 (H / I)
커피 종류 입력값 가격
Americano A 3000
Latte L 4000
Mocha M 4500

size 입력값 추가금
S S 0
M M 500
L L 1000

 

온도 입력값 추가금
hot H 0
ice I 500

 

코딩 힌트

if 문의 사용  - if문은 과정상 아직 학습하지 않았지만, 커피의 종류에 따라 아래의 문법대로 price를 지정할 수 있다. 

	/* 커피 가격 */
    if (coffee == 'A')
        price = 3000;

    if (coffee == 'L')
        price = 4000;

    if (coffee == 'M')
        price = 4500;

    /* 크기 추가 */
    if (size == 'M')
        price = price + 500;

    if (size == 'L')
        price = price + 1000;

    /* 온도 추가 */
    if (temp == 'I')
        price = price + 500;

 

출력예시

Coffee (A:Americano, L:Latte, M:Mocha): M
Size (S, M, L): L
Temp (H:hot, I:ice): I

****************************
Order
****************************
Coffee : Mocha
Size   : Large
Temp   : ice
Price  : 6000

 

예상코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    char coffee;
    char size;
    char temp;

    int price = 0;

    printf("Coffee (A:Americano, L:Latte, M:Mocha): ");
    scanf(" %c", &coffee);

    printf("Size (S, M, L): ");
    scanf(" %c", &size);

    printf("Temp (H:hot, I:ice): ");
    scanf(" %c", &temp);

    /* 커피 가격 */
    if (coffee == 'A')
        price = 3000;

    if (coffee == 'L')
        price = 4000;

    if (coffee == 'M')
        price = 4500;

    /* 크기 추가 */
    if (size == 'M')
        price = price + 500;

    if (size == 'L')
        price = price + 1000;

    /* 온도 추가 */
    if (temp == 'I')
        price = price + 500;

    printf("\n****************************\n");
    printf("Order\n");
    printf("****************************\n");

    /* 커피 이름 출력 */
    if (coffee == 'A')
        printf("Coffee : Americano\n");
    if (coffee == 'L')
        printf("Coffee : Latte\n");
    if (coffee == 'M')
        printf("Coffee : Mocha\n");

    /* 크기 이름 출력 */
    if (size == 'S')
        printf("Size   : Small\n");
    if (size == 'M')
        printf("Size   : Medium\n");
    if (size == 'L')
        printf("Size   : Large\n");

    /* 온도 이름 출력 */
    if (temp == 'H')
        printf("Temp   : hot\n");
    if (temp == 'I')
        printf("Temp   : ice\n");

    printf("Price  : %d\n\n", price);

    return 0;
}

 

 
 

컴파일 관련

옵션 설명
gcc test.c –o test ­a.exe가 아닌 test.exe 를 생성
 gcc test.c -Wall ­컴파일시 자주 나오는 필요한  warning(경고, 에러는 아님) 출력
gcc test.c -Wconversion
형 변환으로 값이 바뀔 가능성이 있으면 warning(경고) 출력
 

Troubleshooting

1 한글 깨짐 현상

 

에디터에서 한글을 인코딩 하는 방법과 터미널에서 문자를 해석하는 방식이 서로 달라 생기는 문제. 기본적으로 UTF-8 형식으로 한글을 저장하는데 우리가 사용한 Powershell 터미널에서 UTF-8 형식으로 해석하도록 설정되어 있지 않아 생기는 문제

 

방법1. 소스코드 저장 방식을 ECU-KR 형식으로 변경한다.

  • window 환경에서 가장 쉬운 방법 
    • Windows os에서 ECU-KR 방식으로 설정되어 있어서 powershell 터미널에서 다른 설정변경없이 한글 출력 가능 
    • 이 방법은 ios에서는 적용되지 않을 수 있다. 일반적으로 IOS에서는 출력방식을 UTF-8을 따른다. 
  • 설정 방법 
    • 1. vs code 화면의 맨 아래 오른쪽으로 "UTF-8" 이라고 씌여진 부분을 클릭한다. 
    • 2. 화면의 맨 위 가운데에 "인코딩하여 다시열기" 가 선택된다. 
    • 3. 파일 저장방식에서 euc-kr을 선택하여 저장한다. 
    • 4. 코드를 컴파일하여 실행한다. 

방법 2. windows 환경에서 Powershell 출력 방식을 UTF-8 방식으로 바꾼다 .

  • 설정방법
    • 1. Powershell 터미널을 열어 아래와 같이 폴더를 생성한다. 
      •  
      • New-Item -ItemType Directory -Path (Split-Path $PROFILE) -Force
    • 2. 프로파일 생성
      • New-Item -ItemType File -Path $PROFILE -Force
    • 3. 프로파일을 메모장으로 연다. 
      • notepad $PROFILE
    • 4. 아래 내용을 메모장으로 연 프로필에 추가한 후 파일을 저장하고 닫는다. 
      • chcp 65001 > $null
        [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

    • 5. PowerShell 을 다시 시작한다.

 

방법 3. 영어를 사용한다.

  • 한글저장방식 문제는 c코드를 처음 배우는 사용자에게 복잡함만을 주게 되어 출력 문자열을 영어로 통일하여 c언어 학습 본질에 집중하게 한다. 

 

+ Recent posts