본문 바로가기
프로그래밍/C언어

7. c언어 배열 array, 상수

by 수삼이는코딩중 2023. 1. 31.
728x90
배열

배열

메모리 상에 같은 타입의 변수를 연속적으로 여러개를 한꺼번에 정의할 수 있는 방법
특정한 형(Type)의 변수들의 집합.

기본구조

배열의형 배열의이름 [원소갯수]={};
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

위의 배열은 int형의 10개의 원소를 가지는 배열이다. 즉 10개의 정수형 변수들을 보관할 수 있게된다.

#include <stdio.h>
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("Array 3번째 원소 : %d \n", arr[2]);
	return 0;
}
Array 3번째 원소 : 3


배열 안의 원소들을 먼저 정의하기.

int arr[3] = {1,2,3); //가능
arr = {4,5,6}; // 불가능


다만 배열의 길이 내에서 원소를 추가하거나 수정할 수는 있다.

arr[1] = 1

배열 인덱스 1번에 1이라는 변수를 저장한 것.


배열의 갯수를 생략할 수도 있다.

int arr[] = {1,2,3,4,5} // 크기가 5인 배열로 정의한다

인덱스번호는 파이썬과 동일하다. (0부터 시작한다)

단, c에서 배열은 미리 정의한 메모리 영역의 뒷 부분에는 다른 데이터가 있을 수 있다. 내가 정의 해 놓은 배열의 뒷부분을 잘못 참조하거나, 다른 값으로 덮어씌우면 버그가 될 가능성이 있다. 따라서 우리가 참조하는 원소의 위치가 배열의 크기보다 작은지 확인해야 한다.
또한 배열의 갯수는 상수로 지정해야 한다. 변수로 지정해서 입력값을 넣을 수 없다.

int arr[3] = {1};

이와 같이 정의 하면 컴파일러는 내부적으로 아래와 같이 생각한다.

int arr[3] = {1,0,0};

즉 초기화 하지 않은 원소들에는 0이 들어가게 된다.

int arr2[5]={1,2,3};

이것 역시 동일하게 컴파일 된다.

int arr2[5]={1,2,3,0,0};


배열의 활용

#include <stdio.h>
int main() {
	int arr[10] = { 13,54,56,88,88,76,54,87,47,36 };
	int i;
	for (i = 0; i < 10; i++) {
		printf("배열의 %d번째 원소 : %d \n", i + 1, arr[i]);
	}
	return 0;
}


결과는 다음과 같다.

배열의 1번째 원소 : 13
배열의 2번째 원소 : 54
배열의 3번째 원소 : 56
배열의 4번째 원소 : 88
배열의 5번째 원소 : 88
배열의 6번째 원소 : 76
배열의 7번째 원소 : 54
배열의 8번째 원소 : 87
배열의 9번째 원소 : 47
배열의 10번째 원소 : 36

배열에 저장된 원소를 하나하나 출력한 것이다.

평균구하기

#include <stdio.h>
int main() {
	int arr[5];
	int i, ave = 0;

	for (i = 0; i < 5; i++) {
		printf("%d 번째 학생의 성적은?", i + 1);
		scanf_s("%d", &arr[i]);
	}
	for (i = 0; i < 5; i++) {
		ave += arr[i];
	}

	printf("전체평균 : %d", ave / 5);
	return 0;
}

for문으로 배열에 차례차례 입력받은 변수들을 저장한다.
for문으로 점수 총 합과 평균을 구한다.

배열에 저장하면 더 많은 작업들을 할 수 있다.
평균을 이용해 합불 판정내리기.

	for (i = 0; i < 5; i++) {
		if (arr[i] >= ave/5) {
			printf("학생 %d : 합격\n", i + 1);
		}
		else {
			printf("학생 %d : 불합격\n", i + 1);
		}
		
	}


소수 찾기 프로그램
소수란? 1과 자신을 제외한 약수가 하나도 없는 수. 1은 소수가 아니다. 2는 짝수의 유일한 소수다.

#include <stdio.h>
int main() {
	
	int guess = 5; 
	int prime[1000];
	int index = 1;
	int i;
	int ok;
	prime[0] = 2;
	prime[1] = 3;
	for (;;) {
		ok = 0;
		for (i = 0; i <= index; i++) {
			if (guess % prime[i] != 0) {
				ok++;
			}
			else {
				break;
			}
		}
		if (ok == (index + 1)) {
			index++;
			prime[index] = guess;
			printf("소수 : %d \n", prime[index]);
			if (index == 999) {
				break;
				}
			}
		guess += 2;
		}
	return 0;
}

상수

처음 정의시 그 값이 바로 주어지고 영원히 바뀌지 않는다.

기본구조

const 상수자료형 상수이름 = 상수값;
const int a = 2;

상수는 그 값 자체를 바꿀 수 없다.

a+=3

이와 같은 연산은 안 된다는 뜻이다.

댓글