728x90
교재 : 열혈 C 프로그래밍
도전 1
void TurnOfReck(int(*arr)[4], int len) {
int i, j;
int tempArr[4][4];
//바꾸기
for (i = 0; i < len; i++) {
for (j = 0; j < len; j++) {
tempArr[j][4 - 1 - i] = arr[i][j]; //핵심 코드!!
}
}
//원본 배열 변환
for (i = 0; i < len; i++) {
for (j = 0; j < len; j++) {
arr[i][j] = tempArr[i][j];
}
}
printf("\n");
}
도전 2
int arr[4][4];
int num = 4;
int count = 0; //배열에 들어가는 값
int sw = 1; //방향, -1이 되면 문워크 함
int row = 0, col = -1;
while (num) {
// 열 삽입
for (int i = 0; i < num; i++) {
col += (1 * sw); //★★★★
arr[row][col] = count;
count++;
}
num -= 1; //가로나 세로로 하나 채워졌으므로
for (int i = 0; i < num; i++) {
row += (1 * sw); //★★★★
arr[row][col] = count;
count++;
}
// 방향 변경
sw *= -1; //★★★★
}
도전 3
rand함수를 이용하여 0이상 99이하의 난수를 총 5개 생성하는 프로그램을 작성
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
printf("난수의 범위: 0부터 %d까지 \n", RAND_MAX);
for(i=0;i<6;i++){
printf("%d \n", rand()%100); //★★★★
}
return 0;
}
RAND_MAX로 하면 32767까지 돼서 %100d을 해주는 듯!
도전 4
srand함수, rand함수, time함수를 이용하여 주사위를 출력하는 프로그램을 작성
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
srand((int)time(NULL)); //★★★
printf("주사위 결과: %d \n", rand() % 6);
// 0~MAX 사이의 난수를 쓰고 싶으면 그 수로 나누면 될 듯
return 0;
}
도전 5
가위 바위 보 게임을 만들자. 사용자는 가위 바위 보 중에서 하나를 입력
그리고 컴퓨터는 난수를 생성해서 가위 바위 보 중에서 하나를 선택 그리고 이를 비교해서 승자와 패자를
가리는 프로그램을 생성
단, 사용자가 질 때까지 계속하되 마지막에서 게임의 결과를 출력
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int num;
int win = 0, draw = 0, lose = 0;
char* arr[4] = { "가위", "바위", "보" };
while (lose == 0) { //사용자가 질 때까지
printf("가위는 0, 바위는 1, 보는 2: ");
scanf_s("%d", &num);
if (num<3) {
//컴퓨터는 0~2사이의 랜덤한 숫자
srand((int)time(NULL) + num);
int com_num = rand() % 3;
printf("당신은 %s선택, 컴퓨터는 %s선택, ", arr[num], arr[com_num]);
if (num - com_num == 0) printf("비겼습니다.\n");
else if (num - com_num == -1 || num - com_num == 2) {
printf("당신이 졌습니다.\n");
lose++;
}
else if (num - com_num == -2 || num - com_num == 1) {
printf("당신이 이겼습니다. \n");
win++;
}
}else {
printf("잘못된 입력입니다.\n");
}
}
printf("\n게임의 결과 : %d승, %d무\n", win, draw);
return 0;
}
결과 판독법은. 경우의 수를 따져서 컴퓨터가 이기는 경우, 사용자가 이기는 경우에 관해서 살펴 봤다.
도전 6
숫자 맞추기 게임(야구게임)을 컴퓨터와 할 수 있도록 프로그램을 작성
컴퓨터는 0에서 9까지 서로 다른 세 개의 숫자를 고르고 사용자는 이것을 맞추기
[조건]
- 숫자의 순서도 정확히 맞춰야 함
- 사용자가 예상한 숫자를 입력할 때마다 컴퓨터는 입력된 숫자와 컴퓨터 자신이 생각한 숫자가 얼마나 비슷한지 알려줘야함.
- 컴퓨터가 1, 4, 9 이고 사용자가 4, 0, 9
- 두개의 숫자 4, 9가 일치
- 9는 숫자와 위치까지 일치(1 strike)
- 4는 숫자만 일치(1 ball)
- 이 때 몇 번만에 3 strike를 얻었는지도 출력
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int pc[3];
int score[2] = { 0, 0 }; // Strike Ball
int count = 1;
srand((int)time(NULL));
printf("숫자 맞추기 게임을 시작합니다.\n");
int n = 1;
while (n) {
int n1 = rand() % 9;
int n2 = rand() % 9;
int n3 = rand() % 9;
//세 수가 모두 다를 때
if (n1 != n2 && n1 != n3 && n2 != n3) {
pc[0] = n1;
pc[1] = n2;
pc[2] = n3;
n = 0;
}
}
// printf("%d %d %d \n", pc[0], pc[1], pc[2]);
while (score[0] != 3) {
score[0] = 0;
score[1] = 0;
int user[3];
printf("[%d판 진행] 0~9까지 서로다른 숫자 3자리를 입력해주세요: ", count);
scanf_s("%d %d %d", &user[0], &user[1], &user[2]);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (pc[i] == user[j]) { //배열 안에 사용자가 입력한 수가 있는지
if (i == j) { //인덱스가 똑같은 지(같은 위치)
score[0] += 1;
}else {
score[1] += 1;
}
}
}
}
printf("결과: %d Strike, %d Ball \n", score[0], score[1]);
count += 1;
}
printf("3 Strike \n");
return 0;
}
'C' 카테고리의 다른 글
여러 분은 이 답이 뭐라고 생각하십니까? 알면 상위 1% 코딩 실력을 가진 사람 (3) | 2022.07.22 |
---|---|
[C언어 문법] part04 C언어의 깊은 이해 (0) | 2021.12.11 |
[C언어 문법] part03 포인터와 배열의 완성 (0) | 2021.12.09 |
[열혈 C 프로그래밍] 도전! 프로그래밍2 (1) | 2021.10.21 |
[열혈 C 프로그래밍] 도전! 프로그래밍1 (0) | 2021.10.21 |