📒 문제 3. 나만의 연락처 관리자 (구조체 활용)

[문제] 이름과 전화번호를 담는 구조체를 만들고, 사용자로부터 정보를 입력받아 출력하는 프로그램을 만드세요.

[힌트] typedef struct를 사용하여 연락처 정보를 묶고, 구조체 변수에 값을 입력받을 때는 . 연산자를 사용합니다.

#include <stdio.h>

typedef struct {
    char name[20];
    char phone[20];
} Contact;

int main() {
    Contact p;

    printf("--- 연락처 등록 ---\n");
    printf("이름 입력: ");
    scanf("%s", p.name);
    printf("번호 입력: ");
    scanf("%s", p.phone);

    printf("\n--- 저장된 정보 ---\n");
    printf("이름: %s\n", p.name);
    printf("번호: %s\n", p.phone);

    return 0;
}

☕ 문제 2. 커피숍 매출 기록기 (파일 저장)

[문제] 커피숍에서 판매된 메뉴 이름을 입력받아 sales.txt 파일에 저장하는 프로그램을 만드세요.

[힌트] 파일 출력 모드("a")를 사용하면 기존 내용을 지우지 않고 새로운 판매 기록을 아래에 계속 추가할 수 있습니다.

#include <stdio.h>

int main() {
    char menu[30];
    FILE *fp = fopen("sales.txt", "a"); // "a" 모드는 이어쓰기

    if (fp == NULL) return 1;

    printf("판매된 커피 메뉴를 입력하세요: ");
    scanf("%s", menu);

    fprintf(fp, "판매 메뉴: %s\n", menu);
    fclose(fp);

    printf("매출이 sales.txt에 기록되었습니다.\n");
    return 0;
}

🥤 문제 1. 미니 자판기 프로그램

[문제] 콜라(1200원), 사이다(1000원), 우유(800원)를 판매하는 자판기를 만드세요. 돈을 입력받고 메뉴를 선택하면 잔돈을 계산해 출력합니다.

[힌트] switch-case 문을 사용하여 메뉴를 선택하고, 입력받은 금액에서 메뉴 가격을 빼주세요.

#include <stdio.h>

int main() {
    int money, choice, price = 0;

    printf("--- 미니 자판기 ---\n");
    printf("현재 금액을 투입하세요: ");
    scanf("%d", &money);

    printf("1.콜라(1200) 2.사이다(1000) 3.우유(800)\n메뉴 선택: ");
    scanf("%d", &choice);

    if (choice == 1) price = 1200;
    else if (choice == 2) price = 1000;
    else if (choice == 3) price = 800;

    if (money < price) {
        printf("잔액이 부족합니다!\n");
    } else {
        printf("선택하신 음료가 나옵니다. 잔돈: %d원\n", money - price);
    }
    return 0;
}

📒 문제 1. 나만의 연락처 관리자 (구조체 활용)

[문제] 이름과 전화번호를 담는 구조체를 만들고, 사용자로부터 정보를 입력받아 출력하는 프로그램을 만드세요.

[힌트] typedef struct를 사용하여 연락처 정보를 묶고, 구조체 변수에 값을 입력받을 때는 . 연산자를 사용합니다.
scanf로 입력받는다.  (scanf("%s", p.name);)

[출력 결과]

이름 입력: 김철수
번호 입력: 010-1234-5678

--- 저장된 정보 ---
이름: 김철수
번호: 010-1234-5678

 

☕ 문제 2. 커피숍 매출 기록기 (파일 저장)

[문제] 커피숍에서 판매된 메뉴 이름을 입력받아 sales.txt 파일에 저장하는 프로그램을 만드세요.

[힌트] 파일 출력 모드("a")를 사용하면 기존 내용을 지우지 않고 새로운 판매 기록을 아래에 계속 추가할 수 있습니다.
scanf("%s", menu);  입력받도록

[출력 결과]

판매된 커피 메뉴를 입력하세요: 아이스아메리카노
매출이 sales.txt에 기록되었습니다.

 

🥤 문제3. 미니 자판기 프로그램

[문제] 콜라(1200원), 사이다(1000원), 우유(800원)를 판매하는 자판기를 만드세요. 돈을 입력받고 메뉴를 선택하면 잔돈을 계산해 출력합니다.

[힌트] switch-case 문 이나 if문을 사용하여 메뉴를 선택하고, 입력받은 금액에서 메뉴 가격을 빼주세요.
scanf("%d", &money);  입력받는다. 

 

[출력 결과]

현재 금액을 투입하세요: 2000
1.콜라(1200) 2.사이다(1000) 3.우유(800)
메뉴 선택: 1
선택하신 음료가 나옵니다. 잔돈: 800원

[문제1] 자동차
자동차의 브랜드(문자열), 출시 연도(정수), 주행 거리(실수)를 저장할 수 있는 Car 구조체를 정의하세요. 사용자로부터 한 대의 자동차 정보를 입력받아 그대로 출력하는 프로그램을 작성하세요.

자동차 브랜드를 입력하세요: Hyundai
출시 연도를 입력하세요: 2024
주행 거리를 입력하세요 (km): 5200.5





--- 등록된 자동차 정보 ---
브랜드: Hyundai
연식: 2024년식
주행 거리: 5200.5 km

 

 

[문제2] 핸드폰 
모델명(문자열), 출시 연도(정수), 색상(문자열)을 멤버로 가지는 Phone 구조체를 정의하세요.

[배열로] Phone p[2];


2대의 핸드폰 정보를 각각 입력받은 뒤 ( scanf ) , 구분선과 함께 깔끔하게 출력하는 프로그램을 작성하세요.

[1번째] 핸드폰 정보 입력
모델명: iPhone15
연식: 2023
색상: Black
---------------------------
[2번째] 핸드폰 정보 입력
모델명: GalaxyS24
연식: 2024
색상: White
---------------------------


출력----------
======= 입력된 핸드폰 목록 =======
모델명          | 연식   | 색상      
----------------------------------
iPhone15        | 2023년 | Black     
GalaxyS24       | 2024년 | White     
==================================

 

포인터와 배열, 그리고 strcpy, strlen 같은 함수들은 C언어에서 가장 강력하면서도 처음에는 조금 헷갈릴 수 있는 도구들이에요.

이해하기 쉽게 **'마법의 사물함'**과 '포스트잇' 비유로 설명해 드립니다.


1. 포인터와 배열: "사물함 주소"

배열이 **'나란히 붙어 있는 사물함 세트'**라면, 포인터는 그 사물함이 어디 있는지 가리키는 **'손가락'**이나 **'주소가 적힌 포스트잇'**이에요.

  • 배열: 기차[3] → 기차 칸 3개가 붙어 있음.
  • 포인터: *손가락 → "지금 1번 칸을 봐!", "이제 다음 칸으로 넘어가!"라고 가리킴.

초등학생 눈높이 예제: 간식 상자

C
 
int snacks[3] = {10, 20, 30}; // 사탕 10개, 20개, 30개가 든 상자 3개
int *p; // 사탕 상자를 가리킬 손가락 준비!

p = snacks; // 손가락이 첫 번째 상자(10개 입입)를 가리킵니다.

// 포인터로 배열 제어하기
printf("%d\n", *p);     // 손가락이 가리키는 곳을 보니... 10개!
p++;                    // 손가락을 옆으로 한 칸 이동!
printf("%d\n", *p);     // 이제 가리키는 곳은... 20개!

2. strlen: "글자 수 세기"

strlen은 **"Length(길이)"**의 줄임말이에요. 기차의 길이를 재는 도구라고 생각하면 돼요. 단, 기차 맨 마지막에 있는 "여기까지가 끝이야!"라고 표시된 투명 칸(NULL 문자)은 세지 않아요.

초등학생 눈높이 예제: 이름표 길이

  • 단어: "APPLE"
  • strlen이 하는 일: "A(1), P(2), P(3), L(4), E(5)... 총 5글자네!"

3. strcpy: "글자 복사해서 붙여넣기"

strcpy는 **"String Copy(문자열 복사)"**의 줄임말이에요. 왼쪽 사물함에 있는 내용을 오른쪽 사물함으로 그대로 복사해오는 **'복사기'**예요.

초등학생 눈높이 예제: 일기장 베끼기

  • 친구 일기: "오늘 날씨 맑음"
  • 내 일기: (텅 비어 있음)
  • strcpy가 하는 일: 친구 일기를 내 일기장에 그대로 받아쓰기 합니다.

4. 종합 실습 예제 (코드)

이걸 모두 합쳐서 코드로 짜면 이렇게 됩니다.

C
 
#include <stdio.h>
#include <string.h> // strcpy, strlen을 쓰려면 이게 필요해요!

int main() {
    char original[20] = "Hello Robot"; // 원본 상자
    char copy[20];                    // 비어있는 복사본 상자
    char *p;                          // 글자 하나하나를 가리킬 포인터

    // 1. strlen 활용: 원본이 몇 글자인지 확인
    int len = strlen(original);
    printf("원본 글자 수는: %d글자입니다.\n", len);

    // 2. strcpy 활용: 복사하기
    strcpy(copy, original);
    printf("복사된 내용은: %s\n", copy);

    // 3. 포인터로 배열 요소 제어하기: 한 글자씩 출력해보기
    p = copy; // 포인터가 복사본의 첫 글자를 가리키게 함
    
    printf("포인터로 한 글자씩 읽기: ");
    for(int i = 0; i < len; i++) {
        printf("%c ", *(p + i)); // 포인터를 옆으로 옮겨가며 읽기
    }

    return 0;
}

요약하자면!

  1. 배열은 데이터를 담는 칸이고, 포인터는 그 칸을 가리키는 손가락입니다.
  2. strlen은 줄자처럼 길이를 재고,
  3. strcpy는 복사기처럼 내용을 옮깁니다.

 

📱 실습 문제: 고정된 핸드폰 정보 출력하기

[문제 설명]

  1. 휴대폰의 모델명출시 연도를 매개변수로 받는 showPhone 함수를 만드세요.
  2. main 함수 안에서 showPhone 함수를 세 번 호출하세요.
  3. 각각 호출할 때마다 서로 다른 핸드폰 이름과 연식을 인자(Argument)로 넘겨주세요.
    • 예: "GalaxyS24", 2024 / "iPhone15", 2023 / "ZFlip5", 2023



📄 출력 결과

Plaintext
 
=== 등록된 휴대폰 목록 ===
모델명: GalaxyS24  | 출시 연도: 2024년
모델명: iPhone15   | 출시 연도: 2023년
모델명: ZFlip5     | 출시 연도: 2023년
==========================

📝 실습 문제: 고양이 집사 프로그램

[문제 설명]

  1. 고양이의 **이름(문자열)**과 **나이(정수)**를 매개변수로 받아서 정보를 출력하는 printCatInfo 함수를 만드세요.
  2. main 함수 안에서 scanf를 사용하지 않고, 함수를 두 번 호출하여 각각 다른 고양이 정보를 출력하세요.
    • 첫 번째 고양이: 이름 "나비", 나이 3살
    • 두 번째 고양이: 이름 "치즈", 나이 5살

📄 출력 결과

Plaintext
 
=== 우리 집 고양이 목록 ===

🐾 고양이 이름: 나비
🎂 고양이 나이: 3살
--------------------------
🐾 고양이 이름: 치즈
🎂 고양이 나이: 5살
--------------------------

 

📝 과제 : 편의점 영수증 출력 함수

[목표] 여러 개의 매개변수를 사용하여 정해진 양식으로 출력하기

  • 문제: 상품 이름(const char*), 가격(int), 수량(int)을 매개변수로 받아 총금액을 계산하고 영수증을 출력하는 printReceipt 함수를 만드세요.
  • 힌트: 총금액은 가격 * 수량으로 계산합니다.

 

📄 출력 결과

Plaintext
 
--- 편의점 영수증 ---
품목: 삼각김밥
금액: 1200원 (수량: 2개)
총계: 2400원
--------------------

--- 편의점 영수증 ---
품목: 콜라
금액: 1500원 (수량: 1개)
총계: 1500원
--------------------

'C_language' 카테고리의 다른 글

내 차 정보 등록하기 (기초)  (0) 2026.02.23
포인터와 배열  (0) 2026.02.13
누적 변수 연습문제  (0) 2026.02.04
[미션] 무인 편의점 결제 시스템 만들기  (0) 2026.02.02
나이에 따른 입장료 판별기  (1) 2026.02.02

📝 실습 문제: "참 잘했어요! 포도송이 스티커 모으기"
칭찬 스티커를 매일 2개씩 10일 동안 모으려고 해요. 

for문이 끝난 뒤 내 저금통(스티커 판)에 스티커가 몇 개 있는지 계산해 보세요.

결과:
10일 동안 모은 스티커는 총 20개입니다!

 

🍭 문제: "거대 솜사탕 만들기"
솜사탕 기계에 설탕을 한 스푼 넣을 때마다 솜사탕의 크기가 3씩 커집니다. 설탕을 총 6번 넣었을 때, 솜사탕의 최종 크기를 구하는 코드를 완성해 보세요! 
 힌트 (cotton_candy = ________________;)  //솜사탕크기

결과:
1번 슈슉~ 현재 솜사탕 크기: 3
2번 슈슉~ 현재 솜사탕 크기: 6
3번 슈슉~ 현재 솜사탕 크기: 9
4번 슈슉~ 현재 솜사탕 크기: 12
5번 슈슉~ 현재 솜사탕 크기: 15
6번 슈슉~ 현재 솜사탕 크기: 18

완성된 대왕 솜사탕의 크기는 18입니다! ☁️

 

🥤 [미션] 무인 편의점 결제 시스템 만들기문제 상황: 
편의점에 1번 콜라(1500원), 2번 사이다(1200원), 3번 과자(2000원)가 있어. 
사용자가 가진 돈과 메뉴 번호를 입력했을 때, 
돈이 충분하면 "구매 성공"을, 부족하면 "잔액 부족"을 알려주는 프로그램을 만들어보자!

🖥️ 출력 결과 예시 (Output)

컴퓨터 화면에는 사용자가 입력하는 값에 따라 아래와 같이 나타날 거야.

1. 돈이 충분할 때 (구매 성공)

현재 가진 돈을 입력하세요: 3000

    --- 메뉴판 ---

  1. 콜라 (1500원)
  2. 사이다 (1200원)
  3. 과자 (2000원) 번호를 선택하세요: 1

    구매 성공! 남은 돈은 1500원입니다. 💳

2. 돈이 부족할 때 (잔액 부족)

현재 가진 돈을 입력하세요: 1000

--- 메뉴판 ---

  1. 콜라 (1500원)
  2. 사이다 (1200원)
  3. 과자 (2000원) 번호를 선택하세요: 3


잔액이 부족합니다! 1000원이 더 필요해요. ❌


💡 이 문제를 풀기 위한 3가지 힌트!

1. "주머니(변수)"를 먼저 준비하세요

프로그램이 시작될 때 3가지 정보가 필요해.

  • 사용자가 넣은 돈 (money)
  • 사용자가 선택한 번호 (choice)
  • 선택한 물건의 가격 (price)

힌트: 처음 시작할 때 int price = 0; 처럼 가격을 0으로 만들어두면 나중에 계산하기 편해!

 

2. switch문은 '가격표' 역할을 해요

switch문 안에서 계산을 다 하려고 하지 마. 대신, 선택된 번호에 맞는 가격만 price 변수에 쏙 넣어주는 역할로만 사용해봐.

  • case 1: 이면 price = 1500;
  • case 2: 이면 price = 1200;

주의: break;를 빼먹으면 콜라를 골랐는데 과자 가격으로 바뀔 수 있으니 조심해!

#include <stdio.h>

int main() {
    int money, choice;
    int price = 0;

    printf("현재 가진 돈을 입력하세요: ");
    scanf("%d", &money);

    printf("--- 메뉴판 ---\n");
    printf("1. 콜라 (1500원)\n2. 사이다 (1200원)\n3. 과자 (2000원)\n");
    printf("번호를 선택하세요: ");
    scanf("%d", &choice);

    // 1. switch문으로 가격 결정
    switch (choice) {
        case 1: price = 1500; break;
        case 2: price = 1200; break;
        case 3: price = 2000; break;
        default:
            printf("잘못된 번호입니다.\n");
            return 0; // 프로그램 종료
    }

    // 2. if~else문으로 구매 가능 여부 판단
    if (money >= price) {
        printf("구매 성공! 남은 돈은 %d원입니다. 💳\n", money - price);
    } else {
        printf("잔액이 부족합니다! %d원이 더 필요해요. ❌\n", price - money);
    }

    return 0;
}

💡 한눈에 정리하기!

종류 사용법 비유
if 한 가지만 확인 숙제를 했니? 그럼 놀아!
if ~ else 둘 중 하나 선택 짜장면 먹을래, 짬뽕 먹을래?
if ~ else if ~ else 여러 개 중 하나 선택 신호등이 빨간색? 노란색? 초록색?

 

나이에 따른 입장료 판별기 (else if 2개 사용)

나이를 입력받아 //어린이(13세 미만) 8천원 , //청소년(19세 이하) 5천원 쿠폰증정
// 나머지: 20세 이상 성인 입장료 10,000원 

실행결과 
--- [ 에버랜드 나이별 혜택 안내 ] ---
나이를 입력하세요: 10
어린이입니다! 입장료는 1,000원이며 솜사탕 쿠폰을 드립니다. 🍭


--- [ 에버랜드 나이별 혜택 안내 ] ---
나이를 입력하세요: 25
성인입니다! 입장료는 10,000원입니다. 즐거운 시간 되세요! 🎟️

💡 한눈에 정리하기!

종류 사용법 비유
if 한 가지만 확인 숙제를 했니? 그럼 놀아!
if ~ else 둘 중 하나 선택 짜장면 먹을래, 짬뽕 먹을래?
if ~ else if ~ else 여러 개 중 하나 선택 신호등이 빨간색? 노란색? 초록색?

 

사용자에게 0~100 사이의 점수를 입력받아 정해진 기준에 따라 학점을 출력합니다.

score >= 90   
// 90점 이상
 printf("학점: A (우수한 성적입니다! 👍)\n");
// 80점 이상 90점 미만
        printf("학점: B (잘 하셨습니다! 😊)\n");
// 70점 이상 80점 미만
        printf("학점: C (노력이 조금 더 필요해요. 🙂)\n");
// 60점 이상 70점 미만
        printf("학점: F (재수강을 고려해보세요. ☹️)\n");
// 60점 미만 모든 경우
        printf("학점: 과락 (다음 기회에... 🚩)\n");

 

 

💻 실행 결과 출력

--- [ 성적 산출 시스템 ] ---
점수를 입력하세요 (0~100): 95
학점: A (우수한 성적입니다! 👍)

 

--- [ 성적 산출 시스템 ] ---
점수를 입력하세요 (0~100): 50
학점: 과락 (다음 기회에... 🚩)

1. 간단한 자기소개 프로그램 (문자열 & 정수)

이 예제는 학생이 직접 이름과 나이를 입력하고, 이를 문장으로 완성해 보는 기초 단계.

  • 포인트: %s는 문자열, %d는 정수를 의미한다는 차이를 배울 수 있습니다.
  • 주의사항: scanf에서 정수 변수 앞에 붙는 & 기호의 유무를 꼭 확인하게 해주세요.

    [ 자기소개]
    안녕, 철수! 너는 17살이구나. 만나서 반가워!


2. 편의점 영수증 계산기 (산술 연산)

입력받은 값들을 이용해 간단한 수학 계산을 수행하는 예제입니다. 논리적 사고를 키우기.

포인트: 입력받은 데이터를 변수에 저장한 뒤, 이를 활용해 새로운 값(total)을 만들어내는 과정을 이해할 수 있습니다.


[ 계산 결과 ]
개당 1500원짜리 상품 3개를 선택하셨습니다.
총 결제 금액은 4500원입니다.

 

+ Recent posts