반응형

Programming Tools/TCPL C Language 18

[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..

[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 =..

[C Language] Chap.3 Control Flow - Break, Continue

Break break는 for, while, do, switch등 현재 작동 중인 부분에서 탈출하게 한다. 스페이스나 탭 등의 빈공간을 제거하는 프로그램을 짜보자. #include #include int main(){ char s[] = "Hello World "; int n; for(n = strlen(s) - 1; n >= 0; n--) if(s[n] != ' ' && s[n] != '\t' && s[n] != '\n') break; // 공백문자를 만나면 for 문을 탈출한다. s[n+1] = '\0'; printf("%s", s); return 0; } 출력 Hello World Continue continue는 break처럼 탈출하지는 않고, 해당 loop를 스킵하고 다시 한번 loop로 진입한..

[C Language] Chap.3 Control Flow - do-while loop(do-while 문)

do-while 문 do-while문은 실행문이 모두 끝난 다음에 expression을 평가한다. 즉 적어도 한번은 statement가 실행된다. do while은 while문과 헷갈리지 않게 {}를 꼭 써주는 것이 좋다. do statement while(expression); do-while문을 이용해서 정수를 문자로 바꾸는 프로그램을 작성해보자. void itoa(int n, char s[]){ int i, sign; if((sign = n) 0); if(sign < 0) s[i++] = '-'; reverse(s); // 배열을 거꾸로 출력하는 함수 } void reverse(c..

[C Language] Chap.3 Control Flow - While, For(While문, For문)

While, For While문은 while(expression) statement For문은 for(expr1; expr2; expr3) statement 이렇게 쓸 수 있고, For문을 While문으로 바꾸면 아래와 같은 형식으로 표현할 수 있다. expr1; while(expr2){ statement expr3; } expr1과 expr3는 대입 혹은 함수 호출이 가능하고, expr2는 논리 표현식이다. expr2에 사용되는 i등의 index 변수는 루프 안에서 변경이 가능하고, 루프가 종료됐을 때 그 값을 유지한다. expr1, expr2, expr3 중 어떤 것도 생략이 가능하다. 그러나 세미콜론 ;는 생략되면 안된다. for(; ; ) statement 이렇게 작성하면 statement를 무한..

[C Language] Chap.3 Control Flow - Switch (제어문 - switch 문)

Switch 문 switch (expression){ case const-expr : statement case const-expr : statement default : statement }if-else if-else와 같이 multiway 처리를 할 때 유용한 switch문. 다른 제어문과의 중요한 차이는 해당 case에 대한 statement를 실행해도 탈출하지 않는다는 것이다. 해당하는 case에 expression이 들어맞으면 해당하는 statement가 실행된다. default는 else와 같은 존재고, 있어도 되고 없어도 된다. 참고로 default와 cases는 작성되는 순서가 정해져있지 않다. break;는 switch 문을 탈출할 수 있게 한다. 만약 break;를 넣지 않는다고 하면 ..

반응형