안녕하세요. 파피몬입니다.
이번 겨울방학에 최호성 선생님의 "독하게 시작하는 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언어' 카테고리의 다른 글
C언어 복습 <part4> (0) | 2020.03.24 |
---|---|
C언어 복습 <part3> (0) | 2020.03.12 |
C언어 복습 <part1> (0) | 2020.03.09 |
댓글