... 베오베 게시판만 보다가 메인화면에서 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 입니다.
시험 공부하시나봅니다. 힘내세요 :)