본문 바로가기
프로그래밍 언어/C언어

C언어 복습 <part2>

by 조엘 2020. 3. 10.

안녕하세요. 파피몬입니다.

 

이번 겨울방학에 최호성 선생님의 "독하게 시작하는 C프로그래밍" 책을 유튜브 강의와 함께 공부하였습니다.

강의를 들은 내용을 종이에 정리하였고,  중 중요하다고 판단한 내용을 포스팅 하도록 하겠습니다.

 

아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!!

 

이번 Part2에서는, 4단원. 연산자 / 5단원. 연산자-응용 / 6단원. 기본 제어문 if / 7단원. 반복문에 대해서 복습해봅니다. 

 

 

1. int a = 10; 에서 a는 l-value, 10은 r-value 이다. 통상적으로 l-value는 변수, r-value는 상수 정도로 생각한다. 

 

 

2. 컴퓨터의 나누기 방식은 조금 독특(?)하다. 

컴퓨터가 7/2를 하는 방법!!

7 - 2 ... 나누기 1번
  5 - 2 ... 나누기 2번
    3 - 2 ... 나누기 3번
      1 ... 2보다 작다! 이게 나머지

그렇기 때문에 7/0이 무한으로 빼져서 오류가 나는것

 

 

3.  sizeof( ) 연산자는 CPU가 아니라 compiler에서 연산이 이루어진다. 성능에 영향을 주지 않기 때문에 가급적 버릇처럼 자주 사용하는 것이 좋다!

 

 

4. 논리연산자 (&&, ||, ! ) 를 쓸 때에는 왼쪽에서 오른쪽 순서로 판단이 이루어지기 때문에

 ** 빠른 처리가 가능한 것을 왼쪽에 배치할 것!

 ** 쉬운 연산, 자주 적중할 연산을 왼쪽에 배치할 것!

 

 

5. 다중 if (else if) 구문은 경우의 수를 많이 둬 연산이 많아지며, 성능이 떨어진다. 이는 refactoring (외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법)의 대상이 된다. 

 ** 좋은 대안으로는 Look-Up table이 있다.

#include<stdio.h>

int main()
{
	//전체 경우에 대한 과금률 결과 배열에 담기!
	double aRate[10] = {
    	//1세 ~ 10세
    	0.0, 0.1, 0.25,
        0.5, 0.5,
        0.6, 0.65, 
        0.8, 0.82, 0.97
	};
	int nAge = 0, i=0, nFee = 1000;
    
    scanf("%d", &nAge);
    printf("최종요금 : %d원\n", (int)(nFee*aRate[nAge-1]));
    return 0;
}

 

 

6. switch-case문에서 case정수만 들어갈 수 있는 건, 실수에는 부동소수점 오차가 있기 때문이다. 

switch (변수 or 식)
{
	case 정수:
}   

 

 

 

7. 반복문에서 continue는 가급적 쓰지 않는다. continue 문을 쓰면 바로 조건문으로 다시 돌아가는데, 이는 나중에 소스코드 정적분석의 기피대상 knot를 만든다. 

 

C언어 4~7단원.pdf
1.21MB

반응형

'프로그래밍 언어 > C언어' 카테고리의 다른 글

C언어 복습 <part4>  (0) 2020.03.24
C언어 복습 <part3>  (0) 2020.03.12
C언어 복습 <part1>  (0) 2020.03.09

댓글