오늘도 배열에 대해 공부하였다.
배열에서 중요한 점
- 배열의 인덱스 고유 ID
- 배열은 인덱스의 고유 ID를 사용하여 관리하는 방식으로 설계된다. 고유 ID와 데이터는 쌍으로 이루어져 있으며, 고유 ID를 통해 데이터를 호출할 수 있다.
- 그러나 데이터를 통해 고유 ID를 역으로 찾는 것은 불가능하며, 처음부터 순차적으로 데이터를 탐색해야 한다.
- 즉, 배열에서 가장 중요한 것은 인덱스지만, 데이터를 보고 인덱스를 직접적으로 찾을 수는 없다.
- 배열을 사용할 때 주의할 점
- 배열 사이즈를 직접 얻어오지 말라.
- 이유는 안전성 문제이다. 일반적으로 sizeof를 사용하여 배열의 크기를 구하지만, 이 방법은 포인터를 사용할 때 잘못된 값을 반환할 수 있어 권장되지 않습니다.
- 대신 sizeof를 사용할 때 자료형을 직접 명시하는 습관을 들이는 것이 좋습니다 (변수명을 넣지 않도록 주의).
- 배열을 사용하는 방법
- 인덱스로 접근하는 방법: 고유 ID를 부여하고 해당 ID를 통해 데이터를 관리하는 방식.
- ArrayList 사용: 배열의 크기(공간)를 넉넉히 설정한 후, 앞에서부터 데이터를 쌓아가는 방식. ArrayList는 중간에 데이터를 삭제할 경우 뒤의 데이터가 왼쪽으로 시프트 될 수 있어, 데이터 관리에 주의가 필요하고, 데이터를 얼마나 쌓았는지 확인하기 위해 이중으로 데이터를 관리해야 한다.
- 배열 사이즈를 직접 얻어오지 말라.
문제 풀이
문제 1. 배열의 총점과 평균을 구하는 프로그램 (평균은 소수점 포함)
#include <iostream>
int main()
{
const int nSize = 5;
int arData[nSize]{ 34,55,12,1,31 };
int nTotal{};
float fAverage{};
for (int i = 0; i < nSize; i++)
{
nTotal += arData[i];
}
fAverage = (float)nTotal / (float)nSize;
printf("%d\n", nTotal);
printf("%f\n", fAverage);
}
- cosnt ( 상수 : 변하지 않는 값) 키워드를 사용하여 nSzie를 5로 고정시킴.
- arData라는 배열을 생성하고 nSize의 값을 배열의 크기로 지정 후, 초기 값 설정
- 정수형 변수인 nTotal, 실수형 변수인 fAverage를 선언.
- for문을 이용하여 nSize보다 작을 때까지 반복하여 nTotal에 arData의 모든 값을 더하여 저장.
- 캐스팅을 사용하여 정수형을 실수형으로 변환시킨 후 fAverage에 그 값을 저장함
- printf를 사용하여 nTotal(총점), fAverage(평균)을 출력
문제 2. 배열에 있는 데이터 중 짝수의 개수를 구하는 프로그램
#include <iostream>
int main()
{
const int nSize = 10;
int arData[nSize]{ 34,55,12,1,31,2,42,11,2124,124 };
int nEvenConut{};
int nRemainder{};
for (int i = 0; i < nSize; i++)
{
nRemainder = arData[i] % 2;
if (nRemainder == 0)
nEvenConut++;
}
printf("%d", nEvenConut);
}
- cosnt ( 상수 : 변하지 않는 값) 키워드를 사용하여 nSzie를 10으로 고정시킴
- arData라는 배열을 만들어서 nSize의 값을 배열의 크기로 지정한 후, 초기 값을 설정
- 정수형 변수인 nEvenCount, nRemainder를 선언
- for문을 이용하여 nSize보다 작을 때까지 반복하여 arData [i] % 2 한 값을 nRemainder에 저장 (짝수 판별)
- nRemainder가 0이라면 nEvenCount를 1 증가시킴
- printf를 사용하여 nEvenCount(짝수의 개수)를 출력시킴
팁
- 배열의 크기를 표현하는 변수명은 보통 length나 size를 사용합니다.
'C++' 카테고리의 다른 글
| [강의] 9월 11일 수업정리 (0) | 2024.09.11 |
|---|---|
| [강의] 9월 6일 수업정리 (0) | 2024.09.07 |
| [강의] 9월 4일 수업정리 (0) | 2024.09.05 |
| [강의] 9월 3일 수업정리 (1) | 2024.09.04 |
| [강의] 8월 30일 수업정리 (0) | 2024.08.30 |