간단한 프로그램 함수로 구현하기 14
가위바위보 게임 만들기
난수 발생 함수를 사용하여 컴퓨터와 대전이 가능한 가위바보 게임을 만들어 보세요.
참고 사항
게임을 위한 각 기능들을 별도의 함수로 만들도록 한다.
게임을 위해 필요한 기능으로는 사용자 입력, 컴퓨터 입력, 판정, 결과 출력 등이 있다.
각 기능은 다음과 같은 삼수로 구현한다.
함수1 : 사용자로부터 입력을 받기 위한 함수이다.
사용자로부터 0, 1, 2, 3의 값을 입력 받을 수 있는데 1, 2, 3은 각 가위, 바위, 보에 대응되는 정숫값이고, 0이 입력되면 결과를 출력한 후 프로그램을 종료한다.
단, 지정된 번호 이외의 값이 입력될 경우 오류 메시지를 출력한다.
함수2 : 난수 발생 함수를 사용하여 1~3의 값 중 임의의 값을 생성하며 이에 따라 컴퓨터의 가위, 바위, 보를 결정한다.
함수3: 해당 게임에 대한 승패를 결정하는 함수이다.
함수4: 최종적으로 사용자의 승, 무승부, 패에 대한 횟수를 출력한다.
필요한 경우, 전역 변수를 사용하지만 최소한으로 한다.
실습 및 프로그래밍 절차
- 승부, 무승부수, 패수를 기록하기 위한 변수와 사용자의 가위, 바위, 보 / 컴퓨터의 가위, 바위, 보 등 필요한 변수를 선언한다.
- 함수2를 사용하여 컴퓨터의 가위, 바위, 보를 생성한다.
- 함수1을 사용하여 사용자로부터 가위, 바위, 보를 입력받는다.
- 함수3을 사용하여 현재 게임에 대한 승패를 판단하고 결과를 출력한다. 또한 이에 따라 승수, 무승부수, 패수를 갱신한다.
- 사용자가 0 이하의 값을 입력하면 최종적으로 승수, 무승부수, 패수를 출력하고 프로그램을 종료한다.
실행 예

작성코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int input_rps(void);
int computer_rps(void);
int deter_result(int user, int com);
void count(int input, int win, int lose, int draw);
int main(void)
{
printf("# 가위바위보 #\n");
srand(time(NULL));
int win_count = 0;
int lose_count = 0;
int draw_count = 0;
while(1)
{
int user = input_rps();
if(user <= 0)
{
count(user,win_count,lose_count,draw_count);
break;
}
int com = computer_rps();
int result = deter_result(user,com);
if (result == 1)
win_count++;
else if (result == 2)
lose_count++;
else if (result == 3)
draw_count++;
}
return 0;
}
int input_rps(void)
{
int user_input;
printf("\n");
printf("System : 1.가위 / 2.바위 / 3.보 / 0.결과 및 종료 \n> ");
scanf("%d",&user_input);
if(user_input>0)
{
printf("System : 사용자는 %d(을)를 냈습니다.\n",user_input);
return user_input;
}
else
return user_input;
}
int computer_rps(void)
{
int computer_input = (rand() % 3)+1;
printf("System : 컴퓨터는 %d(을)를 냈습니다.\n",computer_input);
return computer_input;
}
int deter_result(int user,int com)
{
if (user == 0)
{
return 0;
}
else if (user == com)
{
printf("System : 무승부 입니다.\n");
return 3;
}
else if ((user == 1 && com == 3)||(user == 2 && com == 1)||(user == 3 & com == 2))
{
printf("System : 축하합니다. 이겼습니다.\n");
return 1;
}
else
{
printf("System :아쉽군요. 졌습니다.\n");
return 2;
}
}
void count(int input,int win,int lose,int draw)
{
if (input == 0)
{
printf("<최종결과>\n");
printf("승 : %d\n",win);
printf("패 : %d\n",lose);
printf("무 : %d\n",draw);
}
}
출력결과

간단한 프로그램 함수로 구현하기 15
슬롯머신 만들기
슬롯머신 게임 만들기: 마찬가지로 난수 발생 함수를 사용하여 3개의 숫자를 기반으로 하는 슬롯머신 프로그램을 만들어 보세요
참고 사항
- 한 번의 게임에서 1~9 사이의 숫자 3개가 나온다.
이 숫자들의 조합에 따라 1등, 2 등, 3등, 4등이 결정되는데 각 등수에 대한 규칙은 스스로 결정한다.
예를 들어,
모두 7이 나오면 1등,
동일한 숫자 3개가 나오면 2등,
동일한 숫자 2개 가 나오면 3등,
이외에는 4등이 된다.
- 각 등수에 따라 배팅한 금액에 대한 배율이 결정되는데, 등수 별 배율도 각자 결정토록 한다.
예를 들어,
1등은 배팅 금액의 5배,
2등은 3배,
3등은 2배가 되며
4등은 배팅 금액 을 모두 잃게 된다.
- 프로그램 구현을 위해서 InputMoney 함수와 Run 함수를 만든다.
InputMoney 함수는 사용자로부터 금액을 입력받는다.
Run 함수는 해당 금액을 사용하여 슬롯머신 게임을 수행한다.
실습 및 프로그래밍 절차
- 사용자 배팅 금액을 입력받는 InpuMoney 함수를 만든다.
해당 함수에서는 100원 미 만의 금액을 입력받도록 한다.
- Run 함수에서는 rand 함수를 사용하여 19 사이의 정수 3개를 생성하고,
규칙에 따 라서 등수 및 금액을 산출할 수 있도록 한다.
- main 함수에서는 InputMoney 함수와 Run 함수를 사용하여 슬롯머신 게임을 수행하며
사용자 입력에 따라 게임을 반복적으로 수행한다.
실행 예

작성코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
printf("△◆★슬롯머신 게임에 오신 것을 환영합니다☆●□\n");
while(1)
{
printf("\n");
srand(time(NULL)); //프로그램 시작시 한번만 선언한다.
int InputMoney(); //배팅금액 입력함수 선언
void run(); //배팅 프로그램 선언
int Money = InputMoney();
int rank, result;
printf("결과 : "); // 결과 출력
int ary[3];
for(int i=0;i<3;i++)
{
run(&result);
printf("%d ",result);
ary[i] = result;
}
printf("\n");
if (ary[0] == 7) // 1등 판별
{
if (ary[1] == 7)
{
if (ary[2] == 7)
rank = 1;
}
}
if (ary[0] != 7) // 그 외 등수 판별
{
int deter_num = ary[0];
if (ary[1] == deter_num)
{
if (ary[2] == deter_num)
{
rank = 2;
}
else
{
rank = 3;
}
}
else if (ary[1] != deter_num)
{
if (ary[2] == deter_num)
{
rank = 3;
}
else
rank = 4;
}
else
rank = 4;
}
printf("등수 : %d\n",rank);
if (rank == 1) // 배팅금액결과 출력
Money = Money * 10;
else if (rank == 2)
Money = Money * 3;
else if (rank == 3)
Money = Money * 2;
else
Money = 0;
printf("배팅결과 금액 : %d\n",Money);
printf("게임을 계속하시려면 어떤 키든 입력하세요...\n");
printf("게임을 중단하시려면 0을 눌러주세요...");
int start_num;
scanf("%d",&start_num);
if (start_num == 0)
break;
}
return 0;
}
int InputMoney(void)
{
printf("100원 미만의 금액을 입력하세요. : ");
while(1)
{
int Money;
scanf("%d",&Money);
if ((Money>0) && (Money<100))
return Money;
}
}
void run(int *result)
{
*result = (rand() % 9)+1;
}
출력 결과

간단한 프로그램 함수로 구현하기 16
달력만들기
년월을 (원하는 방식으로) 입력받아
해당 년도와 월을 출력하세요.
* 윤년 계산하세요.
그레고리력의 윤년 규칙은 다음과 같습니다.
서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)
실행 예
* 정렬 해서 깔끔하게 출력하세요.

*기원후 1년 1월 1일, 월요일
예) 입력: 1년 3월 달력을 보여줘
1월의 31일과 2월의 28일을 더하고, 일주일 7일로 나누면, 나머지 3(월,화,수)은 2월 마지막에 출력된 요일들입니다.
3월 1일을 출력하는 시작일은 나머지 3의 다음날인 (목요일)입니다.

#include<stdio.h>
int leap_year(int year);
int days_month(int year,int month);
int start_weekday(int year);
int month_start_weekday(int year, int month);
void calendar(int year,int month);
void input_year_month(int *year,int *month);
int main(void)
{
int year, month;
input_year_month(&year, &month);
calendar(year,month);
return 0;
}
int leap_year(int year)
{
return((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
}
int days_month(int year, int month)
{
int days_month[] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(month == 2 && leap_year(year))
{
return 29;
}
return days_month[month-1];
}
int start_weekday(int year)
{
int total_days = 0;
for(int i=1;i<year;i++)
{
total_days += leap_year(i) ? 366 : 365;
}
return (total_days + 1) % 7;
}
int month_start_weekday(int year, int month)
{
int weekday = start_weekday(year);
for(int i=1;i<month;i++)
{
weekday = (weekday + days_month(year,i))%7;
}
return weekday;
}
void calendar(int year, int month)
{
int start_day = month_start_weekday(year,month);
int last_day = days_month(year,month);
printf("\n\n %d년 %d월\n",year,month);
printf("일 월 화 수 목 금 토\n");
for(int i=0;i<start_day;i++)
{
printf(" ");
}
for(int i=1;i<=last_day;i++)
{
printf("%2d ",i);
if((start_day + i) % 7 == 0)
{
printf("\n");
}
}
printf("\n");
}
void input_year_month(int *year, int* month)
{
printf("연도와 월을 입력하세요 : ");
scanf("%d %d",year,month);
}
간단한 프로그램 함수로 구현하기 17
숫자 야구 만들기
방법은 개발자가 선택하세요.
입력받은 값은, 예외가 없도록 만들어 주세요.
게임을 시작하면, 컴퓨터가 랜덤한 숫자를 0~9 사이에 중복되지 않게 순서를 정해서 저장합니다.
매 라운드, 사용자에게 예상한 숫자 3개를 입력 받습니다.
사용자가 입력한 숫자와 랜덤한 숫자가 맞고, 입력 순서까지 맞으면 1strike,
사용자가 입력한 숫자와 랜덤한 숫자는 맞지만, 입력 순서가 맞지 않으면1ball,
숫자가 맞지 않고, 위치도 맞지 않으면 out
입력 후 결과에 대해 strike, ball, out 을 출력합니다.
9라운드까지 진행됩니다.
실행 예

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
printf(" < 숫자 야구 게임 > \n");
srand(time(NULL));
int num[3]; //중복 제거한 랜더한 숫자 생성
for(int i=0;i<3;i++){
int r = (rand()%9)+1;
for(int j=0;j<3;j++){
while(num[j] == r){
r = (rand()%9)+1;
num[j] = r;
}
}
num[i] = r;
// printf("%d",num[i]);
}
int use_input1;
int use_input2;
int use_input3;
int r=0;
for(r=0;r<10;r++){ //1라운드부터 9라운드까지 숫자를 세개씩 입력받음
printf("\n");
printf(" Enter Number 1~9 : ");
scanf("%d",&use_input1);
printf(" Enter Number 1~9 : ");
scanf("%d",&use_input2);
printf(" Enter Number 1~9 : ");
scanf("%d",&use_input3);
int strike = 0; //새로운 라운드를 위해 리셋
int ball = 0;
for(int i=0;i<3;i++){ //ball 선별과정
if(num[i] == use_input1){
ball++;
}
}
for(int i=0;i<3;i++){
if(num[i] == use_input2){
ball++;
}
}
for(int i=0;i<3;i++){
if(num[i] == use_input3){
ball++;
}
}
if (ball>0){ //ball, strike 개수 판별
if(num[0] == use_input1){
strike++;
ball--;
if(num[1] == use_input2){
strike++;
ball--;
if(num[2] == use_input3){
strike++;
ball--;
}
}
else if(num[2] == use_input3){
strike++;
ball--;
}
}
else{
if(num[1] == use_input2){
strike++;
ball--;
if(num[2] == use_input3){
strike++;
ball--;
}
}
else if(num[2] == use_input3){
strike++;
ball--;
}
}
}
system("clear");
printf("\n <%d Round>\n",r);
if(ball == 0 && strike ==0){
printf(" [OUT]\n");
}
else{
printf("[STRIKE : %d / BALL : %d]\n",strike,ball);
}
printf(" Enter Number 1~9 : %d\n",use_input1);
printf(" Enter Number 1~9 : %d\n",use_input2);
printf(" Enter Number 1~9 : %d\n",use_input3);
if(strike == 3){
printf("WIN !");
break;
}
}
return 0;
}
간단한 프로그램 함수로 구현하기 18
로또 키오스크 만들기
방법은 개발자가 선택하세요.
입력받은 값은, 예외가 없도록 만들어 주세요.
자동, 반자동, 수동 선택하세요.
최대 1~5개의 로또를 선택 하세요.
입금과 잔돈을 결재하고, 결재 결과로 영수증을 출력하세요
영수증에 발행일시(현재), 추첨일(해당 주 토요일), 지급기한(1년)을 출력하세요.
실행 예

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int MAX_GAME = 5;
void print_time() {
time_t t;
struct tm *tm;
char buffer[50];
t = time(NULL);
tm = localtime(&t);
strftime(buffer, sizeof(buffer), "%Y/%m/%d(%a) %H:%M:%S", tm);
printf("%27s\n", buffer);
}
void print_title() {
printf("%24s\n", "♧♣♧Lotto 6/45♧♣♧");
}
int is_duplicate(int arr[], int size, int num) {
for (int i = 0; i < size; i++) {
if (arr[i] == num) return 1;
}
return 0;
}
void generate_auto(int total_games) {
int numbers[6];
for (int i = 0; i < total_games; i++) {
int count = 0;
while (count < 6) {
int n = rand() % 45 + 1;
if (!is_duplicate(numbers, count, n)) {
numbers[count++] = n;
}
}
for (int j = 0; j < 6; j++) {
printf("%4d|", numbers[j]);
}
printf("\n");
}
}
void generate_semi_auto(int total_games) {
int numbers[6];
for (int g = 0; g < total_games; g++) {
int count = 0;
printf(">> 0을 입력하면 나머지는 자동으로 채워집니다.\n");
for (int j = 0; j < 6; j++) {
int num;
printf("Lotto %d번 수동 입력 >> ", j + 1);
scanf("%d", &num);
if (num == 0) break;
if (num < 1 || num > 45 || is_duplicate(numbers, count, num)) {
printf("1~45 사이의 중복 없는 숫자를 입력하세요.\n");
j--;
continue;
}
numbers[count++] = num;
}
while (count < 6) {
int n = rand() % 45 + 1;
if (!is_duplicate(numbers, count, n)) {
numbers[count++] = n;
}
}
for (int j = 0; j < 6; j++) {
printf("%4d|", numbers[j]);
}
printf("\n");
}
}
void generate_manual(int total_games) {
int numbers[6];
for (int g = 0; g < total_games; g++) {
int count = 0;
for (int j = 0; j < 6; j++) {
int num;
while (1) {
printf("Lotto %d번 수동 입력 >> ", j + 1);
scanf("%d", &num);
if (num < 1 || num > 45 || is_duplicate(numbers, count, num)) {
printf("1~45 사이의 중복 없는 숫자를 입력하세요.\n");
} else {
numbers[count++] = num;
break;
}
}
}
for (int j = 0; j < 6; j++) {
printf("%4d|", numbers[j]);
}
printf("\n");
}
}
int main() {
int games, mode;
srand((unsigned int)time(NULL));
printf("------- ♣LOTTO♧ -------\n");
printf("System : 몇 개를 구매하시겠습니까? (최대 5개)\n");
while (1) {
printf("입력>> ");
scanf("%d", &games);
if (games >= 1 && games <= MAX_GAME) {
printf("System : 요청하신 개수는 %d개 입니다.\n", games);
break;
} else {
printf("System : 최소 1개 ~ 최대 5개까지 입력해주세요.\n");
}
}
printf("System : 1.자동 2.반자동 3.수동\n");
while (1) {
printf("입력>> ");
scanf("%d", &mode);
if (mode >= 1 && mode <= 3) {
printf("System : %d번을 선택하셨습니다.\n", mode);
break;
} else {
printf("System : 1.자동 2.반자동 3.수동 중에 선택하세요.\n");
}
}
printf("\n");
print_title();
print_time();
switch (mode) {
case 1:
generate_auto(games);
break;
case 2:
generate_semi_auto(games);
break;
case 3:
generate_manual(games);
break;
}
return 0;
}
간단한 프로그램 함수로 구현하기 19
트리 만들기
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void void_star(int num);
void black_star(int num);
int main(void){
int num = 1;
while(1)
{
system("clear");
void_star(num);
black_star(num);
num++;
sleep(1);
}
return 0;
}
void void_star(int num){
if (num % 2 != 0){
printf(" ☆ \n");
for(int i=0;i<3;i++){
for(int j=0;j<8-i;j++){
printf(" ");
}
for(int j=0;j<1+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<7-i;j++){
printf(" ");
}
for(int j=0;j<3+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<6-i;j++)
{
printf(" ");
}
for(int j=0;j<5+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<7;j++){
printf(" ");
}
for(int j=0;j<3;j++){
printf("■■");
}
printf("\n");
}
}
}
void black_star(int num){
if (num % 2 == 0){
printf(" ★ \n");
for(int i=0;i<3;i++){
for(int j=0;j<8-i;j++){
printf(" ");
}
for(int j=0;j<1+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<7-i;j++){
printf(" ");
}
for(int j=0;j<3+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<6-i;j++)
{
printf(" ");
}
for(int j=0;j<5+2*i;j++){
printf("■■");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<7;j++){
printf(" ");
}
for(int j=0;j<3;j++){
printf("■■");
}
printf("\n");
}
}
}
간단한 프로그램 함수로 구현하기 20
풍차 돌리기
(입력 없이 그냥 모양만 비슷하게 해도 됨, 출력 정렬 사용 안됨)
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(){
void wind();
void rot_wind();
int num = 1;
while(1){
system("clear");
wind(num);
rot_wind(num);
num++;
usleep(180000);
}
return 0;
}
void wind(int num){
if(num%2 != 0){
printf("\n");
printf("\n");
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
printf(" ");
}
for(int j=0;j<i;j++){
printf(" ");
}
for(int j=0;j<5-i;j++){
printf(" * ");
}
for(int j=0;j<4-i;j++){
printf(" ");
}
for(int j=0;j<i+1;j++){
printf(" * ");
}
printf("\n");
}
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
printf(" ");
}
for(int j=0;j<5-i;j++){
printf(" * ");
}
for(int j=0;j<i;j++){
printf(" ");
}
for(int j=0;j<i+1;j++){
printf(" * ");
}
printf("\n");
}
printf("\n");
printf("\n");
}
}
void rot_wind(int num){
if(num%2 == 0){
for(int i=0;i<3;i++){
for(int j=0;j<8;j++){
printf(" ");
}
for(int j=0;j<i+1;j++){
printf(" * ");
}
printf("\n");
}
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
printf(" ");
}
for(int j=0;j<1+2*i;j++){
printf(" * ");
}
for(int j=0;j<3-i;j++){
printf(" ");
}
for(int j=0;j<4-i;j++){
printf(" * ");
}
printf("\n");
}
for(int i=0;i<4;i++){
for(int j=0;j<7-i;j++){
printf(" ");
}
for(int j=0;j<i+1;j++){
printf(" * ");
}
for(int j=0;j<i;j++){
printf(" ");
}
for(int j=0;j<7-2*i;j++){
printf(" * ");
}
printf("\n");
}
for(int i=0;i<3;i++){
for(int j=0;j<5+i;j++){
printf(" ");
}
for(int j=0;j<3-i;j++){
printf(" * ");
}
printf("\n");
}
}
}
'C > Assignment' 카테고리의 다른 글
| 06. 간단한 프로그램 만들기 1 (4) | 2025.08.05 |
|---|---|
| 05. 함수 (3) | 2025.08.05 |
| CS study 4 (0) | 2025.08.05 |
| CS study3 (1) | 2025.08.05 |
| 04. 배열 (0) | 2025.06.13 |