
배열
메모리 상에 같은 타입의 변수를 연속적으로 여러개를 한꺼번에 정의할 수 있는 방법
특정한 형(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
이와 같은 연산은 안 된다는 뜻이다.
'프로그래밍 > C언어' 카테고리의 다른 글
8-2. c언어 포인터의 덧셈과 뺄셈 (0) | 2023.02.16 |
---|---|
8-1. c언어 포인터와 상수 (0) | 2023.01.31 |
6. c언어 반복문 for, while (0) | 2023.01.31 |
5. c언어 if 문 if, if else, else (1) | 2023.01.21 |
4. c언어 scanf 문자 입력 받기, 형변환 (0) | 2023.01.21 |
댓글