1. 문제

 

3. 함수 big()을 호출하는 경우는 다음과 같다.

 

(2). 디폴트 매개 변수를 가진 하나의 함수로 big()을 작성하고 프로그램을 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

int big(int a, int b, int c=100) {
	if( a>c || b>c )
		return c;
	else
	{
		if( a>= b) {
			if( a > c) return c;
			else return a;
		}
		else {
			if( b > c) return c;
			else return b;
		}
	}
}

int main() {
	int x = big(3, 5);
	int y = big(300, 60);
	int z = big(30, 60, 50);
        cout << x << ' ' << y << ' ' << z << endl;
}

 

 

4. 설명

 

디폴트 매개 변수를 가진 하나의 함수로 big()을 구현하니 (1)과 비교하여 코드 길이가 많이 줄었습니다.

 

변수 c의 디폴트 값을 100을 주어서 변수가 2개만 입력되었어도 최대값 c=100보다 큰 a나 b 값이 있으면 최대값인 c를 출력하고 그렇지 않다면 a와 b를 비교하여서 더 큰 수를 출력합니다.

 

또한 변수 3개를 입력받아 최대값이 50일 경우도 동일하게 작동합니다.

 

 

1. 문제

 

3. 함수 big()을 호출하는 경우는 다음과 같다.

 

(1). big() 함수를 2개 중복하여 작성하고 프로그램을 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

int big(int a, int b) {
	if( a>100 || b>100 )
		return 100;
	else 
	{
		if( a >=b ) return a;
		else return b;
	}
}
int big(int a, int b, int c) {

		if( a>= b) {
			if( a > c) return c;
			else return a;
		}
		else {
			if( b > c) return c;
			else return b;
		}
	
}

int main() {
	int x = big(3, 5);
	int y = big(300, 60);
	int z = big(30, 60, 50);
	cout << x << ' ' << y << ' ' << z << endl;
}

 

 

4. 설명

 

int형 매개변수 2개를 입력받는 big함수와 int형 매개변수 3개를 입력받는 big함수 2개를 구현합니다.

 

 

우선 big(int a, int b)는 if( a>100 || b>100 )으로 두 변수 중 100이 넘는 값이 있으면 return 100;을 실행하고 없다면 if문을 사용하여서 a와 b 중 큰 값을 구하여 return합니다.
 
big(int a, int b, int c)는 변수 a와 b를 비교 후 큰 값이 최대값을 저장하고 있는 변수 c보다 크면 return c;를 최대값 c보다 크지 않다면 b보다 더 큰 a를 retrun합니다. b가 a보다 클 경우도 동일합니다.

 

이제 구현되어 있는 main() 함수를 실행하면 똑같은 결과를 출력합니다.

 

1. 문제

 

2. Person 클래스의 객체를 생성하는 main() 함수는 다음가 같다.

 

(2). 디폴트 매개 변수를 가진 하나의 생성자를 작성하고 프로그램을 완성하라.

 

 

2. 결과

 

 

 

 

3. 코드

 

#include <iostream>
#include <string>
using namespace std;

class Person {
	int id;
	double weight;
	string name;
public : 
	Person(int id=1, string name="Grace", double w=20.5) 
	{ this->id=id; 
	weight = w; 
	this->name=name; 
	}
	void show() { cout << id << ' ' << weight << ' ' << name << endl; }
};

int main() {
	Person grace, ashley(2, "Ashley"), helen(3, "Helen", 32.5);
	grace.show();
	ashley.show();
	helen.show();
}
		

 

 

4. 설명

 

(1)번에서는 생성자가 디폴트 매개 변수를 가지고 있지 않아서 각각 3개의 생성자를 생성하였지만 (2)에서는 디폴트 매개 변수를 사용하므로써 생성자 하나로 (1)과 동일한 결과를 얻을 수 있다.

 

※ 디폴트 매개 변수를 지정할 시 주의하실 점은 매개변수의 순서 입니다.

 

예를들어 Person(int id, string name="Grace", double w=20.5)로 선언 한 후

 

Person p(5); 로 객체를 생성하면 오류가 발생하지 않습니다.

 

그러나 Person( string name="Grace", int id, double w=20.5) 이렇 듯 디폴트 매개 변수 값이 있는 string 변수 name이 디

폴트 매개 변수 값이 없는 int id보다 먼저 왔을 시 오류가 발생합니다.

 

 

그러므로 디폴트 값이 있는 매개변수를 선언할 시 오른쪽부터 채워져야 합니다.

 

 

1. 문제

 

2. Person 클래스의 객체를 생성하는 main() 함수는 다음과 같다.

 

(1) 생성자를 중복 작성하고 프로그램을 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
#include <string>
using namespace std;

class Person {
	int id;
	double weight;
	string name;
public : 
	Person(){ id=1; weight=20.5; name="Grace";}
	Person(int id, string name) { this->id=id; weight=20.5; this->name=name;}
	Person(int id, string name, double w) { this->id=id; weight = w; this->name=name; }
	void show() { cout << id << ' ' << weight << ' ' << name << endl; }
};

int main() {
	Person grace, ashley(2, "Ashley"), helen(3, "Helen", 32.5);
	grace.show();
	ashley.show();
	helen.show();
}
		

 

 

4. 설명

 

매개변수가 없는 생성자, int형 string형 매개변수를 입력 받는 생성자, int형 string형 double형 매개변수를 입력받는 생성자 

 

3개를 구현 합니다.

 

결과에 따라서 각 생성자에서 멤버 변수들을 초기화 해줍니다.

 

 

main()함수에서 객체 3개를 생성한 후 show() 멤버 함수로 출력 합니다.

 

 

 

1. 문제

 

1. add() 함수를 호출하는 main() 함수는 다음과 같다.

 

(2) 디폴트 매개 변수를 가진 하나의 add() 함수를 작성하고 프로그램을 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

int add(int a[], int size, int b[]=NULL) {
	int add=0;
	
	for(int i=0; i<size; i++) {
		add += a[i];
		if(b !=NULL) add += b[i];
	}
	return add;
}

int main() {
	int a[] = {1,2,3,4,5};
	int b[] = {6,7,8,9,10};
	int c = add(a, 5);
	int d = add(a, 5, b);
	cout << c << endl;
	cout << d << endl;
}

 

 

4. 설명

 

add() 함수에서 매개변수 배열 b의 디폴트 매개변수를 NULL로 주었습니다.

 

그래서 for문에서 b != NULL 인 경우 b의 요소도 총 합 add의 더해지도록 하였습니다.

 

b가 NULL인 경우나 매개변수가 2개만 입력되어 디폴트 매개변수가 입력되었으면 배열 a의 요소들 합을 구하도록 작동합니다.

 

 

 

1. 문제

 

1. add() 함수를 호출하는 main() 함수는 다음과 같다.

 

(1) add() 함수를 중복 작성하고 프로그램을 완성하라.

 

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

int add(int a[], int size);
int add(int a[], int size, int b[]);

int add(int a[], int size) {
	int add=0;
	for(int i=0; i<size; i++)
		add += a[i];
	return add;
}
int add(int a[], int size, int b[]) {
	int add=0;
	for(int i=0; i<size; i++) {
		add += a[i];
		if(b !=NULL) add += b[i];
	}
	return add;
}

int main() {
	int a[] = {1,2,3,4,5};
	int b[] = {6,7,8,9,10};
	int c = add(a, 5);
	int d = add(a, 5, b);
	cout << c << endl;
	cout << d << endl;
}

 

 

4. 설명

 

add()함수를 중복 작성합니다.

 

중복 작성을 하기 위해서는 매개변수들이 달라야 합니다.

 

매개변수 3개를 입력받는 add함수는 for문 안 속에서 if문을 이용하여서 b != NULL일 경우 덧셈을 하도록 하므로써 (2)도 해결할 수 있습니다.

 

문자열

생성

1. 큰따옴표 "abc"

2. 작은따옴표  'abc'

3. 큰따옴표 3개 """a

bc"""

4. 작은따옴표 3개 '''a

bc'''

 

여기서 3번과 4번은 여러 줄로 구성된 문자열을 저장할 수 있다.

ex)

>>> a= """
abc"""
>>> print(a)

abc

 

 

문자열 곱

 문자열 내에서 특정 문자열이 반복되는 경우 '*'를 사용하여 간소화가 가능하다.

ex)

>>> print("-" * 30)
------------------------------

 

 

문자열 슬라이싱

 문자열에서 원하는 부분을 뽑아낸다.

ex)

>>> b = "abc d"
>>> b[0:2]
'ab'
>>> b[2:-1]
'c '
>>> b[2:]
'c d'
>>> b[:2]
'ab'

 

주의점 : b[x1:x2]라면 범위는 x1<= b < x2 으로서 x2는 포함하지 않는다.

여기서 x2를 생략한다면 문자열 끝을 가리키고 x1을 생략한다면 문자열 맨 처음을 가리킨다.

 

 

문자열에서 문자변경

 파이썬에서 문자열은 요소값을 바꿀 수 없는 자료형이다. 그래서 기존의 다른 언어에서처럼 인덱스로 접근하여 문자를 바꿀려하면 에러가 발생한다.

 

하지만 슬라이싱 기능을 이용하여 유사하게 만들 수 있다.

>>> def chan(s, i, c) :
	return s[:i] + c + s[i+1:]

>>> c = "byphon"
>>> c
'byphon'
>>> c = chan(c, 0, 'p')
>>> c
'pyphon'
>>> c = chan(c, 2, 't')
>>> c
'python'

 

위 코드의 chan함수는 (문자열, 인덱스, 변경할 문자) 를 매개변수로 받고서 슬라이싱 기능을 이용하여서 해당 index의 문자를 변경한 문자열을 return해준다.

 

 

 

문자열 포맷팅

 문자열을 만들거나 표현할 때 사용한다. ',' 나 '+'를 사용할 수도 있지만 타입이 달라서 에러가 발생할 수 있고, 포맷팅 사용하면 직관적으로 변수의 변수형을 알 수 있다.

ex)

>>> print("hello %s" % "world")
hello world
>>> print("%d, %s" % (52, "Hi") )
52, Hi
>>> print("%d" % 52 , "%s %s" % ("hello", "world") )
52 hello world

- 한 문자열에서 여러 값이 있다면 괄호를 써주어 묶어준다.

 

- 3번 째 print문처럼 여러 문자열이 있다면 각 문자열 뒤에서 "% 값" 을 주어야 한다.

 

 

 

문자열 정렬

 포매팅을 이용하여서 문자열을 정렬할 수 있다.

ex)


>>> a = "hi"
>>> "{:<15}".format(a)
'hi             '
>>> "{:^15}".format(a)
'      hi       '
>>> "{:>15}".format(a)
'             hi'
>>> "{:-^15}".format(a)
'------hi-------'

왼쪽 정렬은 '<' 를 

가운데 정렬은 '^'를

오른쪽 정렬은 '>'를 사용하여 정렬할 수 있다.

 

 

 

 

문자열 함수들

ex)


>>> a = "ab cd"
>>> len(a)		# 문자열 길이 리턴
5
>>> a.find('c')		# 문자열에서 'c'를 찾아서 index 리턴
3
>>> a.find('e')		# 문자열에 없으면 -1 리턴
-1
>>> a.index('c')	# find와 같은 기능 단, 없는 문자면 에러 발생
3
>>> a.replace("ab", "ef")	# 인수 = (변경 될 문자열, 변경 할 문자열)
'ef cd'
>>> a.split()	# 인수를 주지 않았기 때문에 디폴트문자인 공백으로 문자열을 자른 후 리턴
['ab', 'cd']

>>> b = ' b,c,d,b '
>>> b.split(',')	# 문자열에서 ','를 기준으로 자른 후 리스트 리턴
[' b', 'c', 'd', 'b ']
>>> b
' b,c,d,b '
>>> b.lstrip()		# left(왼쪽) 공백 제거
'b,c,d,b '
>>> b.rstrip()		# right(오른쪽) 공백 제거
' b,c,d,b'
>>> b.strip()		# 왼쪽, 오른쪽 공백 제거
'b,c,d,b'

>>> b.count('b')	# 문자열에서 문자의 개수 리턴
2
>>> '~'.join(b)		# 문자열에서 각 문자 사이에 문자를 삽입한다.
' ~b~,~c~,~d~,~b~ '

>>> '@'.join(b.strip().split(','))		# 처음 b에서 ','을 '@'로 바꾼다
'b@c@d@b'

>>> c = "AbCd"
>>> c
'AbCd'
>>> c.upper()		# 대문자로 변경
'ABCD'
>>> c.lower()		# 소문자로 변경
'abcd'

 

- len() : 문자열 길이 리턴

 

- find() : 문자열에서 문자를 찾아 인덱스 리턴, 없으면 -1을 리턴

 

- index() : find()와 마찬가지로 문자열에서 문자를 찾아 인덱스 리턴. 단, 없으면 에러 발생

 

- replace() : 문자열에서 지정한 문자열 변경

 

- split() : 문자열을 나누어 리스트로 반환한다. 인수를 주지 않으면 기본으로 ' '(공백)으로 나뉜다.

 

- lstrip() : 왼쪽 공백 제거

 

- rstrip() : 오른쪽 공백 제거

 

- strip() : 양쪽 공백 제거

 

- count() : 문자열에서 인수로 준 문자의 개수를 리턴한다.

 

- join() : 문자열에서 문자들 사이에 문자를 삽입한다.

 

- upper() : 대문자로 바꾼다.

 

- lower() : 소문자로 바꾼다.

'Python' 카테고리의 다른 글

파이썬 자료형 - 숫자  (0) 2019.04.09

정수형(10진수) :  양의 정수, 음의 정수, 0 

ex)  >>> num = 50

     >>> num = -99

 

 

2진수(Binary) : 숫자 0 + (소문자 b 또는 대문자 B) + 2진수 숫자

ex)  >>> num = 0B111     => 10진수=7

 

※ 주의점 : 0~1 숫자만 사용해야한다. 그렇지 않으면 SyntaxError: invalid token 가 발생한다.

 

 

8진수(Octal) : 숫자 0 + (소문자 o 또는 대문자 O) + 8진수 숫자

ex)  >>> num = 0o77     => 10진수=63

 

※ 주의점 : 0~7 숫자만 사용해야한다. 그렇지 않으면 SyntaxError: invalid token 가 발생한다.

 

 

16진수(Hexadecimal) : 숫자 0 + ( 소문자 x 또는 대문자 X) + 16진수 숫자

ex)  >>> num = 0x50      =>  10진수=80

 

※ 주의점 : 0~9 숫자를 다 사용할 수 있다. 하지만 10~15 숫자의 해당하는 알파벳 a~f만 사용하지 않으면 SyntaxError: invalid token 가 발생한다.

 

 

실수형 : 우리가 평소 사용하던 소수점을 포함한 숫자를 나타낸다.

ex)  >>> num = 9.8

 

또한, 파이썬에서는 "지수식 표현"으로써 ( 실수 + 소문자 e 또는 대문자 E + 10의 승수 )

ex)  >>> num = 1.23E5      (=> 1.23  * 10^5 )

      >>> num = 4.56e-3     (=> 4.56 * 10^-3 )

 

 

 

 

 

연산자

 

 - a ** b :  a^b,  a의 b제곱을 반환한다.

 

 - a % b :  a를 b로 나눈 후 나머지 부분을 반환한다.

 

 - a // b :  a를 b로 나눈 후 몫 부분만을 반환한다.

 

 

'Python' 카테고리의 다른 글

파이썬 자료형 - 문자열  (0) 2019.04.11

+ Recent posts