20211111_C++_공부기록
- 배열의 선언과 초기화
- 배열 요소 접근
- 배열 처리
- 함수로 배열 전달
- 배열 인수 보호
- 배열(Array) : 같은 유형의 값들을 연속된 메모리 공간에 저장하기 위함
- 배열 선언과 초기화
- 배열 선언
elementType arrayName[SIZE]; //요소유형 배열이름[크기]
// 배열을 선언할 때 배열의 크기는
//상수 const
const int SIZE = 10;
//상수가 아닌 변수로 선언한다면
//배열 크기의 변경가능성이 있음
//컴파일러 입장에서는 이미 공간을 마련했는데
//공간 크기를 변경하면 언짢음
//같은 요소 유형의 배열이라면
//한 번에 선언 가능
double list1[10], list2[25];
- 배열 초기화
//선언과 동시에 초기화 가능
double myList[4]= {1.9, 2.9, 3.4, 3.5};
double myList[4]; //선언 후
myList[0] = 1.9; //값 대입으로 초기화
myList[1] = 2.9;
myList[2] = 3.4;
myList[3] = 3.5;
//이런 식의 초기화는 불가능
double myList[4];
myList ={1.9, 2.9, 3.4, 3.5} //집합기호는 동시에 선언할 때만 가능
// 선언과 초기화를 동시에 할 때는 배열크기를 생략해도 된다.
double myList[]= {1.9, 2.9, 3.4, 3.5};
//배열의 일부분만 초기화 하는 것도 가능. 나머지 2개는 0으로 초기화
double myList[4]= {1.9, 2.9};
- 배열 요소 접근
- 배열 요소는 정수형의 인덱스를 통해 접근
- 배열 인덱스의 범위 : 0 ~ (배열크기 - 1)
- 범위 초과 오류(out-of-bounds) : 배열 크기 넘어가면 발생하는 오류
//인덱스를 사용하여 배열에 접근할 때 배열의 각 요소는 일반 변수와 거의 같다
//myList[0]과 myList[1]의 값을 myList[2]에 저장할 때
myList[2] = myList[0] + myList[1];
//1만큼 증가할 때
myList[0]++;
//큰 수를 반환할 때
cout << max(myList[1], myList[2]) << endl
//myList[0]에 0, myList[1]에 1..myList[9]에 9를 대입할 때
for (int i = 0; i < 10; i++)
myList[i] = i;
//myList 배열의 모든 요소를 출력할 때
for (int i = 0; i < 10; i++)
cout << myList[i] << endl;
- 배열처리
사용자에게 10개의 수를 입력 받아 평균보다 큰 요소의 수가 몇 개인지 구하기
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 10;
int list[SIZE];
int total = 0;
cout << "10개의 수를 입력하시오 : ";
for (int i = 0; i < SIZE; i++)
{
cin >> list[i];
total += list[i];
}
double average = total / SIZE;
//평균보다 큰 요소의 개수 구하기
int count = 0;
for (int i = 0; i < SIZE; i++)
{
if (list[i] < average)
count++;
}
cout << "average : " << average << endl;
cout << "count : " << count << endl;
return 0;
}
/*
10개의 수를 입력하시오 : 1 2 3 4 5 6 7 8 9 10
average : 5
count : 4
*/
- 함수로 배열 전달
- 배열도 함수에 인수로 전달할 수 있다. 인수로 전달된 배열은 배열의 시작주소(원본)이다.
- 함수를 배열로 전달할 때, 보통은 배열의 크기도 전달한다.
- 복사본을 전달한다면 메모리 낭비이다. 그래서 대신에 배열의 시작주소를 보관할 수 있는 변수를 넘겨준다. (포인터->주소저장),(배열의 이름을 넘겨받아서 바로 원본에 접근)
void addOne(int[], int);
void printArray(int list[], int arraySize); //함수원형
int main()
{
int numbers[5] = {1, 4, 3, 6, 8};
addOne(numbers, 5);
printArray( numbers, 5); //함수 호출 , 배열의 크기도 같이 전달
return 0;
}
void addOne(int list[], int arraySize)
{
for (int i = 0; i < arraySize; i++)
list[i]++;
}
void printArray(int list[], int arraySize)
{
for (int i = 0; i < arraySize; i++)
cout << list[i] << " ";
}
- 배열 인수 보호
- 함수에서 인수로 전달된 배열의 내용을 수정하고 싶지 않은 경우에는,
const 키워드를 붙여 컴파일러에게 이 배열은 변경될 수 없다는 것을 알릴 수 있다.
//오류 발생1
void p(const int list[], int arraySize) {
list[0] = 100; // 에러 발생
}
int main()
{
int numbers[5] = {1, 4, 3, 6, 8};
p(numbers, 5);
return 0;
}
//오류 발생2
//첫 함수에서 const선언했으면 그 다음 함수도 const선언해야 된다
void f2(int list[], int arraySize) {
…
}
void f1(const int list[], int arraySize) {
f2(list, size); //컴파일 오류발생
}
- 예제: 복권번호
- 각 복권 티켓에는 1부터 10까지 5개의 서로 다른 숫자가 적혀 있음
- 사용자는 구입한 티켓에 1부터 10까지의 모든 숫자들이 표시되어 있기를 원함
- 사용자로 부터 티켓의 숫자들을 입력 받아 모든 숫자가 표시되어 있는지를 검사하는 프로그램을 작성
#include <iostream>
using namespace std;
int main()
{
const int MAXSIZE = 10;
bool isCovered[MAXSIZE];
int number;
cout << " 티켓의 숫자들을 입력하시오 (0은 종료) : " << endl;
cin >> number;
while (number != 0)
{
isCovered[number - 1] = true;
cin >> number;
}
bool allCovered = true;
for (int i = 0; i < MAXSIZE; i++)
{
if (!isCovered)
{
allCovered = false;
break;
}
}
if (allCovered)
cout << "티켓의 모든 숫자가 커버되었음" << endl;
else
cout << "티켓의 모든 숫자가 커버되지 않았음" << endl;
return 0;
}
//함수로 배열 전달
#include <iostream>
using namespace std;
bool isAllCovered(bool list[], int arraySize)
{
bool allCovered = true;
for (int i = 0; i < arraySize; i++)
{
if (!list[i])
{
allCovered = false;
break;
}
}
return allCovered;
}
int main()
{
const int MAXSIZE = 10;
bool isCovered[MAXSIZE];
int number;
for (int i = 0; i < MAXSIZE; i++)
isCovered[i] = false;
cout << " 티켓의 숫자들을 입력하시오 (0은 종료) : " << endl;
cin >> number;
while (number != 0)
{
isCovered[number - 1] = true;
cin >> number;
}
bool allCovered = isAllCovered(isCovered, MAXSIZE);
if (allCovered)
cout << "티켓의 모든 숫자가 커버되었음" << endl;
else
cout << "티켓의 모든 숫자가 커버되지 않았음" << endl;
return 0;
}
/*
티켓의 숫자들을 입력하시오 (0은 종료) :
1 2 3 6 5
5 2 8 7 4
0
티켓의 모든 숫자가 커버되지 않았음
*/
'School Study > 2021-2' 카테고리의 다른 글
[week 13] C++ 복습_8장 다차원 배열 (0) | 2021.12.09 |
---|---|
[week 12] C++ 복습_7장 1차원 배열과 문자열 (2) (0) | 2021.12.06 |
[week 10] C++ 복습_6장 함수 (2) (0) | 2021.11.27 |
[week 09] C++ 복습_6장 함수 (1) (0) | 2021.11.26 |
[week 07] C++ 복습_5장 반복문 (2) (0) | 2021.11.26 |