2022. 3. 6. 18:51ㆍC
Array
배열이란 ?
자료형 변수[배열크기] = {0, };
변수의 집합이다.
다른 변수와 마찬가지로 배열도 선언된 후 사용하여야 한다.
* 배열의 크기에 대해 알아보는 법
sizeof(변수명)
int arr[5] = {0, };
int size = sizeof(arr);
printf("arr배열의 크기 : %d", size);
출력 결과
arr배열의 크기 : 20
왜 20일까?
배열의 크기 5, int형의 크기 4
4*5 = 20이다.
고로 실제 배열의 크기를 구하려면 각 변수의 크기를 나눠줘야 한다.
int arr[5] = {0, };
int arr_size = sizeof(arr);
int int_size = sizeof(int);
printf("arr배열의 크기 : %d", arr_size / int_size );
출력 결과
arr배열의 크기 : 5
*배열의 인덱스는 0번부터 시작한다 !!
int arr_a[5] = {1,2,3,4,5}; //살제 값 초기화
int arr_b[5] = { 0, }; //0으로 초기화
int arr_c[] = {1,2,3,4,5}; //배열의 크기가 자동으로 설정
배열의 초기화 방법들이다.
* 문자열의 배열
char str[] = "I Like C";
이 배열의 크기는 8이 아닌 9이다
0~7번 인덱스까지 I Like C이고 8번 인덱스는 ₩0 ( NULL ) 이다.
문자열이 끝났음을 알려주는 역할이다.
char str[100] = "I Like C";
이렇게 배열의 크기를 100으로 설정해도 8번 인덱스에 NULL이 들어갔기 때문에 배열은 8번 인덱스에서 끝이 난다.
이렇게 배열요소들에 초기 값이 주어져있는 경우 그들의 합을 쉽게 구할 수 있다
int test[10] = {28, 67, 45, 35, 55, 78,97,45,77,82};
int i, sum;
sum = 0;
for (int i = 0; i <= 9 ; i++) {
sum = sum + test[i];
}
printf("sum --- %d ", sum);
출력 결과
sum --- 609
배열 요소들에 문자가 주어진 후 출력하는 프로그램이다.
char ch[5] = {'K','o','r','e','a'};
for (int i = 0; i < 5; i++) {
printf("ch[%d] --- %c \n",i ,ch[i]);
}
출력 결과
ch[0] --- K
ch[1] --- o
ch[2] --- r
ch[3] --- e
ch[4] --- a
키보드로 10명의 성적을 입력 받아 합과 평균을 구하는 프로그램
int score[10], sum = 0, i;
float aver;
printf("Enter Scores : ");
for(int i=0; i<10 ; i++){
scanf("%d", &score[i]);
sum = sum + score[i];
}
aver = sum / 10.0;
printf("Sum -- %d\n Average -- %.2f",sum, aver);
출력 결과
Enter Scores : 100
50
60
70
80
90
50
40
30
20
Sum -- 590
Average -- 59.00
배열에서 다른 배열로 값들을 복사하는 프로그램이다.
int aa[5] = {23,15,26,77,89};
int bb[5];
printf("배열 aa : ");
for (int i = 0; i < 6 ; i++) {
printf("%d ",aa[i]);
}
for (int i = 0; i < 6; i++) {
bb[i] = aa[i];
}
printf("배열 bb : ");
for (int i = 0; i < 6; i++) {
printf("%d ", bb[i]);
}
출력 결과
배열 aa : 23 15 26 77 89 3 배열 bb : 23 15 26 77 89 3
*2차원 배열
좀 복잡하지만 천천히 하니까 할 수 있더라
2차원 배열 선언 방법은 자료형 변수명[행][열]이다
int data[2][3];
위 처럼 선언하면 된다.
data[0][0] | data[0][1] | data[0][2] |
data[1][0] | data[1][1] | data[1][2] |
이렇게 구성 되어 있다.
2차원 배열에 값을 대입한 후 출력하는 프로그램이다.
int data[2][3] = {1,2,3,4,5,6}, i, j;
for (int i = 0; i <= 1; i++) {
for (int j = 0; j <= 2; j++) {
printf("data[%d][%d]--%d", i, j, data[i][j]);
printf("\n");
}
}
출력 결과
data[0][0]--1
data[0][1]--2
data[0][2]--3
data[1][0]--4
data[1][1]--5
data[1][2]--6
5명의 국어, 수학, 영어 성적의 합과 평균을 구하는 프로그램
int score[5][3] = {
{87, 65, 98},
{78, 88, 90},
{77, 87, 73},
{98, 87, 79},
{88, 89, 78}
};
int i, j, sum;
float aver;
printf("Kore MATH Eng Sum Average \n");
printf("----------------------------------\n");
for (int i = 0; i <= 4; i++) {
sum = 0;
for (int j = 0; j <= 2; j++) {
printf("%d ", score[i][j]);
sum = sum + score[i][j];
}
aver = sum / 3.0;
printf("%d %.1f\n", sum, aver);
}
출력 결과
Kor MATH Eng Sum Average
----------------------------------
87 65 98 250 83.3
78 88 90 256 85.3
77 87 73 237 79.0
98 87 79 264 88.0
88 89 78 255 85.0
조금 더 응용해서 5명의 성적을 입력 받아서 합과 평균을 구하는 프로그램을 만들어 보자.
int score[5][3];
for (int i = 0; i <= 4; i++) {
for (int j = 0; j <= 2; j++) {
scanf("%d", &score[i][j]);
}
}
int i, j, sum;
float aver;
printf("Kor MATH Eng Sum Average \n");
printf("----------------------------------\n");
for (int i = 0; i <= 4; i++) {
sum = 0;
for (int j = 0; j <= 2; j++) {
printf("%d ", score[i][j]);
sum = sum + score[i][j];
}
aver = sum / 3.0;
printf("%d %.1f\n", sum, aver);
}
출력 결과
Kor MATH Eng Sum Average
----------------------------------
88 87 86 261 87.0
55 55 33 143 47.7
44 25 15 84 28.0
16 26 2 44 14.7
7 88 75 170 56.7
점수는 귀찮아서 막 쳤다.
**** 중요한거
char array[10];을 선언했을때
array[0]~array[9] 각 인덱스별로 메모리를 할당받아 주소값이 존재한다
10001~10010이 각각 주소값이라고 가정하고,
포인터와 같다고 볼 수 있다.
첫번째 배열 인덱스의 주소값이 array자체가 되는 것이다.
array[1] = 7 일경우
&array[1] = 10002 이다.
내가 배열 인덱스 지정 해줬을때는 &주소값을 표시할 필요 없다
왜냐하면 배열 0번인덱스와 배열의 주소 값은 같기 때문이다.
하지만 배열만 선언했을 경우에는 &주소를 붙여줘야한다고 한다.
'C' 카테고리의 다른 글
C - 전처리기 (0) | 2022.03.07 |
---|---|
C - getchar() 함수와 gets()함수 (0) | 2022.03.07 |
C - 포인터 (0) | 2022.03.06 |
C - 반복문 예제 (0) | 2022.02.25 |
C - 반복문 (0) | 2022.02.20 |