[C] 5. array (배열)

Kim Dongil·2022년 10월 10일
0

C

목록 보기
7/28

배열

배열을 사용하면 한 번에 여러개의 변수를 생성가능

잘못된 배열
인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생시킨다.
c어서는 프로그래머가 인덱스가 범위를 벗어나지 않았는지 확인하고 책임을 져야한다.

배열과 함수
함수의 매개변수로 배열의 경우에는 사본이 아닌 원본이 전달됨

배열의 값을 서로 교환할 때

// 배열
	
int subway_1 = 30; //지하철 1호차에 30명이 타고 있다.
int subway_2 = 40;
int subway_3 = 50;

printf("지하철 1호차에 %d 명이 타고 있습니다\n", subway_1);
printf("지하철 1호차에 %d 명이 타고 있습니다\n", subway_2);
printf("지하철 1호차에 %d 명이 타고 있습니다\n", subway_3);

여러 개의 변수를 함께, 동시에 생성

int subway_array[3];  // [0] [1] [2] 

subway_array[0] = 30;
subway_array[1] = 40;
subway_array[2] = 50;

for (int i = 0; i < 3; i++)
{
	printf("지하철 %호차에 %d 명이 타고 있습니다\n", i + 1, subway_array[i]);
}

값 설정

// 값 설정 방법

int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 10; i++)
{
	printf("%d\n", arr[i]);
}

// 초기화를 하지 않으면 더미(쓰레기)값
// 값은 초기화를 반드시 해야 함

int arr[10]; 
for (int i = 0; i < 10; i++)
{
	printf("%d\n", arr[i]);
}

// 배열 크기는 항상 산수로 선언

int size = 10;
int arr[10];

int arr[10] = { 1, 2 }; // 3번째 값부터는 자동으로 '0'으로 초기화 됨
for (int i = 0; i < 10; i++)
{
	printf("%d\n", arr[i]);
}
	
int arr[] = { 1, 2 }; // arr[2]
	
float arr_f[5] = { 1.0f, 2.0f, 3.0f };
for (int i = 0; i < 5; i++)
{
	printf("%.2f\n", arr_f[i]);
}

문자 VS 문자열

아스키코드 : 미국 정보교환 표준부호 (영어: American Standard Code for Information Interchange),

줄여서 ASCII( /ˈæski/, 아스키)는

영문 알파벳을 사용하는 대표적인 문자 인코딩이다.

char c = 'A';
printf("%c\n", c);

문자열 끝에는 '끝'을 의미하는 NULL 문자 '\0' 이 포함되어야 함

char str[6] = "coding"; // [c][o][d][i][n][g][\0]

char str[7] = "coding";
printf("%s\n", str);

char str[] = "coding";
printf("%s\n", str);
printf("%d\n", sizeof(str));*/

for (int i = 0; i < sizeof(str); i++)
{
	printf("%c\n", str[i]);
}

char kor[] = "나도코딩"; // 8 byte + 1 byte (문자 끝)  
printf("%s\n", kor);
printf("%d\n", sizeof(kor));
// 영어 1글자 : 1 byte
// 한글 1글자 : 2 byte
// char 크기 : 1 byte

char c_array[7] = { 'c', 'o', 'd', 'i', 'n', 'g', '\0' };
char c_array[6] = { 'c', 'o', 'd', 'i', 'n', 'g', };
printf("%s\n", c_array);*/

char c_array[10] = { 'c', 'o', 'd', 'i', 'n', 'g', };
printf("%s\n", c_array);
for (int i = 0; i < sizeof(c_array); i++)
{
	printf("%c\n", c_array[i]);
}

for (int i = 0; i < sizeof(c_array); i++)
{
	printf("%d\n", c_array[i]); // ascll 코드 값 출력 (null 문자 0 으로 입력
}
	
// 문자열 입력받기 : 경찰서 조서 쓰기 예제
char name[256];
printf("이름이 뭐에요? ");
scanf_s("%s", name, sizeof(name));
printf("%s\n", name);

// 참고 : ASC|| 코드? ANSI (미국표준협회) 에서 제시한 표준 코드 체계
// 7bit, 총 128 개 코드 (0~127)
// a : 97 (문자 a 의 아스키 코드 정수값)
// A : 65
// 0 : 48

printf("%c\n", 'a');
printf("%d\n", 'a');

printf("%c\n", 'b');
printf("%d\n", 'b');

printf("%c\n", 'A');
printf("%d\n", 'A');

printf("%c\n", '\0');
printf("%d\n", '\0');

printf("%c\n", '0');
printf("%d\n", '0');

printf("%c\n", '1');
printf("%d\n", '1');

// 참고2 : 0~127 사이의 아스키코드 정수값에 해당하는 문자 확인
for (int i = 0; i < 128; i++)
{
	printf("아스키코드 정수 %d : %c\n", i, i);
}

Project 아빠는 대머리

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

int main(void)
{
	srand(time(NULL));
	printf("\n\n === 아빠는 대머리 게임 === \n\n");
	int answer; // 사용자 입력 값
	int treatment = rand() % 4; // 발모제 선택 (0~3)

	int cntShowBottle = 0; // 이번 게임에 보여줄 병 갯수
	int prevCntShowBottle = 0; // 앞 게임에 보여준 병 갯수
	// 서로 보여주는 병 갯수를 다르게 하여 정답률 향상 (처음에 2개 > 다음엔 3개 ...)

	// 3번의 기회 (3번의 발모제 투여 시도)
	for (int i = 1; i <= 3; i++)
	{
		int bottle[4] = { 0, 0, 0, 0, }; // 4개의 병
		do {
			cntShowBottle = rand() % 2 + 2; // 보여줄 병 갯수 (0!1, +2 > 2~3)
		} while (cntShowBottle == prevCntShowBottle);
		prevCntShowBottle = cntShowBottle;

		int isincluded = 0; // 보여줄 병 중에 발모제가 포함되었는지 여부 (1 : 포함)
		printf(" > %d 번째 시도 : ", i);

		// 보여줄 병 종류를 선택
		for (int j = 0; j < cntShowBottle; j++)
		{
			int randBottle = rand() % 4; // 0-3

			// 아직 선택되지 않은 병이면, 선택 처리
			if (bottle[randBottle] == 0)
			{
				bottle[randBottle] = 1;
				if (randBottle == treatment)
				{
					isincluded = 1;
				}
			}
			// 이미 선택된 병이면, 중복이므로 다시 선택
			else
			{
				j--;
			}
		}

		// 사용자에게 문제 표시
		for (int k = 0; k < 4; k++)
		{
			if (bottle[k] == 1)
				printf("%d ", k + 1);
		}
		printf(" 물약을 머리에 바릅니다\n\n");

		if (isincluded == 1)
		{
			printf(" >> 성공 ! 머리가 났어요 !! \n");
		}
		else
		{
			printf(" >> 실패 ! 머리가 나지 않았어요.. \n");
		}

		printf("\n . . . 계속 하려면 아무키나 누르세요 ...");
		getchar();
	}

	printf("\n\n발모제는 몇 번 일까요? ");
	scanf_s("%d", &answer);

	if (answer == treatment + 1)
	{
		printf("\n >> 정답입니다!\n");
	}
	else
	{
		printf("\n >> 땡 ! 틀렸어요. 정답은 %d 입니다\n", treatment + 1);
	}

	return 0;
}

C 언어 무료 강의 (입문부터 게임 개발까지)
C언어 프로그래밍// 배열, 포인터
아스키 코드표(ASCII Table)

0개의 댓글