Small Grey Outline Pointer c언어 난수 발생시키기/가위바위보/오름차순,내림차순
본문 바로가기
Dev./C++

c언어 난수 발생시키기/가위바위보/오름차순,내림차순

by sso. 2022. 4. 1.
#include <stdio.h>
#include <stdlib.h>


int ten(int ran) { //1~10까지 이므로 %10(나머지)
	return ran % 11;
}

void ex1() {
	int ranNum = rand();
	int i;
	for (int i = 0; i < 5; i++) {
		printf("난수: %d, 10자리 난수: %d\n", ranNum,ten(ranNum));
		ranNum = rand();
	}
}


int main() {
	ex1();
}

 

난수: 41, 10자리 난수: 8
난수: 18467, 10자리 난수: 9
난수: 6334, 10자리 난수: 9
난수: 26500, 10자리 난수: 1
난수: 19169, 10자리 난수: 7

 

 

 

#include <stdio.h>
#include <stdlib.h>

void main()
{
	int ranNum = rand();
	int i;

	for (i = 0; i < 5; i++) {
		printf("%d\n", ranNum);
		ranNum = rand();
	}

}

41
18467
6334
26500
19169

 

난수란, 규칙성 없이 임의로 생성되는 수

난수를 총 5번 생성하는데 모두 0이상의 정수가 나오는 것을 확인 할 수 있다

 

 

 


[01] 1~10까지의 난수를 생성하고 사용자가 난수를 맞출때 까지 반복하는 프로그램 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(){


	srand((unsigned int)time(NULL)); //시간정보를 이용해 난수 생성
	int randNum = rand() % 10 + 1; //1~10까지의 난수 설정
	int choice = 0;
	
	while (1) {
		printf("난수를 맞춰보세요(1~10사이): ");
		scanf_s("%d", &choice);


		if (choice == randNum) {
			printf("정답입니다\n");
			break;
		}
		else {
			printf("틀렸습니다. 재시도\n");
		}
	}


}

 

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


int ten2(int ran) { //1~10까지 이므로 %10(나머지)
	return ran % 10 +1;
}

void ex2() {
	srand((unsigned int)time(NULL));
	int answer = ten2(rand());
	int tryu;
	
	while (1) {
		tryu = ten2(rand());
		printf("정답은: %d 유저의 숫자: %d", answer, tryu);
		if (tryu == answer) {
			printf("축하합니다.");
			break;
		}
		printf("틀렸습니다.\n");
	}

}

 

[02] 위의 응용문제, main함수에는 호출문 외에 존재하지 않게하기

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void randNUM(){


	srand((unsigned int)time(NULL)); //시간정보를 이용해 난수 생성
	int randNum = rand() % 10 + 1; //1~10까지의 난수 설정
	int choice = 0;
	
	while (1) {
		printf("난수를 맞춰보세요(1~10사이): ");
		scanf_s("%d", &choice);


		if (choice == randNum) {
			printf("정답입니다\n");
			break;
		}
		else {
			printf("틀렸습니다. 재시도\n");
		}
	}


}


void main() {

	randNUM();
}

 

난수를 맞춰보세요(1~10사이): 5
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 1
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 4
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 3
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 6
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 9
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 8
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 7
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 2
틀렸습니다. 재시도
난수를 맞춰보세요(1~10사이): 10
정답입니다

 


[01] 가위바위보 게임 프로그램 만들기

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


static const char* CHOICE[] = { "가위", "바위", "보" };
static const char* WIN = "승리";
static const char* LOSE = "패";
static const char* TIE = "비김";


void main() {

	int iRandom = 0; //1가위 2바위 3보
	int iSelection = 0;
	
	
	//컴퓨터의 랜덤값 저장
	
	srand(time(NULL)); //srand 값 초기화
	iRandom = (rand() % 3) + 1;
	printf("1가위 2바위 3보: ");
	scanf_s("%d", &iSelection);
	

	printf("\n 사용자: %s", CHOICE[iSelection-1]); //배열이 0부터 시작하므로 1을 빼준다
	printf("\n 컴퓨터: %s\n", CHOICE[iRandom - 1]);

	
	//결과출력

	if (iSelection == iRandom) {
		printf(TIE);
	}
	else {
		switch (iSelection) {
		case 1:printf(iRandom == 3 ? WIN : LOSE);
			break;//내가 낸 값이 1가위, 컴퓨터가 낸 랜덤값이 3보 일 때
		case 2:printf(iRandom == 1 ? WIN : LOSE);
			break;
		case 3:printf(iRandom == 2 ? WIN : LOSE);
			break;
		}
	}

}

1가위 2바위 3보: 3

 사용자: 보
 컴퓨터: 보
비김

 

1가위 2바위 3보: 2

 사용자: 바위
 컴퓨터: 가위
승리

 

1가위 2바위 3보: 2

 사용자: 바위
 컴퓨터: 보

 

 

[02] 가위바위보 게임은 함수로 만들고, main함수에는 호출문 외에 존재하지 않게하기

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


static const char* CHOICE[] = { "가위", "바위", "보" };
static const char* WIN = "승리";
static const char* LOSE = "패";
static const char* TIE = "비김";


void game()
{
	int iRandom = 0; //1가위 2바위 3보
	int iSelection = 0;


	//컴퓨터의 랜덤값 저장

	srand(time(NULL)); //srand 값 초기화
	iRandom = (rand() % 3) + 1;
	printf("1가위 2바위 3보: ");
	scanf_s("%d", &iSelection);


	printf("\n 사용자: %s", CHOICE[iSelection - 1]); //배열이 0부터 시작하므로 1을 빼준다
	printf("\n 컴퓨터: %s\n", CHOICE[iRandom - 1]);


	//결과출력

	if (iSelection == iRandom) {
		printf(TIE);
	}
	else {
		switch (iSelection) {
		case 1:printf(iRandom == 3 ? WIN : LOSE);
			break;//내가 낸 값이 1가위, 컴퓨터가 낸 랜덤값이 3보 일 때
		case 2:printf(iRandom == 1 ? WIN : LOSE);
			break;
		case 3:printf(iRandom == 2 ? WIN : LOSE);
			break;
		}
	}
}


void main() {

	game(); //가위바위보 함수만 가져오기

}

 

 

 

[03] 가위바위보 다르게 풀어보기 (함수를 계속 만들어서 메인 함수에 호출하도록)

#include <stdio.h>
#include <time.h>
#include <stdlib.h>



int ten2(int ran) { //1~10까지 이므로 %10(나머지)
	return ran % 10 +1;
}

void ex2() {
	srand(time(NULL));
	int answer = ten2(rand());
	int tryu;
	
	while (1) {
		tryu = ten2(rand());
		printf("정답은: %d 유저의 숫자: %d\n", answer, tryu);
		if (tryu == answer) {
			printf("축하합니다.");
			break;
		}
		printf("틀렸습니다.\n");
	}

}

int three(int ran) {
	return ran % 3 + 1; //0이 있으므로 +1을 해준다
}

int computer(void) {
	return three(rand());
}

int user(void) {
	int invalue;
	printf("유저의 가위1 바위2 보3 를 선택해주세요: ");
	scanf_s("%d", &invalue);
	return invalue;
}


int winloss(int c, int u) {

	if (u == 1) {
		if (c == 3) {
			return 1;
		}
	}

	else if (u == 2) {
		if (c == 1) {
			return 1;
		}
	}

	else if (u == 3) {
		if (c == 2) {
			return 1;
		}
	}

	return 0;
}



void game() {
	//이길 때 까지 반복
	while (1) {

	//컴퓨터 선택
	int cuser = computer();
	
	//유저 선택
	int userv = user();
	//승패 판단
	if (1 == winloss(cuser, userv))
	{
		printf("축하드립니다. 이겼습니다.");
		break;
	}
	printf("컴퓨터는 %d 당신은 %d 입니다. 졌습니다.", cuser, userv);
	}
}


void ex3() {

	game();
}


int main() {
	//ex1();
	//ex2();
	ex3();
}

유저의 가위1 바위2 보3 를 선택해주세요: 3
컴퓨터는 3 당신은 3 입니다. 졌습니다.유저의 가위1 바위2 보3 를 선택해주세요: 2
컴퓨터는 3 당신은 2 입니다. 졌습니다.유저의 가위1 바위2 보3 를 선택해주세요: 1
컴퓨터는 2 당신은 1 입니다. 졌습니다.유저의 가위1 바위2 보3 를 선택해주세요: 3
축하드립니다. 이겼습니다.

 

 

 

 


 

길이가 5인 int형 배열을 만들고 사용자로부터 5개의 정수 입력 받기

오름차순, 내림차순 함수 사용해서 main에서 호출하기

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void inputarry(int arr[],int index) {
	printf("배열의 %d 번째 값 입력: ", index+1); //몇 번째이므로 +1
	scanf_s("%d", &arr[index]);
}


void decs(int arr[]) {
	int max,maxi, tmp;
	
	int resultarr[5];
	for (int i = 0; i < 5; i++) {
		max = arr[i];
		maxi = i;
		for (int j = i+1; j < 5; j++) {
			if (max < arr[j]) {
				tmp = max;
				max = arr[j];
				arr[maxi] = max;
				arr[j] = tmp;
				
			}
		}
	}
}

void asc(int arr[]) {
	for (int i = 0; i < 5; i++) {
		printf("%d ", arr[4 - i]);
	}
}

void ex5() {
	int iarry[5];
	//배열 입력
	for (int i = 0; i < 5; i++) {
		inputarry(iarry, i);
	}


	//내림차순
	decs(iarry);
	for (int i = 0; i < 5; i++) {
		printf("%d ", iarry[i]);
	}
	printf("\n");
	//내림차순
	asc(iarry);
}


int main() {
	//ex1();
	//ex2();
	//ex3();
	//ex4();
	ex5();
}

배열의 1 번째 값 입력: 4
배열의 2 번째 값 입력: 5
배열의 3 번째 값 입력: 6
배열의 4 번째 값 입력: 2
배열의 5 번째 값 입력: 9
9 6 5 4 2
2 4 5 6 9

 

 

 

 

 

 

728x90

댓글