도전1

길이가 4 x 4인 int형 2차원 배열을 선언하고,  배열의 요소들을 오른쪽 방향으로 90'씩 이동시켜서 그 결과를 출력하는 프로그램을 작성해 보자.

힌트!!

더보기

행이 열이 되도록 바꿔야 하기 때문에 2차원 배열의 행과 열의 변수를 바꿔주고 약간의 계산만 더 해주면 됩니다.

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
 
void turn(int(*arr)[4], int len) {
    int temparr[4][4= { 0 };
    for (int i = 0; i < len; ++i) {
        for (int j = 0; j < len; ++j) {
            temparr[j][3 - i] = arr[i][j];
        }
    }
    for (int i = 0; i < len; ++i) {
        for (int j = 0; j < len; ++j) {
            arr[i][j] = temparr[i][j];
        }
    }
}
void show(int(*arr)[4], int len) {
    for (int i = 0; i < len; ++i) {
        for (int j = 0; j < len; ++j) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}
int main(void)
{
    int arr[4][4= {
        {1234},
        {5678},
        {9101112},
        {13141516}
    };
    for (int i = 0; i < 4++i) {
        show(arr, 4);
        turn(arr, 4);
        printf("\n");
    }
    return 0;
}
cs

도전2

달팽이 배열을 만들어서 이를 출력하는 프로그램을 작성하고자 한다. 하나의 숫자 n을 입력받아서 n x n의 길이에 해당하는 달팽이 배열을 출력해주는 프로그램을 작성해 보자.

힌트!!

더보기

가로, 세로 일정한 규칙으로 증감하는 것을 알아야 합니다.

가로 방향과 세로 방향을 채우는 반복문을 따로 식을 세우는 것이 훨씬 쉬울 수 있습니다.

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
 
int main() {
    int arr[20][20= { 0, };
    int size;    scanf("%d"&size);
    int n = size;
    int path = 1, count = 1, x = 0, y = 0;
    for (int i = 0; i < n; ++i) {
        arr[0][x] = count++;
        x += path;
    }
    x--;
    n--;
    while (n) {
        for (int i = 0; i < n; ++i) {
            y += path;
            arr[y][x] = count++;
        }
        path *= -1;
        for (int i = 0; i < n; ++i) {
            x += path;
            arr[y][x] = count++;
        }
        n--;
    }
 
    for (int i = 0; i < size++i) {
        for (int j = 0; j < size++j) {
            printf("%2d ", arr[i][j]);
        }
        printf("\n");
    }
 
 
    return 0;
}
cs

도전3

프로그램을 구현하다 보면 난수(Random Number)를 발생시켜야 하는 경우가 종종 있다. 여기서 말하는 난수란 임의의, 정해지지 않은, 무엇이 될지 모르는 수를 의미한다. 0 이상 99 이하의 난수를 총 5개 생성하는 프로그램을 작성해보자(힌트: % 연산자를 적절히 활용하면 된다).

힌트!!

더보기

난수가 100 이상의 수가 출력될 수 있기 때문에 % 연산자를 활용하여 0 이상 99 이하로 만들어주어야 합니다.

rand()%100

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    printf("난수의 범위: 0부터 %d까지 \n", RAND_MAX);
    for (int i = 0; i < 5++i) {
        printf("난수 출력:%d\n", rand() % 100);
    }
    return 0;
}
cs
 

도전4

두 개의 주사위를 던졌을 때의 결과를 출력하는 프로그램을 작성해보자. 물론 그 결과는 예측이 불가능해야 한다.

힌트!!

더보기

rand() 함수만 사용했을 경우 값이 일정하기 때문에 srand() 함수와 time함수를 사용하여 프로그램 실행 시마다 다른 값을 출력하게 해야 합니다.

srand((int)time(NULL)); 사용

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
    srand((int)time(NULL));
    for (int i = 1; i <= 2++i) {
        printf("주사위 %d의 결과 %d\n", i, rand() % 6 + 1);
    }
    return 0;
}
cs

도전5

가위 바위 보 게임을 만들어 보자. 사용자로부터 가위 바위 보 중에서 하나를 입력 받는다. 그리고 컴퓨터는 난수 생성을 통해서 가위 바위 보 중에서 하나를 선택하게 한다. 이 둘을 비교해서 승자와 패자를 가려주는 프로그램을 작성해 보자. 단 프로그램의 진행은 사용자가 질 때까지 계속되어야 하고, 마지막에 가서는 게임의 결과까지 출력해 주도록 하자.

힌트!!

더보기
 

도전4에서 했던 srand함수를 사용하여 초기화를 해야 합니다.

각 상황에 맞는 승부를 결정하고 사용자가 졌을 경우 break 를 사용하여 반복문을 탈출해야 합니다.

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    char* rps[3= { "바위""가위""보" };
    int user, com;
    int win = 0, draw = 0;
    while (1) {
        printf("바위는 1, 가위는 2, 보는 3:");
        scanf("%d"&user);
        srand((int)time(NULL));
        com = rand() % 3 + 1;
        if (com == user) {
            printf("당신은 %s 선택, 컴퓨터는 %s 선택, 비겼습니다!\n", rps[user - 1], rps[com - 1]);
            draw++;
        }
        else if ((com == (user + 1)) || ((com + 2== user)) {
            printf("당신은 %s 선택, 컴퓨터는 %s 선택, 당신이 이겼습니다!\n", rps[user - 1], rps[com - 1]);
            win++;
        }
        else {
            printf("당신은 %s 선택, 컴퓨터는 %s 선택, 당신이 졌습니다!\n", rps[user - 1], rps[com - 1]);
            break;
        }
    }
    printf("%d승, %d무", win, draw);
    return 0;
}
cs
 

도전6

친구와 둘이서 숫자 맞추기 게임을 해 본적이 있을 것이다(보통은 야구 게임이라고 불린다). 이것을 컴퓨터와 할 수 있도록 프로그램을 작성해보자.

힌트!!

더보기

컴퓨터에 입력된 숫자가 동일한게 있다면 다시 수를 선정해야합니다.

값을 비교하면서 같은 위치에서 같은 값이라면 strike, 다른 위치에서 같은 값이면 ball 변수에 추가를 해주면 됩니다.

 

내가 작성한 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
    int pcnum[4= { -10, };
    int strike=0, ball=0;
    int count = 1;
    int user[3];
    srand((int)time(NULL));
    printf("Start Game!\n");
    for (int i = 1; i <= 3++i) {
        pcnum[i] = rand() % 10;
        if (pcnum[i] == pcnum[i - 1]) {
            i--;
        }
        if (i == 3 && pcnum[1== pcnum[3]) {
            i--;
        }
    }
    while (strike != 3) {
        strike = 0;
        ball = 0;
        printf("3개의 숫자 선택: ");
        scanf("%d %d %d"&user[0], &user[1], &user[2]);
        for (int i = 0; i < 3++i) {
            for (int j = 0; j < 3++j) {
                if (pcnum[i + 1== user[j]) {
                    if (i == j) {
                        strike++;
                    }
                    else {
                        ball++;
                    }
                }
            }
        }
        printf("%d번째 도전 결과: %dstrike, %dball!!\n", count, strike, ball);
        count++;
    }
    printf("Game Over!\n");
    return 0;;
}
cs
 

'열혈 C' 카테고리의 다른 글

[열혈 C] 도전! 프로그래밍2  (0) 2020.11.04
[열혈 C] 도전! 프로그래밍1  (0) 2018.11.13

+ Recent posts