📌 Study
🔸 2022-10-03
[프로그래밍 언어 활용]
1. 기본 문법 활용하기
- 열거체 개념
- 서로 연관된 정수형 상수들의 집합
- 정수형 상수에 이름을 붙여서 코드를 이해하기 쉽게 해줌
- C, C++ 언어에서는 멤버에 초깃값을 설정하지 않으면 0부터 차례대로 할당
- 자바에서는 멤버에 값이 0부터 차례대로 할당
- 파이썬은 멤버에 값들을 지정해야 함
enum 열거체명 {
멤버1,
멤버2,
...
};
#include <iostream>
enum Week {
Sunday,
Monday,
Tuesday = 5,
Wednesday
};
void main() {
enum Week week;
week = Wednesday;
std::cout << week; // 6
}
enum Week
선언 => Week = 열거체
- 값을 설정하지 안았으니 차례대로 할당, Sunday = 0, Monday = 1, Tuesday = 5, Wednesday = 6
- 변수 week 선언
week = Wednesday;
=> Wednesday = 6 이므로 출력 6
class Week(Enum):
Sunday = 0
Monday = 1
Tuesday = 5
Wednesday = 6
print(Week.Sunday) // Week.Sunday
- 구조체 개념 : 사용자가 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형
- 구조체 문법
struct 구조체명 {
자료형 변수명1;
자료형 변수명2;
...
};
#include <iostream>
using namespace std;
struct Student {
char gender;
int age;
int num;
};
void main() {
struct Student s;
s.gender = 'M';
s.age = 24;
s.num = 20221003;
cout << s.gender << endl; // M
cout << s.age << endl; // 24
cout << s.num << endl; // 20221003
- 구조체와 포인터
- 구조체는 일반 구조체 변수로 접근할 때는
.
으로 접근
- 구조체 포인터는 접근할 때는
->
로 접근
#include <stdio.h>
struct Student {
char gender;
int age;
};
void main() {
struct Student s = {'F', 21};
struct Student *p = &s;
printf("%c %d \n", s.gender, s.age); // F, 21
printf("%c %d \n", (&s)->gender, (&s)->age); // F, 21
printf("%c %d \n", p->gender, , p->age); // F, 21
printf("%c %d \n", (*p).gender, (*p).age); // F, 21
printf("%c %d \n", p[0].gender, p[0].age); // F, 21
}
#include <stdio.h>
struct Soojebi {
char name[10];
int age;
};
void main() {
struct Soojebi s[] = {"Kim", 28, "Lee", 38, "Seo", 50, "Park", 35};
struct Soojebi *p;
p = s;
p++;
printf("%s\n", p->name); // Lee
printf("%s\n", p->age); // 38
}
- main 함수
- 프로그램이 실행하는 모든 프로그램의 시작점
- main 함수에 있는 명령어를 실행한다.
void main() {
}
int main() {
return 반환값;
}
- 사용자 정의 함수 개념 : 사용자가 직접 새로운 함수를 정의하여 사용하는 방법
int fn (int a, int b) {
return a+b;
}
void main() {
std::cout << fn(5, 7); // 12
}
#include <stdio.h>
char fn(int num) {
if(num % 2 == 0)
return 'Y';
else
return 'N';
}
void main() {
char a = fn(5)
printf("%c\n", a);
}
def fn(num):
if num % 2 == 0:
return 'Y'
else:
return 'N'
a = fn(5)
print(a)
#include <stdio.h>
int r1() {
return 4;
}
int r10() {
return (30+r1()); // 34
}
int r100() {
return (200+r10()); // 234
}
int main() {
printf("%d\n", r100()); // 234
return 0;
}
#include <stdio.h>
int Soojebi(int base, int exp) {
int i, result = 1;
for(i = 0; i < exp; i++)
result *= base;
return result; // 2, 4, 8, ..., 2^10
}
void main() {
printf("%d", Soojebi(2, 10)); // 1024
}
- 함수 포인터 : 함수의 주소를 저장하고, 해당 주소의 함수를 호출하는데 사용하는 포인터
- 함수 포인터 문법 :
리턴타입(*함수 포인터)(함수 파라미터);
#include <stdio.h>
void fn1() {
printf("fn1 함수\n");
}
int fn2(int a) {
printf("fn2 함수 : %d\n", a);
return 0;
}
voin main() {
void (*pf1)();
int (*pf2)(int);
fn1(); // fn1함수
fn2(5); // fn2함수 : 5
pf1 = fn1;
pf2 = fn2;
pf1(); // fn1함수
pf2(5); // fn2함수 : 5
}
- 매개변수 전달 개념 : 함수가 필요로 하는 값을 매개변수로 만들면 함수를 호출하는 쪽에서 매개변수를 사용하여 해당 함수에게 변수의 값, 변수의 주소값을 전달하는 방식
- 매개 변수 종류
전달 인자(Argument)
: 실 매개변수, 함수가 함수 호출하는 쪽에서 전달하는 변수의 값 또는 변수의 주소값
매개 변수(Parameter)
: 형식 매개변수, 함수를 호출하는 쪽에서 전달받는 변수의 값 또는 변수의 주소값
- 매개 변수 전달 방법
call by value
: 변수의 값을 넘겨주고, 이 값은 새로운 공간에 할당되어 사용하는 방식, 형식 매개변수의 어떠한 변화도 실 매개변수에 아무런 영향을 미치지 않음
call by reference
: 변수의 값이 아닌 변수가 사용 중인 메모리 공간의 주소를 넘겨주는 방식, 실 매개변수의 주소를 형식 매개변수로 보냄
- 매개변수 전달 방법 예시(call by value, call by reference)
// call by value
#include <stdio.h>
int fn(int x, int y) {
...
}
void main() {
int i, j;
...
fn(i, j);
}
===========================
// call by reference
#include <stdio.h>
int fn(int* x, int* y) {
...
}
void main() {
int i, j;
...
fn(&i, &j);
}
- 재귀함수 : 함수 자신이 자신을 부르는 함수
- 재귀함수 예시
#include <iostream>
int fn(int n) {
if(n <= 1)
return 1;
else
return n * fn(n-1);
}
void main() {
std::cout << fn(3); // 3 * 2 * 1 = 6
}
#include <stdio.h>
int hrd(int n) {
if(n <= 0)
return 1;
else
printf("%d", n);
hrd(n-1);
}
int main() {
hrd(5); // 54321
return 0;
}