목록분류 전체보기 (40)
일
Q: C언어에 지수연산자가 없는데, 제곱연산을 하는 방법은? A: 정수를 작은 양의 정수만큼 제곱하려면 그냥 그만큼 곱해주면 됨 Ex. i * i * i 근데 정수가 아닌 숫자만큼 제곱할거면 pow 라는 함수를 이용함. Q: %연산자를 고정소수 피연산자에도 쓰고 싶은데 방법은? [산술연산자] A: % 연산자는 정수 피연산자를 필요로 함. fmod를 써보는걸 추천. Q: C가 왼쪽값이 있다면, 오른쪽값도 있는지? A: 있음. 왼쪽값은 좌변 표현식, 오른쪽값은 우변 표현식. 즉 오른쪽값은 변수, 상수, 혹은 더 복잡한 표현식이 될 수 있음. 책에서는 C 표준대로 오른쪽값이 아니라 표현식이라고 지칭할 것임.

4.4 표현식 평가 ↑ 지금까지 다룬 연산자들. 아래의 예시를 연산자 순서대로 괄호를 이용해 하나의 피연산자처럼 처리해보자. a = b += c++ - d + --e / -f 우선순위 1위: 후위 ++ 연산자 → a = b += (c++) - d + --e / -f 2순위 전위 -- 연산자, 단항음수연산자 → a = b += (c++) - d + (--e) / (-f) 3순위 / 연산자 → a = b += (c++) - d + ((--e) / (-f)) 여기 보면 두 연산자 -, + 가 d를 공유하고 있음. 결합방향을 고려해야 함. - 와 + 는 왼쪽에서 오른쪽으로 결합하므로 괄호는 뺄셈 먼저, 그 뒤에 덧셈을 처리함. → a = b += (((c++) - d) ((--e) / (-f))) 마찬가지로 b..
4-2 할당 연산자 표현식의 값이 계산된 후에는 그 값을 변수에 저장하는데, 단순할당simple assignment을 해주는 = 연산자가 이때 사용됨. 이미 변수에 저장된 값을 바꾸려면 복합할당연산자를 사용하면 됨. 단순할당 할당 v = e 는 표현식 e를 처리하고 그 값을 복사해 v에 저장한다는 뜻임. e는 상수, 변수, 복잡한 표현식이 될 수 있음. 예시 ↓ i = 5; /* i의 값은 5이다 */ j = i; /* j의 값은 5이다 */ k = 10 * i + j; /* k의 값은 55이다 */ 만약 v와 e가 같은 형이 아니라면, 할당이 되는 순간 e의 값은 v의 형에 알맞게 변환됨. 예시 ↓ int i; float f; i = 72.99f; /* i의 값은 72이다 */ f = 136; /* f..

Chapter 04 표현식 C언어는 구문보다 표현식(어떤 값을 계산하는 식)을 엄청 중시함. 가장 간단한 표현식은 변수(프로그램이 실행될 때 계산되는 값)와 상수(변하지 않는 값)임. 표현식이 복잡해지면 피연산자에 연산자를 포함시킴. 이때 피연산자는 자기 자신이 곧 표현식임. 표현식 a + ( b * c ) 가 있다 치자. + 연산자는 피연산자 a와 ( b * c )에 적용되는데 이 두 피연산자는 자기 자신이 곧 표현식이기도 함. C에는 매우 많은 연산자가 있음. 그 중 프로그래밍 언어가 갖는 기초적 연산자 ↓ ○ 산술 연산자 - 덧셈, 뺄셈, 곱셈, 나눗셈 ○ 관계 연산자 - "i는 0보다 크다" 같은 비교 등에 이용 ○ 논리 연산자 - "i는 0보다 크고 j는 0보다 작다" 같은 조건을 만드는데 이용..
Q: scanf()에서 %i 대신 %d를 많이 쓰는 이유는? A: %i가 10진수, 8진수, 16진수까지 인식 가능하다 보니 만약 입력값이 0으로 시작하면 %i는 해당 입력값을 8진수로 취급함. 입력값이 0x나 0X로 시작하면 16진수로 취급함. 그래서 10진수만 취급하는 %d를 많이 씀. Q: printf()가 %을 변환규격의 시작으로 인식하면, %의 출력 방법은? A: %% 이렇게 쓰면 된다. 예시 ↓ printf("순이익: %d%%\n", profit); 출력하면 순이익 10% 라고 나올 것임. Q: \t 확장비트열을 printf에서 사용하면 다음 탭로 넘어가는데, 탭 하나 당 빈칸 개수는? A: 알 수 없음. C에서 \t의 효과를 따로 정의하는게 아니라 당신이 쓰는 운영체제에 따라 결정됨. 굳이 ..

scanf 함수 The scanf Function printf 함수가 특정 서식을 따라 결과를 출력하는 것처럼, scanf도 특정 서식에 따라 입력값을 읽음. scanf의 서식 문자열은 printf의 서식 문자열처럼 일반 문자와 변환 규격자 둘다 포함할 수 있음. scanf에서 허용되는 변환들은 근본적으로 printf에서 쓰이는 변환들과 똑같음. 많은 경우, scanf의 서식 문자열은 다음 구문에서처럼 변환 규격자만 포함할 것임. int i; int j; float x; float y; scanf("%d%d%f%f", &i, &j, &x, &y); 사용자가 아래와 같이 입력했다고 치면 1 -20 .3 -4.0e3 scanf는 이 줄을 읽고, 이 문자들을 각각이 뜻하는 숫자로 변환한 후, 1, -20, 0..

3 서식 입출력 Formatted Input/Output 서식 입출력을 지원하는 함수인 scanf와 printf는 C에서 가장 자주 쓰이는 함수임. 이 둘은 아주 강력하지만 제대로 쓰기엔 조금 까다로움. 여기서 자세히 다루는건 아니고, 더 구체적인 설명은 Chap 22에서 다룸. 3.1 printf 함수 The printf Function printf 함수는 서식 문자열 + 문자열의 특정 부분에 삽입된 값을 출력하는 기능으로 개발됨. Ex.↓ result. ↓ 즉, printf 함수는 서식 문자열 + 삽입되어야 하는 값을 출력할 때 호출해야 함. printf(string, expr1, expr2, ...); 출력되는 값은 상수, 변수, 아니면 더 복잡한 표현식도 가능. printf 함수를 한번 호출할 때..

2.8 Layout of C Program C 프로그램을 일련의 토큰token*이라고 생각할 수 있음. 식별자와 키워드는 토큰임. *token: 의미를 구성하는 글자의 최소 단위 연산자(Ex. + or -), 구두점(Ex. , or ;), 문자열 리터럴 또한 토큰임. 다음 구문을 보면 printf("Height: %d\n", height); 총 7개의 토큰으로 구성됨 printf ( "Height: %d\n" , height ) ; ① ② ③ ④ ⑤ ⑥ ⑦ ①, ⑤: 식별자 ③: 문자열 리터럴 ②, ④, ⑥, ⑦: 구두점 대부분의 경우, 토큰 사이에 공간을 띄우는 것은 그닥 중요치 않음. 극단적인 경우, 띄어쓰기 하나도 없이 토큰들을 다 밀어넣어서 붙일 수도 있음. 물론 두 토큰이 합쳐져서 새로운 토큰을..