본문 바로가기

C언어/예습

[C언어 예습]DAY17_동적 배열 실생활 예제(막대그래프), 알고리즘 예제(Baseball Game)

그래프의 원리 ★로 알아보기.


 

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


void main() {
	//학생 수 만큼 점수를 입력받아 출력하기
	//1. 학생 수 입력받기
	//2. 학생 수 만큼 점수 입력받기

	int cnt = 0;
	int* arScore = 0;
	printf("학생 수를 입력하세요.\n");
	scanf_s("%d", &cnt);

	arScore = (int*)malloc(sizeof(int)*cnt);
	for (int i = 0; i < cnt; i++) {
		printf("%d번 학생 점수 입력 :", i + 1);
		scanf_s("%d", arScore + i);
	}

	for (int i = 0; i < cnt; i++) {
		printf("%d번 학생 점수 : %d점\n", i + 1, arScore[i]);
	}

	system("cls");

	for (int i = 10; i > 0; i--) {
		printf("%3d │", i * 10);
		for (int j = 0; j < cnt; j++) {
			if (arScore[j] / 10 >= i) {
				printf("  ★");
			}
			else {
				printf("    ");
			}
		}
		printf("\n");
	}
	printf("%3d └────", 0);
	for (int i = 0; i < cnt; i++) {
		printf("────");
	}
	printf("\n");
	printf("      ");
	for (int i = 0; i < cnt; i++) {
		printf(" %d ", arScore[i]);
	}
	printf("\n");
	printf("\n");
	free(arScore);
}

 


막대그래프

 


 

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


void main() {
	//학생 수 만큼 점수를 입력받아 출력하기
	//1. 학생 수 입력받기
	//2. 학생 수 만큼 점수 입력받기

	int cnt = 0;
	int* arScore = 0;
	printf("학생 수를 입력하세요.\n");
	scanf_s("%d", &cnt);

	arScore = (int*)malloc(sizeof(int)*cnt);
	for (int i = 0; i < cnt; i++ ) {
		printf("%d번 학생 점수 입력 :", i + 1);
		scanf_s("%d", arScore + i);
	}

	for (int i = 0; i < cnt; i++) {
		printf("%d번 학생 점수 : %d점\n", i + 1, arScore[i]);
	}

	system("cls");

	for (int i = 10; i > 0; i--) {
		printf("%3d │", i * 10);
		for (int j = 0; j < cnt; j++) {
			if (arScore[j] / 10 == i) {
				printf("  ┌┐");
			}
			else if (arScore[j] /10 >= i) {
				printf("  ││");
			}
			else {
				printf("    ");
				//Sleep(100);
			}
		}
		printf("\n");
	}
	printf("%3d └─", 0);
	for (int i = 0; i < cnt; i++) {
		if (arScore[i] != 0) {
			printf("─┴┴─");
		}
		else {
			printf("────");
		}
	}
	//Sleep(100);
	printf("\n");
	printf("      ");
	for (int i = 0; i < cnt; i++) {
		printf(" %d ", arScore[i]);
	}
	printf("\n");
	printf("\n");
	free(arScore);
}

 


 

Baseball Game

 


 

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

void main() {

	//기존 배열을 섞은 후
	//레벨별로 자릿수를 선정한다.

	//섞는 법
	//0번째 방을 고정시키고
	//?번째 방과 위치를 바꾼다.

	int baseball[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int cnt = 0, s = 0, b = 0;
	int r = 0, temp =0, level=0;
	int choice = 0, rest = 0;

	srand(time(NULL));

	for (int i = 0; i < 10000; i++) {
		r = rand()% 9 +1;
		temp = baseball[0];
		baseball[0] = baseball[r];
		baseball[r] = temp;
	}
	printf("●Baseball Game●\n");
	while (1) {
		printf("레벨을 입력하세요(1레벨: 3자리수, 최대 8레벨)\n");
		scanf_s("%d", &level);
		if (level > 0 && level < 9) { 
			break; 
		}
		else {
			printf("1~8까지의 수만 입력 가능합니다.\n");
		}
	}

	//printf("cpu :");
	//for (int i = 0; i < level + 2; i++) {
	//	printf("%d", baseball[i]);
	//}
	printf("\n");

	while (1) {
		s = 0;
		b = 0;
		printf("user: ");
		scanf_s("%d", &choice);
		cnt++;
		for (int i = level + 1 ; i >= 0; i--) {
			rest = choice % 10;
			if (baseball[i] == rest) {
				s++;
			}
			for (int j = level +1; j >= 0; j--) {
				if (baseball[j] == rest) {
					b++;
				}
			}
			choice /= 10;
		}
		if (s == level + 2) {
			break;
		}
		printf("%d strike %d ball\n", s, b - s);
	}
	printf("%d번만에 성공!\n", cnt);
}

To Do List

?) srand

  A) stdlib안에 있는 함수
 : 랜덤의 기준점을 정하는 것.


time(NULL)

: 흐른시간을 반환해주는데
NULL은 현재가 기준이 됨.

 

* C언어에서는 NULL (대문자로 사용)