Studies/C++

04 c++ 배열

쿠뱃봉 2022. 1. 8. 16:41

1.배열의 개념

(1)코드

#include<iostream>
using namespace std;

int main() {
	const int SIZE = 5;
	int arr[SIZE] = { 10,20,30,40,50 };
	cout << arr << endl;
	cout << arr[0] << endl;
	cout << &arr[0] << endl;
	cout << sizeof(arr) << endl;
	cout << sizeof(arr[0]) << endl;
	for (int x : arr) {
		cout << x << endl;
	}
	cout << sizeof(arr) / sizeof(arr[0]) << endl;
	return 0;
}

 

(2)실행결과

 

(3)배열 개념

 

배열의 주소는 상수다. 변경할 수 없다.
배열 이름의 주소는 배열의 첫번째 방의 주소이다.
배열의 이름은 포인터 상수다.


int* pnum;
포인터변수의 size는 4byte

int num[5];

num => #100 [1,2,3,4,5]
num은 100번지(주소)라는 상수

int* pnum=num;
num+0==&num[0]
num+1==&num[1]
*(num+1)==num[1]
*(pnum+1)==pnum[1]


2.학생 성적 평균 구하기

(1)코드

#include<iostream>
using namespace std;

int main() {
	const int SIZE = 5;
	int arr[SIZE];
	int sum = 0;
	for (int i = 0; i < SIZE; i++) {
		cout << "학생 정보 입력 : ";
		cin >> arr[i];
		sum += arr[i];
	}
	cout << sum / SIZE << endl;
	return 0;
}

(2)실행결과

 

3.0~9 난수발생 1000번/ 난수 몇개씩 발생했는지

(1)코드

#include<iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	const int SIZE = 10;
	srand((unsigned)time(NULL));
	int arr[SIZE] = {0,};
	
	//for (int i = 0; i < 10;i++) {
	//	arr[i] = 0;
	//}
	for (int i = 0; i < 1000; i++) {
		
		int num = rand() % 10;
		arr[num] += 1;
	}
	for (int i = 0; i < 10;i++) {
		cout << i << "\t" << arr[i] << endl;
	}
}

 

(2)실행결과

 

4. 5명 성적 히스토그램

(1)코드

#include<iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	const int SIZE = 5;
	int count[SIZE] = { 10,5,8,6,2 };
	for (int i = 0; i < SIZE; i++) {
		cout << "학생 " << i + 1 << " : ";
		for (int j = 0; j < count[i]; j++) {
			cout << "*";
		}
		cout << endl;
	}

	return 0;

}

 

(2)실행결과

 

5. 도형 세 개 10*10 배열에 하나씩 랜덤으로 넣기

(1)코드

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
int main() {
	const int ROW = 10;
	const int COL = 10;
	int arr[ROW][COL] = { 0, };
	string item[4] = { "□","★","※","●" };
	srand((unsigned)time(NULL));
	
	for (int i = 1; i <= 3; i++) {
		int randRow = rand() % 10;
		int randCol = rand() % 10;
		if (arr[randRow][randCol] ==0)
			arr[randRow][randCol] = i;
		else
			i--;
	}
	for (int i = 0; i < ROW; i++) {
		for (int j = 0; j < COL; j++) {
			switch (arr[i][j]) {
			case 0:
				cout << item[0]; break;
			case 1:
				cout << item[1]; break;
			case 2:
				cout << item[2]; break;
			case 3:
				cout << item[3]; break;
			}

		}
		cout << endl;
	}

}

 

(2)실행결과

 

6. 4*6 좌석 예약 

A행 1열부터 시작해서 F행 6열로 끝나고 

A1 처럼 입력을 받음

(1)코드

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
int main() {
	const int ROW = 6;
	const int COL = 4;
	int arr[ROW][COL] = { 0, };
	string item[2] = { "□","●" };
	
	while (true) {
		//system("cls");
		//좌석 현황 출력
		for (int i = 0; i < ROW; i++) {
			cout << char(i + 'A') << " : ";
			for (int j = 0; j < COL; j++) {
				switch (arr[i][j]) {
					case 0:
						cout << item[0]; break;

					case 1:
						cout << item[1]; break;

				}
			}
			cout << endl;

		}

		//좌석 입력
		char x, y;
		cin >> x >> y;
		if (arr[int(x - 'A')][int(y - '1')] == 0) {
			arr[int(x - 'A')][int(y - '1')] = 1;
			cout << "예약 완료" << endl;
		}
		else {
			cout << "이미 예약된 좌석입니다." << endl;
		}
		//system("pause");
	}
	return 0;
}

(2)실행결과