Hugh_휴 님의 블로그

C언어 코드 공부3(if문, switch문, 가위바위보) 본문

실습 연습

C언어 코드 공부3(if문, switch문, 가위바위보)

Hugh_휴 2026. 4. 3. 13:31

“Subtract.c” (이해 완료)

: 큰 수에서 작은 수를 빼는 프로그램

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int value1, value2;//정수 선언.

    printf("두 숫자를 입력하시오 : ");//문자 입력.
    scanf("%d %d", &value1, &value2);//value1과 value2에 정수 값을 받겠다는 말.

    if(value1 < value2)//조건문. 숫자 2개 중 value 2가 1보다 큰 경우 아래와 같이 계산.
        printf("%d - %d = %d입니다.\n", value2, value1, value2-value1);//위의 조건을 출력.
    else if(value1 > value2)//조건문. 숫자 2개 중 value 1이 2보다 큰 경우 아래와 같이 계산.
        printf("%d - %d = %d입니다.\n", value1, value2, value1-value2);//위의 조건을 출력.
    else
        printf("두 수는 같습니다.\n");//출력문.

    return 0;//종료신호.
}

 

모든 조건이 잘 작동하는 것을 확인할 수 있다.

 

“leap_year.c” (이해 완료)

윤년이란?

  • 윤년(Leap Year)은 지구가 태양을 한 바퀴 도는 데 걸리는 시간이 정확히 365일이 아니라 약 365.2422일이기 때문에 생기는 오차를 맞추기 위해 만든 제도.

윤년 규칙

  • 예외 조건: 하지만 그중에서 100으로 나누어떨어지는 연도는 평년(윤년이 아님)이 된다.
  • 예외의 예외 조건: 그런데 또 그중에서 400으로 나누어떨어지는 연도는 다시 윤년이 된다.
  • 기본 조건: 연도가 4로 나누어떨어지면 일단 윤년 후보.

<첫 번째 윤년>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int year; // 연도를 저장할 정수형 변수 선언

    printf("년도를 입력해주세요 : ");
    scanf("%d", &year);

    // --- [1번 관문: 4의 배수 확인] ---
    {
        if(year % 4 == 0) // 1번 조건문. 연도를 4로 나눈 나머지가 0.
            printf("넌 평범한 윤년이야\n"); // True
            
        else if(year % 4 != 0) // 4로 나눈 나머지가 0이 아니다.
            printf("넌 윤년이 될 자격이 없어\n"); // False
    }

    // --- [2번 관문: 100의 배수 확인] ---
    {
        if(year % 100 == 0) // 2번 조건문. 연도를 100으로 나눈 나머지가 0.
            printf("넌 희귀한 윤년이야\n");// True

        else if(year % 100 != 0) // 100으로 나눈 나머지가 0이 아니다.
            printf("넌 고작 평범한 윤년이야\n");// False
    }

    // --- [3번 관문: 400의 배수 확인] ---
    {
        if(year % 400 == 0) // 3번 조건문. 연도를 400으로 나눈 나머지가 0.
            printf("넌 아주 희귀한 윤년이야\n");// True

        else if(year % 400 != 0) // 400으로 나눈 나머지가 0이 아니ek.
            printf("넌 단지 희귀한 윤년이야\n");// False
    }

    return 0;//종료신호.
}

 

내 예상과는 다르게 결과값이 한번에 나오게 됐다.

 

꼭 윤년이어야 할 것 같다.

 

<두 번째 윤년>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int year;
    printf("년도를 입력해주세요 : ");
    scanf("%d", &year);
    
    if(year % 4 == 0) // [1번 관문이다]
    {
        // 4의 배수일 때만 이 안으로 들어옵니다.
        if(year % 100 == 0) // [2번 관문이다]
        {
            if(year % 400 == 0) // [3번 관문이다]
            {        
                printf("넌 아주 희귀한 윤년이야\n");
            } 
            else // 400의 배수가 아닐 때 (3번의 짝꿍이다)
            {
                printf("넌 단지 희귀한 윤년이야\n");
            }
        } // 2번 관문(100의 배수) 확인 끝
        else // 100의 배수가 아닐 때 (2번의 짝꿍이다)
        {
            printf("넌 고작 평범한 윤년이야\n");
        }
    } // 1번 관문(4의 배수) 확인 끝
    else // 4의 배수조차 아닐 때 (1번의 짝꿍이다)
    {
        printf("넌 윤년이 될 자격이 없어\n");
    }

    return 0;
}

 

갑자기 윤년에 꽂혀서 시간 너무 많이 써버렸다.

결과값도 잘나온다. 착한 말과 나쁜 말을 1번씩만 내뱉게 됐다.

 

“calculator.c”(이해 완료)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int value1;//계산할 숫자 값
    int value2;//계산할 숫자 값. 더 많은 계산을 원한다면 int value를 더 만들면 된다.
    char operator;//계산기호 값.

    printf("연산할 수식을 입력하시오 : ");//문자 출력.
    scanf("%d %c %d", &value1, &operator, &value2);//숫자 기호 숫자로 배열하여 계산식 넣으면 답 나오게 설정.

    switch(operator)
    {
        case '+'://더하기
            printf("%d + %d = %d\n", value1, value2, value1+value2);//숫자1, 숫자2, 숫자1+숫자2
            break;//해당 없으면 다음으로 빠져나간다.
        case '-'://빼기
            printf("%d - %d = %d\n", value1, value2, value1-value2);//숫자1, 숫자2, 숫자1-숫자2
            break;//해당 없으면 다음으로 빠져나간다.
        case '*'://곱하기
            printf("%d * %d = %d\n", value1, value2, value1*value2);//숫자1, 숫자2, 숫자1*숫자2
            break;//해당 없으면 다음으로 빠져나간다.
        case '/'://나누기
            printf("%d / %d = %d\n", value1, value2, value1/value2);//숫자1, 숫자2, 숫자1/숫자2
            break;//해당 없으면 다음으로 빠져나간다.
        default://위의 모든 case가 해당 없는 경우.
            printf("Error, 다시 입력해주세요.");//문자출력.
    }
    return 0;

}

 

어려울 줄 알았는데, 어제 한번 했다고 덜 어렵다. 결과도 모든 기호 다 잘 나온다.

 

“game.c”

<첫번째 가위바위보>

  • : 계산기 형식 그대로 가져와서 조금 수정해서 만든 가위바위보
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int user1, user2;

    printf("가위(0), 바위(1), 보(2) 숫자를 두 개 입력 (예: 1 0): ");
    scanf("%d %d", &user1, &user2);

    if (user1 == user2) {
        printf("쌤쌤\n");
    }
    else if ((user1 == 0 && user2 == 2) || (user1 == 1 && user2 == 0) || (user1 == 2 && user2 == 1)) {
        printf("왼쪽 승!\n");
    }
    else {
        printf("오른쪽 승!\n");
    }

    return 0;
}

 

결과 값이 주르륵 나온다.

 

<두번째 가위바위보>

  • : 첫번째 가위바위보 수정하려고 하니 너무 머리 아파서, 오늘 배운 if else if else문 사용해서 만들었다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int user1, user2;//왼쪽 오른쪽 손 설정

    printf("가위(0), 바위(1), 보(2) 숫자를 두 개 입력 (예: 1 0): ");//사용자가 입력하기 편하게 설명문구 추가.
    scanf("%d %d", &user1, &user2);//정수가 어디로 오는지 보여주는 것.

    if (user1 == user2) {
        printf("쌤쌤\n");//조건문. True. 같다면 쌤쌤.
    }
    else if ((user1 == 0 && user2 == 2) || (user1 == 1 && user2 == 0) || (user1 == 2 && user2 == 1)) {
        printf("왼쪽 승!\n");//False. 왼쪽 숫자가 크면 왼쪽 승!
    }
    else {
        printf("오른쪽 승!\n");//False. 오른쪽 숫자가 크면 오른쪽 승!
    }

    return 0;//종료신호.
}

 

나는 규범을 잘 따르는 사람이라 0, 1, 2값 이외의 값을 넣는 상황은 생각하지 못했다. 3은 넣지 말자.

 

 

"gugudan2.c"(이해 조금 됨.)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int i, j, k; // i: 줄(묶음), j: 곱해지는 수(1~9), k: 단(2~9)

    // [1단계] 3단씩 끊어서 출력하기 위해 큰 묶음을 3번 반복 (2~4단, 5~7단, 8~9단)
    for (i = 2; i <= 8; i += 3) 
    {
        // [2단계] 각 단의 곱해지는 숫자 (1부터 9까지)
        for (j = 1; j <= 9; j++) 
        {
            // [3단계] 가로로 3개의 단을 동시에 출력
            for (k = i; k < i + 3; k++) 
            {
                if (k <= 9) // 9단까지만 출력되도록 제한 (규범 체크!)
                {
                    printf("%d * %d = %2d\t", k, j, k * j); 
                    // \t는 탭(Tab) 키입니다. 옆으로 간격을 맞춰줘요.
                }
            }
            printf("\n"); // 가로 3개가 끝나면 줄바꿈
        }
        printf("\n"); // 3단 묶음이 끝나면 한 줄 더 띄우기
    }

    return 0;
}

 

 

육망성(도와줘 제미나이)

#include <stdio.h>

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

   
    for (i = 0; i <= n; i++) 
    {
        
        for (j = 0; j <= n * 2; j++) 
        {
            
            int up_triangle = (j == n - i || j == n + i || (i == n * 2 / 3 && j > n - i && j < n + i));
            
            
            int down_triangle = (j == i - n / 3 || j == (n * 7 / 3) - i || (i == n / 3 && j > i - n / 3 && j < (n * 7 / 3) - i));

            
            if (up_triangle || down_triangle) 
            {
                printf("*");
            } 
            else 
            {
                printf(" ");
            }
        }
        printf("\n");
    }

    return 0;
}

 

제미나이의 실패의 흔적들