코딩 공부/C++

C++ HW 및 Chapter 6 Check Point 정리

recordmastd 2022. 12. 13. 08:03

10회차: 8.1. 3x4행렬 입력 후 열의 합 구하기

#include <iostream>
using namespace std;

const int SIZE = 4;
double sumColumn(const double m[][SIZE], int rowSize, int columnIndex); // prototype

int main()
{
	double matrix[3][SIZE];

	cout << "Enter a 3-by-4 matrix row by row: " << endl;

	for (int i = 0; i < 3; i++)    // i - row 
		for (int j = 0; j < SIZE; j++) // j - col
			cin >> matrix[i][j];  // 배열 입력

// 열의 합 출력
	for (int j = 0; j < SIZE; j++)
		cout << "Sum of the elements at column " << j << " is " << sumColumn(matrix, 3, j) << endl;

	return 0;
}

double sumColumn(const double m[][SIZE], int rowSize, int columnIndex)
{
	double total = 0;

	for (int i = 0; i < rowSize; i++)
		total += m[i][columnIndex]; // col의 값 더하기

	return total; // col 값을 더한 totaㅣ 반환
}

 

6.6 다음 코드에서 에러가 발생하는 이유

void p(double x, double y)
{
	cout << x << " " << y << endl;
	return x + y;
}

: void 함수는 return 값을 반환하지 않음

6.12 오버로딩

-  두 함수명이 같을 때, 같은 프로그램으로 정의된다. 이 때 함수가 오버로딩되엇ㅅ다고 한다.

-  함수명이 동일한 건 상관 X, 하지만 파라미터 타입이 달라야 한다.

 

6.16 인라인 함수

- 함수 호출을 피하기 위하여 인라인 함수를 제공한다.

- 인라인 함수는 호출X, 컴파일러에 의해 인라인 함수를 호출하는 지점에 함수 코드를 복사하는 방식이다.

 

6.19 전역함수와 지역함수 (global variable & local variable)

- 지역함수는 기본값 X, 초기화 필요

-전역함수는 기본값 0 설정 

#include <iostream>  // 에러 발생
using namespace std;

int j;

int main()
{
	int i;
    cout << i << endl;
	cout << j << endl;
}

- i가 정의되지 않았기 때문에 오류 발생

#include <iostream> / j만 출력 , 정상 실행 
using namespace std;

int j;

int main()
{
	int i;
	cout << j << endl;
}
// j값 0 출력

 6.20 static 지역 변수

- static 지역 변수는 지역 변수에 저장된 값을 프로그램이 끝날 때까지 유지한다

(일반적인 지역 변수는 함수 실행완료 시 소멸)

int j = 40; // 전역 변수 j = 40

void p()
{
	int i = 5; // 지역 변수 i = 5
	static int j = 5; // 정적 지역 변수 j =5
	i++; // i = 6, i 소멸 후 다시 6
	j++; // j = 6, j는 6에서 유지 후 7

	cout << i << endl; 
	cout << j << endl;
}

int main()
{
	p();  // i = 6, j =6
	p(); // i = 6, j =7
}

6.21 함수에서의 변수 정의

void p(int i)  // 에러 발생
{
	int i = 5;

	cout << i << endl;
}

- 함수에서 변수의 파라미티ㅓ를 정의하면 안됨

 

값에 의한 전달(pass-by-value)

- 매개변수가 있는 함수 호출 시 인수의 값이 매개변수로 전달 > pass by value

- 함수 내부에서의 매개변수 값의 변경은 호출한 곳의 변수에 전혀 영향을 미치지 않음

 

참조 변수(Reference variable), 원래 변수에 대한 별명/별칭

- 원 변수를 참조하기 위해 참조 변수를 함수의 매개변수로 사용

- 참조 변수를 통해 변수에 저장된 원래 데이터에 접근하거나 수정 가능

-  변수의 앞/ 변수의 데이터 유형 뒤에 & 붙임 (ex. int &i / int& i / int & r)

 

① 참조 변수는 선언과 동시에 초기화하여야 한다.

② null 값을 저장할 수 있는 포인터와 다르게 null을 참조할 수 없다.

③ 참조하려는 변수와의 데이터 타입을 일치시켜야 한다. 또한 const로 선언된 변수는 const로 non-const는 non-const로만 참조할 수 있다.

④ 한번 참조한 변수는 재참조 불가능하다.

 

8회차: 세 수 정렬

// 참조변수 사용안할시 swapㅇㅣ 안됨
#include <iostream>
using namespace std;

void sortNum(double& num1, double& num2, double& num3);

int main()
{
	double n1, n2, n3;
	cout << "Enter three nums: ";
	cin >> n1 >> n2 >> n3;

	sortNum(n1, n2, n3);

	cout << "After sorting three nums: " << endl;
	cout << n1 << " " << n2 <<  " " << n3 << endl;

	return 0;
}

void sortNum(double& num1, double& num2, double& num3)
{
	if (num1 > num2)
	{
		double temp = num1;
		num1 = num2;
		num2 = temp;
	}

	if (num2 > num3)
	{
		double temp = num2;
		num2 = num3;
		num3 = temp;
	}

	if (num1 > num2)
	{
		double temp = num1;
		num1 = num2;
		num2 = temp;
	}
}

 

6.22 pass-by-value 와 pass-by-reference

#include <iostream>   // 0
using namespace std;

void maxValue(int value1, int value2, int max)
{
	if (value1 > value2)
		max = value1;
	else
		max = value2;
}

int main()
{
	int max = 0;
	maxValue(1, 2, max);
	cout << max << endl;

	return 0;
}
#include <iostream> // 오류
using namespace std;

void maxValue(int value1, int value2, int& max)
{
	if (value1 > value2)
		max = value1;
	else
		max = value2;
}

int main()
{
	int max = 0;
	maxValue(1, 2, max);
	cout << max << endl;

	return 0;
}
#include <iostream>
using namespace std;

void f(int i, int num)
{
	for (int j = 1; j <= i; j++)
	{
		cout << num << " ";
		num *= 2;
	}

	cout << endl;
}

int main()
{
	int i = 1;
	while (i <= 6)
	{
		f(i, 2);
		i++;
	}

	return 0;
}

// 2
2 4
2 4 8
2 4 8 16
2 4 8 16 32
2 4 8 16 32 64
#include <iostream> // 위와 동일
using namespace std;

void f(int& i, int num)
{
	for (int j = 1; j <= i; j++)
	{
		cout << num << " ";
		num *= 2;
	}

	cout << endl;
}

int main()
{
	int i = 1;
	while (i <= 6)
	{
		f(i, 2);
		i++;
	}

	return 0;
}

// 2
2 4
2 4 8
2 4 8 16
2 4 8 16 32
2 4 8 16 32 64