1. 배열 함수

1) 배열은 임의 접근이 가능하다.

2) 배열은 선언과 동시에 초기화 및 선언 후 추후에 초기화가 모두 가능하다.

3) 배열은 통째로 복사 및 대입이 되지 않는다.

4) 배열의 각 원소는 변수와 동일하므로 cin과 cout을 통해 입출력이 가능하다.

 

배열을 활용해서 성적 관리 프로그램을 구현해보는 연습을 하려고 한다.

#include <iostream>
using namespace std;

int main(void)
{
	double score[5];		//학생 5명의 점수를 입력할 수 있는 공간 선언

//학생 점수 배열에 입력 cout, cin
	cout << "1 번째 학생 점수를 입력해주세요 : ";
	cin >> score[0];


	cout << "2 번째 학생 점수를 입력해주세요 : ";
	cin >> score[1];
	
	cout << "3 번째 학생 점수를 입력해주세요 : ";
	cin >> score[2];

	cout << "4 번째 학생 점수를 입력해주세요 : ";
	cin >> score[3];

	cout << "5 번째 학생 점수를 입력해주세요 : ";
	cin >> score[4];		

//학생들의 총점 및 평균 계산
	double Total = score[0] + score[1] + score[2] + score[3] + score[4];
	double Average = Total / 5;

//결과값 출력
	cout << "총점 : " << Total << endl;
	cout << "평균 : " << Average << endl;

	return 0;
}

 

하다보니까 반복되는게 너무 많아서 깔끔해보이지가 않다고 느꼈다. 그리고 연습할 때는 웬만하면 ctr v 안쓰고 싶었는데 자꾸 손이 갔다. 반복되는 것을 이름을 붙여 정의하고 가져다 쓰는 방식으로 구현하는 연습을 해보려 한다.

 

5) 함수의 구성요소와 호출

결국 이렇게 반복적으로 사용되는 코드나 논리적으로 하나로 묶이는 코드가 있는데 이런 코드를 이름을 붙여 정의하고 가져다 쓰는 방식으로 사용하는 것을 함수라고 한다.

 

인자 : 작업에 사용되는 외부 값

동작 : 어떤 작업을 수행할지 정의 (연산 etc)

반환 : 작업을 수행한 후 최종적으로 외부에 전달할 값. 만약 void로 하면 반환하지 않는 함수도 가능.

이름 : 작업을 호출할 수 있도록 이름이 필요.

 

함수에서 값을 전달하는 방식은 3가지가 있다.

첫번째, 값 전달 방식. C++에서 일반적인 변수(값 타입)는 값을 복사하여 함수로 전달된다.함수 내부에서 값을 변경해도 원본 변수의 값은 변경되지 않는다.

두번째, 주소값 전달 방식(변수값). 이 경우에는 해당 변수에 접근할 수 있게 되면서 함수가 종료된 이후에 해당 주소의 변수는 값이 수정되어 있다.

세번째, 주소값 전달 방식(배열). 마찬가지로 해당  배열에 접근할 수 있게 되면서 함수가 종료된 이후에 해당 배열의 값이 수정되어 있다. 참조자로 값을 전달하는 방식과 비슷하다.

 

(함수 사용 예시 연습. 직접 써보면서 연습하는 것이다.)

#include <iostream>
using namespace std;

//반지름을 입력받아 원의 넓이를 계산하는 함수 선언
double calculateCircleArea(double radius)
{
	return 3.14 * radius * radius;
}

//메인 함수
int main(void)
{
	double radius = 5.0;
	cout << "원의 넓이: " << calculateCircleArea(radius) << endl;
	
	return 0;
}

 

2. 조건문 함수

//단순 if문
//age 값을 입력받고 age가 18 이상일 경우 문자열 출력
#include <iostream>
using namespace std;

int main()
{
	int age;

	cout << "Enter your age: ";
	cin >> age;
	
	if (age >= 18)
	{
		cout << "You are eligible to vote." << endl;
	}
	//조건문이 true가 아닐 경우 아무것도 실행되지 않음
	cout << "Program Finished" << endl; 

	return 0;
}
//if else문

#include <iostream>
using namespace std;
int main()
{
	int number;
	
	cout << "Enter a number: ";
	cin >> number;

	if (number % 2 == 0)	//입력 값이 짝수인지 확인
	{
		cout << "The Number is even." << endl;
	}

	else
	{
		cout << "The Number is odd." << endl;
	}

	cout << "Program finished." << endl;

	return 0;
}

 

//if else-if else
#include <iostream>
using namespace std;

int main(void)
{
	char op;
	double num1, num2;

	cout << "Enter first number: ";
	cin >> num1;

	cout << "Enter an operator (+,-,*,/): ";
	cin >> op;
	
	cout << "Enter second number: ";
	cin >> num2;

//사칙연산 조건문

	if (op == '+')	//덧셈 조건문. 작은 따옴표 사용
	{
		cout << "Result: " << num1 + num2 << endl;
	}

	else if (op == '-') //뺄셈 조건문
	{
		cout << "Result: " << num1 - num2 << endl;
	}

	else if (op == '*') //곱셈 조건문
	{
		cout << "Result: " << num1 * num2 << endl;
	}

	else if(op == '/') //나눗셈 조건문
	{
		if (num2 == 0) //num2가 0일때는 나눗셈을 할 수 없음. 별도의 문자열 출력.
		{
			cout << "invalid num2." << endl;
		}
		else
		{
			cout << "Result: " << num1 / num2 << endl;
		}
	}

	else //잘못된 사칙연산자를 입력했을 때
	{
		cout << "invalid operator." << endl;
	}

	return 0;
}

 

복잡한 복합 조건을 작성할 때에는 논리 연산자 &&, || 를 사용한다. 연산자 앞뒤로 조건을 붙여서 and, or를 작성하는 식이다. 논리 연산자를 사용할 때 == 를 사용하는 것에 주의하자.

 

3. 반복문

자주 반복되는 함수를 어떻게 하면 간단하고 보기 좋게 작성할 수 있을까.

for, while문을 이용해서 작성하는 연습을 해보았다.

for문은 반복되는 범위가 명확한 경우에 사용하고,

while문은 특정 조건을 확인하며 반복하는 경우에 사용한다.

예를 들어 for문은 i가 1에서 5까지 1씩 반복적으로 늘어나는 경우이고,

while문은 입력한 값이 지정한 숫자에 맞는지 조건을 확인하는 경우이다.

//1부터 10까지의 합 계산
//1부터 10까지 숫자가 반복되니까 for문으로 작성

#include <iostream>
using namespace std;

int main(void)
{
	int sum = 0;	//int 자료형 sum 변수 선언 후 초기화

	for (int i = 1; i <= 10; i++)	//for (변수선언 후 초기화; 조건식; 증감식;)
	{
		sum += i;	//sum에 i를 더함. += 연산자를 사용해주면 i가 더해지면서 sum 값이 저장됨
	}
	
	cout << "Sum: " << sum << endl;

	return 0;
}
//1부터 20까지 3의 배수를 출력

#include <iostream>
using namespace std;

int main(void)
{
	for (int i = 1; i <= 20; i++)
	{
		if (i % 3 == 0)			//%. i를 3으로 나눈 결과(==) 0이면
			cout << i << " ";	//i를 출력
	}

	cout << endl;

	return 0;
}

 

좀 자주나오는 예시 같은데 오른쪽 정렬된 삼각별을 출력하는 연습을 했다.

//오른쪽 정렬된 삼각별 출력
//아이디어 : 오른쪽 정렬을 위해서 왼쪽에 공백을 먼저 출력하고 별을 출력한다
//n은 삼각형의 높이이고, i는 별의 갯수, j는 공백의 갯수
//n에서 i를 뺀 값이 공백의 갯수 j로 출력되어야 한다.
//예를 들어 첫번째 줄에서는 i=1일 때. 공백이 4개
#include <iostream>
using namespace std;

int main()
{
	int n = 5;						//n은 삼각형의 높이
	for (int i = 1; i <= n; i++)	//i <= n 꼴은 자주 쓰이게 되니 숙지
	{
		for (int j = 1; j <= (n - i); j++)	//공백의 갯수 조건식
		{
			cout << " "; //공백을 출력한다.
		}
	
		for (int j = 1; j <= i; j++)	//별의 갯수 조건식
		{
			cout << "*"; //별을 출력한다.
		}
		cout << endl;	//for문이 한차례 끝나면서 줄이 바뀐다
	}




}

 

이번엔 왼쪽 정렬된 삼각별을 출력해보겠다.

#include <iostream>
using namespace std;

int main()
{
	int n = 5;						
	for (int i = 1; i <= n; i++)	
	{
		for (int j = 1; j <= i; j++)	
		{
			cout << "*";
		}
	
		for (int j = 1; j <= (n - i); j++)	
		{
			cout << " "; 
		}
		cout << endl;	
	}




}

아직 머리가 잘 돌아가지는 않는데, 핵심은 for문의 사용 연습이니까 한번 해보았다.

위의 예시에서는 n이 1부터 5까지 가는 동안 j값은 어떻게 변화하는지 .endl;을 따라서 컴퓨터적 사고방식으로 생각해보니까 더 수월하게 진행할 수 있었다. 

 

3-1. 게임루프

반복문을 활용해서 게임에 들어갈 소스코드를 작성하는 연습을 해보았다. 나중에 C++을 활용한 게임을 텍스트 게임을 만들 때를 위해 연습한다는 느낌으로 따라 써 보았다.

#include <iostream>
#include <cstdlib>	//c 표준 유틸리티 함수들을 모아놓은 헤더파일. 난수 생성을 위해 사용
#include <ctime>	//time()함수 사용하기 위해 필요한 헤더
using namespace std;

int main(void)
{
	srand(time(0));	//랜덤시드를 초기화
	
	
	//int자료형 secretNumber 변수를 선언하고, 랜덤시드를 100으로 나눈 뒤 1을 더한 값을 대입함
	int secretNumber = rand() % 100 + 1;	//1부터 99까지의 수를 랜덤으로 뽑기 위한 기본 식
	int guess;

	cout << "1부터 100까지의 숫자를 입력하세요: ";
	cin >> guess;

	//while문을 활용해서 반복문 작성하기

	while (guess != secretNumber)	//secretNumber가 guess와 같을 때 까지 반복
	{
		if (guess < secretNumber)
		{
			cout << "더 큰 값입니다. 다시 입력하세요. ";
		}
		else {
			cout << "더 작은 값입니다. 다시 입력하세요. ";
		}
		cin >> guess;	//누락 유의. 새로운 추측을 입력받기 위함

	}
	cout << "맞추셨습니다!" << endl;	//반복문이 종료되면 문자열 출력
	
	return 0;
}

숫자 맞추기 게임이었는데 만약 숫자가 아니라 문자를 입력하면 "숫자를 입력하세요!" 라는 문자열을 띄우고 싶었는데 알맞은 함수를 알지 못해서 조건문을 작성하지 못했다. 다음에 배우면 추가해서 다시 써보려 한다.

 

 

 

+ Recent posts