반응형

Programming Tools 55

[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;를 넣지 않는다고 하면 ..

[C Language] Chap.3 Control Flow - Statement, Block, if-else (제어문 - 문장, 블록, if-else문)

Control Flow 제어문 statement와 block x = 0 i++ printf(...) 와 같은 것에 ;이 붙으면 문장(statement)가 된다. {}는 declaration과 statement를 한 곳에 모아준다. 이를 compound statement 혹은 block이라고한다. block은 하나의 statement와 동일하게 취급한다. 그래서 for, if while, else 등에 쓰이는 {}에는 ;이 안붙는 것이다. If - else문 if (expression) statement1 else statement2 다들 알다시피 expression이 맞으면 statement1이 동작하고 아니면 statement2가 동작한다. 물론 else문은 넣어도 되고 안넣어도 된다. 참고로 expr..

[C Language] Sequence Point (시퀀스 포인트)

시퀀스 포인트 시퀀스 포인트는 C언어 계열의 언어에서 매우 중요한 개념이므로, 두가지 주요 문서를 번역해서 정리하고자 한다. 다음은 C FAQ 3.8번 질문을 번역한 것이다. A sequence point is a point in time at which the dust has settled and all side effects which have been seen so far are guaranteed to be complete. (시퀀스 포인트는 모든 연산에 의한 결과가 완료되는 지점을 의미합니다.) Sequence point는 크게 세가지가 있다. at the end of the evaluation of a full expression (a full expression is an expression..

[C Language] Assignment Operators, Conditional Expressions, Precedence and Order of Evaluation , Sequence Point(대입 연산자, 조건 표현식, 삼항 연산자, 연산의 우선순위와 연산 순서, 시퀀스 포인..

Assignment Operators 대입 연산자 i = i + 2는 i += 2와 같다. 이렇게 하나의 연산자로 표현하는 것은 +뿐만이 아니다. + - * / % > & ^ | 등의 연산자 모두 =과 결합해서 하나의 대입연산자로 표현가능하다. 즉 expr1 op= expr2는 expr1 = expr1 op expr2와같다. 대입연산자의 범위에 주의해야한다. x *= y + 1 x = x * (y + 1) // 위의 표기와 같은 의미이다. x = x * y + 1 // 이것이 아니다. assignment operator는 코드를 간결하게하고 이해하기 쉽게 만들어준다. while((c = getchar()) != EOF)와 같은 표현을 기억할 것이다. 조건문 안에 들어있는 assignment operato..

[C Language] The C Programming Language - Increment, Decrement, Bitwise Operator(증감연산자, 비트연산자)

2.8 Increment and Decrement Operators ++n은 해당 라인이 동작하기 전에, n++는 해당 라인이 동작한 후에 작동한다. (i + j)++과 같은 코드는 illegal하다. 오직 하나의 variable에 대해서만 성립하는 연산자이다. 증감연산자를 통해 코드를 간결하게 만들 수 있다. 아래는 string에서 문자하나를 모두 없애는 함수이다. void squeeze(char s[], int c){ int i,m j; for(i = j = 0; s[i] != &#39;\0&#39;; i++) if(s[i] != c) s[j++] = s[i]; // j++; 안해도 된다. s[j] = &#39;\0&#39;; }strcat()이라는 두 string을 연결하는 함수를 예로 들면 아래와..

[C Language] The C Programming Language - Type Conversion, Type Casting(타입 컨버전, 타입 캐스팅, 자료형 변환)

Chap.2 : Types, Operators, and Expressions 2.7 Type Conversion(자료형 변환) 연산에 의한 자료형 변환 operator의 두 operands가 타입이 다르면 보통 narrow한 type이 wider한 type으로 변환된다. float형 변수를 subscription으로 쓰는 등의 말도안되는 conversion은 에러를 일으킨다. long -> short, float -> integer type으로의 변환 등 정보가 삭제되는, truncation이 일어나는 자료형은 컴파일러에서 warning을 내보내지만 error가 되지는 않는다. 주의 해야할 것 중 하나는 int s = &#39;0&#39;은 에러가 아니라는 것이다. string은 character과 다르..

반응형