배열의 개념 및 활용
int score1, score2, score3, score3, score4 ...
와 같은 변수를 선언 시
연속되지 않은 주소에 메모리가 할당된다
4byte x n 개의 메모리가 할당
배열의 개념
연속한 주소에 동일한 자료형의 연속된 데이터를 동일한 이름으로 생성하는 것 인덱스(배열원소의 번호)로 데이터를 구분
배열의 선언과 초기화
int val[n];
- int: 자료형
- val: 배열 이름
- [n]: 지료의 개수
인덱스는 0부터 시작 잘못 사용시 심각한 에러가 발생할 수 있음 (오버플로우, 언더플로우)
1차원 배열의 선언과 초기화
int score[10];
4byte | 4byte | 4byte | 4byte | ... |
---|---|---|---|---|
score[0] | score[1] | score[2] | score[3] | ... |
- 총 10 개의 인엑스
- 4byte x 10개 = 40byte
int val[3] = {1, 2, 3};
int val[3] = {1,};
int val[3] = {0};
int val[] = {1, 2, 3};
순서 | val[0] | val[1] | val[2] |
---|---|---|---|
1 | 1 | 2 | 3 |
2 | 1 | 0 | 0 |
3 | 0 | 0 | 0 |
4 | 1 | 2 | 3 |
4번의 데이터는 가변으로 선언하여 데이터의 갯수 만큼 배열을 생성 가변 배열의 데이터는
sizeof()
함수를 사용하여 크기를 출력할 수 있다
2차원 배열의 선언과 초기화
int score[2][5];
행, 열
행/열 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
0 | score[0][0] | score[0][1] | score[0][2] | score[0][3] | score[0][4] |
1 | score[1][0] | score[1][1] | score[1][2] | score[1][3] | score[1][4] |
- 2개의 행과 5개의 열로 구성된 배열
- 총 2 x 5 = 10개의 요소
#include <stdio.h>
int main(void){
int i,st[5] = {1,2,3};
for (i = 0; i < 5; i++){
printf("st[%d]=%d \n",i,st[i]);
}
}
실행 결과:
st[0]=1
st[1]=2
st[2]=3
st[3]=0
st[4]=0
#include <stdio.h>
int main(void){
int score[] = {1,2,3};
int i, size;
size = sizeof(score)/sizeof(score[0]);
printf("size = %d \n", size);
for(i = 0; i < size; i++){
printf("score[%d] = %d \n",i,score[i]);
}
}
실행 결과:
size = 3
score[0] = 1
score[1] = 2
score[2] = 3
실습
학생 점수 입력 후, 평균 구하기
#include <stdio.h>
#define ROW 5
#define COL 3
int main(void){
int students[ROW][COL] = {0};
int i,j;
for(i = 0; i < ROW; i++){
for(j = 0; j < COL; j++){
printf("%d번 학생의 %d번 시험 점수를 입력하세요:",i+1,j+1);
scanf("%d", &students[i][j]);
}
}
printf("---입력 완료---\n");
for(i = 0; i < ROW; i++){
int sum = 0;
for(j = 0; j < COL; j++){
printf("%d번 학생의 %d번 과목의 점수 = %d\n",i+1,j+1,students[i][j]);
sum += students[i][j];
}
printf("%d번 학생의 평균 점수 = %d\n\n", i+1, sum / COL);
}
}
실행 결과:
1번 학생의 1번 시험 점수를 입력하세요:72
1번 학생의 2번 시험 점수를 입력하세요:88
1번 학생의 3번 시험 점수를 입력하세요:93
2번 학생의 1번 시험 점수를 입력하세요:59
2번 학생의 2번 시험 점수를 입력하세요:78
2번 학생의 3번 시험 점수를 입력하세요:92
3번 학생의 1번 시험 점수를 입력하세요:68
3번 학생의 2번 시험 점수를 입력하세요:87
3번 학생의 3번 시험 점수를 입력하세요:80
4번 학생의 1번 시험 점수를 입력하세요:96
4번 학생의 2번 시험 점수를 입력하세요:80
4번 학생의 3번 시험 점수를 입력하세요:100
5번 학생의 1번 시험 점수를 입력하세요:92
5번 학생의 2번 시험 점수를 입력하세요:83
5번 학생의 3번 시험 점수를 입력하세요:100
---입력 완료---
1번 학생의 1번 과목의 점수 = 72
1번 학생의 2번 과목의 점수 = 88
1번 학생의 3번 과목의 점수 = 93
1번 학생의 평균 점수 = 84
2번 학생의 1번 과목의 점수 = 59
2번 학생의 2번 과목의 점수 = 78
2번 학생의 3번 과목의 점수 = 92
2번 학생의 평균 점수 = 76
3번 학생의 1번 과목의 점수 = 68
3번 학생의 2번 과목의 점수 = 87
3번 학생의 3번 과목의 점수 = 80
3번 학생의 평균 점수 = 78
4번 학생의 1번 과목의 점수 = 96
4번 학생의 2번 과목의 점수 = 80
4번 학생의 3번 과목의 점수 = 100
4번 학생의 평균 점수 = 92
5번 학생의 1번 과목의 점수 = 92
5번 학생의 2번 과목의 점수 = 83
5번 학생의 3번 과목의 점수 = 100
5번 학생의 평균 점수 = 91
문자열 출력
#include <stdio.h>
int main(void){
char hi[10] = "hello";
int i;
for(i = 0; i < 10; i++){
printf("%c",hi[i]);
}
// puts(hi);
}
실행 결과: hello
"hello" 라는 문자열을 넣으면 내부에는