1. 연산자 우선순위
다음과 같은 연산자 우선순위가 있는데, 이안에서도 특히 신경써야 하는 우선순위들이 몇개 있다.
1-1 비트단위 연산자
비트 단위 연산자는 &, ^, | 순으로 연산자 우선순위를 가진다. 보통 헷갈리니까 괄호를 주는데 정처기는 그런거 없다.
& ^ | 순인거 반드시 기억하자. 또한 ~연산자의 경우 그냥 최우선이다.
예제: 30 | 12 & 19는 30이나, 연산자 우선순위를 신경쓰지 않으면 18로 잘못 계산하게 된다.
1-2 논리 연산자
얘도 위에거랑 거의 비슷한데, &&가 ||보다 먼저다. 또한 !는 그냥 최우선이다. 그냥 부정, 증감같이 하나만 엮이는건 무조건 먼저라고 생각해도 좋다.
따라서 1 || 1 && 0 의 경우 연산자 우선순위를 고려하면 1이지만, 고려하지 않으면 0이되니 주의해야한다.
1-3 사칙연산
얘는 대부분 알거같지만, 곱셈 나눗셈 나머지가 덧셈 뺄셈보다 먼저다.
1-4 그외 연산자 우선순위
증감,부정 -> 연산 -> 쉬프트 연산 -> 관계 -> 비트 논리 -> 논리 ->조건 -> 대입 순서다.
2. 반복문 종료조건
for(i=0;i<10;i++)
이라는 반복문이 있을때, i는 이 반복문이 끝나면 10이 되어있다. (10이 되면서 조건문이 달라지기 때문
for문의 경우 초기식은 아예 while문 밖, 조건문의 경우 while문의 시작, 증감식의 경우 while문의 끝이라는걸 기억하자.
3. 입력관련
scanf로 문자열을 받을 경우, 띄워쓰기가 나오면 더이상 받아오지 않는다.
또한 줄바꿈이 있었을 경우, scanf는 버퍼에 줄바꿈을 남기고 널, gets는 줄바꿈을 널로 변경,
fgets는 줄바꿈을 남겨두고 널을 더한다.(다른 말로 하면, fgets뒤에 출력을 시킬경우 한줄이 넘어갈 수 있다)
4. 자료형 관련
특히 조건문 등에서 많이 발생하는데, '1'과 1은 다른 것이다. if문은 바로옆에 붙어있어서 잘 알아채는데, switch문등에서는 간과하기도 하니 주의할것.
5. 함수관련
5-1 지역변수 관련
지역변수와 전역변수가 이름이 같을때, 전역변수는 무시된다는 것과, C언어나 자바는 call-by-value라는것만 기억하면된다. (여기서는 지역과 전역의 이름이 같은 경우가 생각보다 흔하다.)
5-2 반환값 관련
함수를 실컷 만들어놓고 반환한 값을 받지 않는 경우가 흔하다.
6. 프로그래밍 라이브러리 함수들
pow(double a,double b) | a의 b제곱 계산 |
sqrt(double a) | 제곱근 계산 |
abs(int n) | 절대값 계산 |
atoi(char str) | 문자열을 정수로 변환 |
rand(void) | 임의의 난수 생성 |
strcpy(*string1, *string2) | 문자열을 다른 문자열에 복사 |
strlen(*string) | 문자열 길이 계산 |
7. 서식문자
잘쓰지 않는 것은 까먹기 쉽다. 특히 소수점 몇째자리까지 같은걸로 나오기도 하니 신경쓰도록하자.
%6d | 정수를 6자리로 고정해서 출력(앞에는 빈칸) ex) ___200 |
%06d | 정수를 6자리로 고정하고 앞에 0 넣음. ex) 000200 |
%.3f | 소수점 이하 3자리 출력(%.f나 %.0f는 소수점 없음) |