CAFE

C 프로그래밍

c언어 삼항연산자 중첩사용

작성자별은빛나고|작성시간13.01.06|조회수1,717 목록 댓글 0

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=164559653

 

#include <stdio.h>

int three_comp(int a, int b, int c)
{
       return ( a > b ? a :
                    b > c ? b : c);

// 아랫줄에 괄호를 써줘도 결과는 마찬가지

//   return ( a > b ? a :

//              ( b > c ? b : c));
}

 

void main()
{
 int iValue = 0;


 iValue = three_comp(10, 20, 30);
 printf("10 20 30 : %d\n", iValue);

 

 iValue = three_comp(10, 30, 20);
 printf("10 30 20 : %d\n", iValue);

 

 iValue = three_comp(20, 10, 30);
 printf("20 10 30 : %d\n", iValue);

 

 iValue = three_comp(20, 30, 10);
 printf("20 30 10 : %d\n", iValue);

 

 iValue = three_comp(30, 10, 20);
 printf("30 10 20 : %d\n", iValue);

 

  iValue = three_comp(30, 20, 10);
 printf("30 20 10 : %d\n", iValue);

}

 

  

 

아래 링크를 클릭한 후 10번을 읽어보세요.

10. 가급적이면 조건 수식 안에 중첩하여 다시 조건 수식을 사용하지 않는다.

http://cafe.daum.net/c-study/4tdN/11

 

풀어 쓰면 이런 말이 되겠죠.

if (a > b) return a;

else {

    if (b > c) return b;

    else return c:

}

즉 a가 크면 뒤를 비교하지도 않고 바로 그 값을 리턴하고 조건문을 탈출합니다.

만약 위 프로그램 내에서 아래의 표현처럼 괄호를 써줬다 하더라도

그 괄호 내의 연산을 수행하기 전에 b값만 우선 비교하고 b값보다 크면 탈출하는 구조인가 봅니다.

그것이 그 함수를 제작한 사람의 실수인지 c의 특성인지는 알 수 없지만 현실적인 문제이니

위와 같이 3개의 크기를 상호 비교하는 용도로는 쓰지 않아야 하겠습니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼