게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
아래 질문 글에 대한 답변입니다. (for 문)
게시물ID : programmer_2805짧은주소 복사하기
작성자 : 유산균100
추천 : 0
조회수 : 268회
댓글수 : 0개
등록시간 : 2014/04/21 23:41:21
... 베오베 게시판만 보다가 메인화면에서 for문 질문이 올라온 걸 보고 부랴부랴 가입했네요! 

올리신 코드 해설 먼저 해드릴게요. 

#include <stdio.h>
main()
{
   int a, b, c;
   for (a = 1, b = 1, c = 1; a <= 20, b <= 20, c <= 20; a++, b++, c++) 
      if (c = a*a + b*b){
         printf("%d = %d^2 + %d^2", c, a, b);
         printf("n");
      }
      else
      {
         printf("입력값 오류n");
      }
}
 
출력 결과
----------------------
2 = 1^2 + 1^2
8 = 2^2 + 2^2
18 = 3^2 + 3^2
32 = 4^2 + 4^2
----------------------

이 예제에서 쓰인 for 구문에 대한 해설
for (a = 1, b = 1, c = 1; a <= 20, b <= 20, c <= 20; a++, b++, c++
1. 초기화 
a = 1, b = 1, c = 1; 초기화. 맞긴 한데..., 문제를 위한 문제이다보니 이렇게 작성하신 것 같아요. 
이런 식으로 프로그램 작성하실 일은 아마 없을 겁니다.
말로 쓰자면 "하나의 반복문 안에서 3개의 변수가 동시에 변하면서 무언가를 할거예요!" 라는 거예요.
이상하지요? 

2. 조건부
a <= 20, b <= 20, c <= 20;
조건부를 이렇게 사용하는 건 엉터리예요.
위의 조건부는 마지막의 조건만 검사하게 됩니다.
고쳐쓰면 위 for문의 반복 조건은 
c <= 20;
이렇게 되는 거죠.
그래서 마지막 출력 32 = 4^2 + 4^2 에서 c가 32이므로
위의 조건을 만족하지 않아서 프로그램이 종료됩니다. 

 
입력값 오류에 대해선 밑의 글 댓글에서 다른 분께서 설명해주셨습니다.
C를 포함한 많은 '프로그래밍 언어' 에서 
'=' 는  대입(assign)을,
'=='는 비교(compare)를 의미하는 연산자입니다. 

그래도 입력값 오류가 안 뜨는 이유는 if(숫자)의 조건이 어떻게 처리되는지 몰라서 그런 거예요.

어떻게 배우셨는지 모르겠지만,
if(조건){
    참인경우
}
else
{
     거짓인경우
}

에서 조건이 참이 되는 경우"0이 아닌 모든 수"입니다.
if(c = a*a + b*b) 라는 구문은 두 줄로 풀어 쓰면 
c = a*a + b*b; //우선 대입하고 
if (c){ // C의 값을 판단
   ...
}
else
{
   ...
}

이 되는거죠. 32는 0이 아니므로 true 입니다. 그래서 값을 출력하고 끝나게 되는 거예요. 

이거 하나만 기억하세요. 
프로그램에서 
true = 1, false = 0 이 아니라 
true = 0이 아닌 모든 수, false = 0 입니다. 

시험 공부하시나봅니다. 힘내세요 :) 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호