1. 23.8 심사문제 : 비트 논리 연산자 사용하기

 

문제 : 표준 입력으로 두 정수(unsigned int)가 입력됩니다. 입력된 두 정수의 비트 연산 결과를 각 줄에 출력하는 프로그램을 만드세요.

정답 :

#include <stdio.h>

int main(void){
    
    unsigned int num1, num2;
    
    scanf("%d %d",&num1,&num2);
    
    printf("%u\n",num1^num2);
    printf("%u\n",num1|num2);
    printf("%u\n",num1&num2);
    printf("%u\n",~num1);
    
    return 0;
}

 

 

2. 23.9 심사문제 : 시프트 연산자 사용하기

 

문제 : 표준 입력으로 정수가 입력됩니다. 입력된 정수를 왼쪽으로 20번, 오른쪽으로 4번 시프트 연산하여 결과를 출력하는 프로그램을 만드세요.

정답 :

#include <stdio.h>

int main(void){
    
    unsigned long long num;
    
    scanf("%lld",&num);
    
    printf("%llu",num<<20>>4);
    
    return 0;
    
}

unsigned long long 정수 자료형의 scanf 서식시정자와 printf 서식지정자에 맞춰 출력할 필요가 있다.

 

 

3. 25.7 심사문제 : 괄호 사용하기

 

문제 : 표준 입력으로 세 정수가 입력됩니다. 다음 순서대로 연산한 뒤 결과가 출력되게 만드세요.

 1. num1 num2를 더하기

 2. 1번 결과에 10을 곱하기

 3. 2번 결과에서 num3을 빼기

 

정답 : 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1;
    int num2;
    int num3;

    scanf("%d %d %d", &num1, &num2, &num3);

    printf("%d\n", (num1+num2)*10 -num3);

    return 0;
}

 

 

4. 23.8 심사문제 : 비트 논리 연산자 사용하기

 

문제 : 표준 입력으로 문자 'f', 'c', 'p' 중 하나가 입력됩니다. 입력된 문자가 'f'라면 "환타", 'c'라면 "콜라", 'p'라면 "포카리스웨트"를 출력하고, 아무 문자에도 해당되지 않으면 "판매하지 않는 메뉴"를 출력하는 프로그램을 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    char memu;

    scanf("%c", &memu);

    switch (memu)
    {
        case 'f':
            printf("환타");
            break;

        case 'c':
            printf("콜라");
            break;

        case 'p':
            printf("포카리스웨트");
            break;

        default:
            printf("판매하지 않는 메뉴");
            break;
    }

    return 0;
}

 

 

5. 27.12 심사문제 : 알파벳 순서로 출력하기

 

문제 : 표준 입력으로 문자 하나가 입력됩니다. 입력된 문자부터 z까지 순서대로 출력하는 프로그램을 만드세요.

정답 : 

#include <stdio.h>

int main(void){
    
    char ch;
    
    scanf("%c",&ch);
    
    for ( ; ch<='z'; ch++ ){
        
        printf("%c",ch);
        
    }
    
    return 0;
}

 

 

6. 27.12 심사문제 : 알파벳 순서로 출력하기

 

문제 : 표준 입력으로 금액이 입력됩니다. 1회당 요금은 1,200원이고, 교통카드를 사용했을 때마다의 잔액을 각 줄에 출력하는 프로그램을 만드세요.

정답 :

#include <stdio.h>

int main(void){
    
    int money;
    
    scanf("%d",&money);
    
    while (money>=1200){
        
        money-=1200;
        printf("%d\n",money);
        
    }
    
    return 0;
}

교통카드를 사용할 수 있는 최소 잔액은 1회 요금과 같은 1,200원이므로 1,200원 이상일 때만 반복하도록 만든다.

 

 

7. 29.10 심사문제 : 숫자의 합 구하기

 

문제 : 표준 입력으로 정수가 입력됩니다(입력 값의 범위는 0~1000). 다음 소스 코드를 완성하여 0부터 입력된 숫자까지의 합이 출력되게 만드세요.

정답 : 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    unsigned int num1;
    unsigned int sum = 0;

    scanf("%d", &num1);

    unsigned int i = 0;
    do
    {
        sum += i;
        i++;
    } while (i <= num1);

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

    return 0;
}

0부터 입력된 숫자까지의 합을 구하려면 세 변수를 적절히 활용해야 한다.

여기서는 변수 i를 활용하여 num1에 저장된 값까지 반복하게 해 합을 구하면 된다.

 

 

8. 30.7 심사문제 : 두 사이의 숫자 중 7로 끝나는 숫자 출력하기

 

문제 : 표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 7로 끝나지 않는 숫자가 출력되게 만드세요.

 

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1;
    int num2;
    int i;

    scanf("%d %d", &num1, &num2);

    i = num1;

    while (1)
    {
        if (i % 10 == 7) {
            i++;
            continue;
        }

        if (i > num2)
            break;

        printf("%d ", i);
        i++;
    }

    return 0;
}

 

 

9. 23.8 심사문제 : 비트 논리 연산자 사용하기

 

문제 : 표준 입력으로 삼각형의 높이가 입력됩니다(입력 값의 범위는 3~10). 입력된 높이만큼 산 모양으로 별을 출력하는 프로그램을 만드세요.

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int height;

    scanf("%d", &height);

    for (int i = 0; i < height; i++) {

        for (int j = 0; j < 2 * height - 1; j++) {

            if ((j + i >= height - 1) && (j - i <= height - 1))
                printf("*");
            else
                printf(" ");
        }

        printf("\n");

    }

    return 0;
}

 

 

10. 32.6 심사문제 : 중첩 루프 빠져나오기

 

문제 : 다음 소스 코드를 완성하여 200과 300이 각 줄에 출력되게 만드세요.

정답 :

#include <stdio.h>

int main()
{
    int num1 = 0;

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (num1 == 10)
                goto EXIT2;

            num1++;
        }
    }

EXIT1:
    printf("100\n");

EXIT2:
    printf("200\n");

EXIT3:
    printf("300\n");

    return 0;
}

goto로 중첩 루프를 한 번에 빠져나와야 하는데 레이블이 EXIT1, EXIT2, EXIT3 세 개가 있다. 여기서 EXIT1로 가면 EXIT1, EXIT2, EXIT3의 코드가 차례대로 실행되고, EXIT2로 가면 EXIT2, EXIT3의 코드가 차례대로 실행된다.

11.  

12. 33.8 심사문제 : 5와 11의 배수, 공배수 처리하기

 

문제 : 표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~1000, 두 번째 입력 값의 범위는 10~1000이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 첫 번째 정수부터 두 번째 정수까지 숫자를 출력하면서 5의 배수일 때는 "Fizz", 11의 배수일 때는 "Buzz", 5와 11의 공배수일 때는 "FizzBuzz"를 출력하는 프로그램을 만드세요.

 

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int num1, num2;

	scanf("%d %d", &num1, &num2);

	for (; num1 <= num2; num1++) {

		if (num1 % 5 == 0 && num1 % 11 == 0)
			printf("FizzBuzz\n");

		else if (num1 % 5 == 0)
			printf("Fizz\n");

		else if (num1 % 11 == 0)
			printf("Buzz\n");

		else
			printf("%d\n", num1);
	}

	return 0;
}
복사했습니다!