검색결과 리스트
글
다음 수식은 a와 b의 최댓값을 계싼하여 z에 저장한다.
if( a>b)
z=a;
else
z=b;
ternary operator "?:"는 이것과 구조가 비슷한 다른 방법을 제공한다.
다음의 수식에서
expr1 ? expr2 : expr3
expr1이 먼저 계산 된다. 만약 그것이 0이 아니면(참이면)expr2의 값이 계산되고 그것이 그 조건문의 값이 된다. 그렇지 않으면 expr3이 계산되고 그 값이 조건문의 값이 된다. 따라서 z는 a와 b의 최댓값이 된다.
z = (a > b)? a: b; /* z=max(a,b) */
조건문은 하나의 수식이며 수식이 쓰일수 있는 곳이라면 어디든 사용될수 있다는 점에 주의 해야 한다
만약 expr2와 expr3의 형이 다른경우에 그 결과는 이 장 앞에서 서술한 바와 같이 변환법칙을 따른다.예를들어 f가 float이고 n이 int이면 다음의 수식은 n이 양인지에 관계없이 float형을 갖는다.
(n > 0) ? f :n
위의 지정문에서 처럼 ?: 의 우선순위는 매우 낮기 때문에 조건문의 첫번쨰 수식의 괄호는 필요하지 않다. 그러나 수식의 조건부를 보기쉽게 해 주기 때문에 사용하는 것이 좋다.
조건문은 가끔 간결한 코드를 생성하게 한다. 예를 들어 다음 루프는 n개 원소를 가진 배열의 원소를 가진 배열의 원소를 한줄당 10개씩 인쇄하는데 원소 사이에는 빈칸이 하나씩 들어가고 각 행의 끝에는 행바꿈 문자가 들어가게 된다
for(i=0;i<n;i++)
printf("%6d%c", a[i], (i%10==9 || i==n-l)) ? '\n' : ' ');
행바꿈은 매 10개 원소마다 그리고 n번쨰 원소에 인쇄된다. 다른 모든 원소 다음에는 공란이 한 개 인쇄된다. 이방법은 꼼수처럼 보이지만 if-else구문을 사용하는것보다 훨씬 압축적인 좋은방법이다. 또 하나의 좋은예는 다음과 같다.
printf("You have %d item%s.\n",n,n==1 ? " " : "S");
예제 2-10 대문자를 소문자로 바꾸는 함수 lower를 if-else 대신 조건문을 써서 다시 작성하라.
*if문을 다른방법으로 하는방법을 처음 알았다!
'프로그래밍 > C' 카테고리의 다른 글
3.1 문장과 블록(Statements and Blocks) (0) | 2014.10.28 |
---|---|
2.12 우선순위와 계산순서(Precedence and Order of Evaluation) (0) | 2014.10.27 |
2.10 지정 연산자와 수식(Assignment Operators and Expressions) (0) | 2014.10.27 |
2.9 비트 연산자(Bitwise Operators) (0) | 2014.10.27 |
2.8 증가 연산자와 감소 연산자(Increment and Decrement Operators) (0) | 2014.10.27 |
RECENT COMMENT