반응형

Programming Tools 55

[C Language] 후위표기법(reverse polish notation)을 이용한 계산기 만들기

계산기를 작성하는 프로그램을 만들어보자. reverse polish notation(후위 표기법이라고도 한다.)을 사용할 것이다. reverse polish notation이란, (1-2)*(4+5) 를 12-45+* 로 표기하는 것을 의미한다. reverse polish notation을 사용하면 괄호에 영향을 받지 않고 정확하게 연산과정을 지켜가며 컴퓨터 내부연산을 통해 계산할 수 있다. 이 표기법과 스택 자료구조를 통해 일관되게 계산하는 프로그램을 만들 것이다. 프로그램의 구조를 다음과 같이 설계하자. while(next operator or operand is not end-of-file indicator) if(number) push it else if(operator) pop operands ..

[C Language] External Variables, Automatic Variable (전역변수, 자동변수, 지역변수)

C언어에서는 변수를 external과 internal로 구분할 수 있다. External variable(전역변수)은 모든 함수의 밖에서 선언되고, 모든 함수들에서 접근 가능하다. 반면 internal variable 혹은 automatic variable(지역변수)은 함수 내부, scope 안에서 선언된다. 지역 변수는 선언된 함수 안에서만 사용할 수 있고(더 정확히는 해당 scope 내) 다른 함수에서는 사용할 수 없다. 즉 함 수안에 종속되어 존재한다. 함수밖에서는 존재하지 않는 것으로 취급한다. 이렇듯 C 언어는 범위에 따라 변수의 접근을 제한한다. #include int main() { { int num1 = 10; // 블록 안에 변수를 선언 } printf("%d\n", num1); // 컴..

[C Language] Chap.4 Functions and Program Structure - Functions returning Non-Integers

Functions returning Non-Integers int 타입 외에도 다양한 타입을 반환하는 함수를 만들 수 있다. #include double atof(char s[]){ // double 자료형을 반환하는 함수 double val, power; int i, sign; for(i = 0; isspace(s[i]); i++) ; // 공백 스킵 sign = (s[i] == '-')? -1 : 1; if(s[i] == '+' || s[i] == '-') i++; for(val == 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - '0'); if(s[i] == '.') i++; for(power = 1.0; isdigit(s[i]); i++){ val =..

[C Language] Chap.4 Functions and Program Structure

위에서의 예시와 같이 함수의 정의는 다음과 같은 형태로 행해진다. return-type function-name(argument declarations){ declarations and statements } function의 declaration과 definition은 서로 타입이 같아야한다. argument 입력 시 type casting이 암시적으로 실행된다. https://en.cppreference.com/w/c/language/extern 각각의 external object에 대해서 오로지 하나의 definition만 있어야한다. https://stackoverflow.com/questions/17513736/what-does-it-mean-that-automatic-structures-and..

[Python] 문자열 자료형

문자열 자료형 파이썬에서는 character와 string을 구분하지 않는다. 한줄 문자열 ' ''로 묶는다. x = "abc" y = 'abc' print(x) print(y) 출력 : abc abc 여러줄 문자열도 ' "로 묶는다 x ='''abc def''' y = """abc def""" print(x) print(y) 출력 : abc def abc def 문자열 연산 인덱싱 인덱싱을 통해 k의 위치에서의 값을 구한다 string = "abcdefghi" print(string[0]) print(string[5]) print(string[8]) print(string[-1]) 출력: a f i i 슬라이싱 [s:t:p] s부터 t구간까지 p간격으로 구함 string = "abcdefghi" pri..

[C++] 함수의 값, 참조, 주소 반환 (Returning values by value, reference and address)

값의 반환 Return by value 복사본이 호출자에게 반환된다. 리터럴, 변수, 표현식을 반환할 수 있다. 범위 지정 문제를 걱정할 필요가 없다. 함수가 반환되기 전에 지역 변수가 평가되고, 값의 복사본이 호출자에게 반환된다. 값으로 반환을 사용해야 하는 경우: 함수 내에서 선언된 (지역)변수를 반환할 때 값으로 전달된 매개 변수를 반환할 때 아래 예제를 통해서 복사본이 전달됨을 확인해보자. #include using namespace std; int doubleValue(int x){ int value = x * 2; cout

[C++] Const 총 정리 - 2

Const와 함수 함수에서 Const가 사용되는 위치는 세 군데 매개변수 자료형 함수선언 리턴 자료형 매개변수 자료형에 사용되는 경우 PrintAddress(int &IParam) add(const int a, const int b) 형태와 같이 매개변수의 자료형에 const가 사용된다. 함수의 파라미터를 함수 내에서 변경하면 안되므로 오류를 막기위해 사용한다. 즉, 함수내에서 파라미터를 읽기만 하고 변경을 하는일이 없다는 것이다. 함수에 전달되는 parameter를 in-parameter와 out-parameter 두가지로 구분할 수 있다. in-parameter는 함수가 데이터를 전달받아 사용하는 것을 의미하고 out-parameter는 함수가 데이터를 변경하는 것을 의미한다. 예를 들면 num은 여..

[C++] Const 총 정리 - 1

Pointer와 Const variable const(상수)값은 그 값을 변경할 수 없다. 변경할 수 있는 값은 non-const(비상수)라고 할 수 있겠다. #include void main(){ int value = 5; int* ptr = &value; *ptr = 6; printf("%d\n", *ptr); } 출력 : 6 하지만 value의 값이 상수인 경우에는 어떻게 될까? #include void main(){ const int value = 5; int* ptr = &value; *ptr = 6; printf("%d\n", *ptr); } 출력 : 컴파일 에러 위 코드는 컴파일되지 않는다. 상수 변수는 값을 변경할 수 없다. 만약 상수가 아닌 포인터가 상수 변수를 가리킨 다음에 역참조하여 ..

[C Language] Chap.3 Control Flow - comma `,` 연산자

comma , 연산자 둘 이상의 문장을 한 행에 삽입할 때 사용된다. ,는 시퀀스 포인트를 추가하므로, 여러개의 문장을 하나의 문장으로 쓰되 각 문장을 시퀀스 포인트로 나눠주는 것이라고 생각할 수 있다. 콤마 연산자는 드물게 사용하는 것이 좋다. 그리고 사용시 두 연산자가 연관성이 있는 것이거나, 혹은 여러 단계를 거치는 연산이 한 행에서 행해지도록 하는 것을 목적으로 하는 것이 좋다. 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 인자를 함수로 전달할 때에 사용하는 콤마 ,는 콤마 연산자가 아니다. 이 때의 ,는 왼쪽에서 오른쪽으로의 피연산자 평가를 보장하지 않는다. 왼쪽에서 오른쪽으로 평가되며, 오른쪽 피연산자의 type과 value가 반환된다. #include int main() { int a=1..

[C Language] Chap.3 Control Flow - Goto와 Label

Goto와 Label 보통 C언어를 배우면 goto를 사용하지 말라고 하는데, 사실 goto가 유용한 경우가 한정적으로 존재하기는 한다. 여러겹의 loop로 싸인 곳을 탈출할 때에 특히 유용하다. 이런식이다. for(...) for(...) for(...){ ... if(disaster) goto error; } ... error: do error handling goto를 사용해서 배열간 같은 원소의 존재유무를 찾는 프로그램을 짜면 #include int main(){ int i, j, n, m; int a[] = {1,2,3,4,5,6}; int b[] = {7,8,9,10,11,12,1}; n = sizeof(a)/sizeof(int); m = sizeof(b)/sizeof(int); for(i =..

반응형