어느 언어든 가장 중요한 Loop에 대하여 공부하는 시간이다. 다른 언어로도 몇번 접해보았지만, C언어로 접해보기는 처음이다. 우리 같이 공부해보도록 하자.
Loop문에 필요성을 책에서는 바로 알려주고 있다.
이후 갑자기 1부터 10,000까지의 숫자의 합을 계산해 달라고 하니, Psi는 친구를 잘못만난거 같다.
컴퓨터의 탄생 이유는 여러가지가 있겠지만, 그 중 제일 중요한 이유는 바로 계산(computing)이다. 최초의 컴퓨터라고 알려진 ENIAC은 탄도의 발사표를 계산하는 역할을 위해 개발되었다. 첫째는 계산이면 두번째 이유는 바로 노가다(즉 반복연산)을 위한것이다.
인간에게 저러한 노가다성 작업을 시키면 일단 험한말이 먼저 나갈것이나, 컴퓨터는 그러지 않다. 묵묵히 명령된 값에 대해 계산을 실행 할 뿐이다. 이러한 노가다성 작업을 대신 해주는 컴퓨터에게 어떻게 코드를 입력해야 하는지 예제를 같이 보며 공부해 보자.
코드 입력
코드 출력
코드를 잘 작성하여 잘 컴파일 하였다면, 위와같은 출력값이 나올 것이다. for 문의 기본 구조는 아래와 같다.
이후 반복할때마다 1씩 i값이 증가하고 i값이 20보다 작을 때까지 반복문이 반복되는 구조이다.
첫번째 초기식에는 제어변수가 초기화 된다. 즉 for문은 반복문이고 이러한 반복문은 얼마나 반복을 해야 될 지 알아야 한다. 반복문이 무한히 반복 된다면 다양한 오류들이 발생 할 것이다. 따라서 이 제어변수는 가장 기본조건이라 할 수 있다.
for문으로 하여금 제어변수가 특정한 조건을 만족할 때에만 반복을 계속하게 한다는 것이다. figure.3에서 i값에 0을 대입하여 처음 i의 값을 0으로 한다는 것이다 (초기식 이니까)
두번째 조건식은 제어변수인 i가 만족해야 될 특정한 조건이다. 위 예제에서는 i가 20 미만(i < 20)이라는 조건식이 있고, 이 값이 true일 때만 그 '일'이 수행된다. 그 '일'은 중괄호 안 내용들이다.
마지막으로 증감식은 1회 실행 시 i의 값은 어떻게 되는냐를 말한다. figure.3에서 처럼 i++이면 한번 실행할 때마다 i의 값을 1 증가 시킨다는 것이다. 반대로 i -=2이면 한번 실행될 때마다 i의값이 -2가 된다.
즉 figure.3은 i의 초기값을 0으로 대입하고, i값이 20미만일때까지 그 '일'을 수행한다. i값은 for문을 반복할 때마다 1씩 증가한다.
figure.4는 1부터 19까지의 합이다.(Psi에게 어서 이 코드를 갖다주고 싶다. 1부터 10,000까지 노가다 하지말라고) 이를 성공적으로 컴파일 한다면, figure.5같은 결과가 나온다.
figure.4를 자세히 보면, i값을 초기식에서 0으로 대입하고, 값이 20미만일 때까지 중괄호 안 명령들이 수행되며, i값을 수행 전 1증가하는 구조이다(++i이니까)
중요한 부분은 sum = sum + i;라는 코드이다. sum이라는 변수의 i의값이 계속 더해지는 구조이다. 즉 sum에 sum+i값이 대입 되는 것이다. 그래서 sum에 0부터 19까지의 값이 더해지는 것이다. 이를 수식으로 풀어보면 figure.6과 같다.
자 마지막으로 Psi에게 어서 이 코드를 가져다 줘야겠습니다. 1부터 10,000까지의 합은 어떻게 구할까요?
(이건 저도 공부를 위해 직접 작성하였습니다)
#incldue <stdio.h>
int main() {
int i, sum = 0;
for (i = 0; i <= 10000; ++i {
sum = sum + i;
}
printf ("Sum from 1 to 10000 : %d \n", sum);
return 0;
}
Psi는 친구를 잘못 둬 고생이네요. 덕분에 새로운 것을 배웠으니 그나마 다행이길...
마지막으로 for문 응용을 보여드리며, for문 공부를 마무리 해보겠습니다. 다음번에는 break문으로 찾아오겠습니다.
(먼저 해석해 보시고, 해석이 잘 안되시면 아래로 내려서 해석을 보시면 됩니다)-
figure.8은 여러가지 과목에 대한 점수를 입력 받아, 최종적으로 여러 과목의 평균 값을 출력하는 프로그램 입니다.
처음부터 살펴보면 처음은 각 변수 값을 선언하는 것입니다. 이후 과목의 갯수를 입력하기 위해 scanf 함수를 사용합니다.
이후 각 과목 점수를 입력하기 위해, i의 초기값은 1이고, i가 subject 수보다 적거나 같을때까지 1씩 증감시키며 for문을 수행한다. figure.9를 보니 과목은 4개니까 4번 for문이 수행 되었음을 알 수 있습니다. 그리고 각 과목에 점수를 순서대로 입력하면, score 값이 대입이 되고, 그 값은 sum_score에 대입된다. 그리고 다시 for문 반복시 새로운 score 값이 대입되고 아까 과정을 반복합니다. 마지막으로 4개의 과목에 총 점수를 나누어 평균값을 구하여 출력합니다.
'C language(c언어)' 카테고리의 다른 글
Switch문 (2) | 2024.01.29 |
---|---|
Loop 반복문 (while문) (do-while문) (0) | 2023.11.03 |
Loop 반복문 (break) (continue) (0) | 2023.09.11 |
Number and Digit (수와 숫자) 십진법,이진법,16진법 (1) | 2023.09.01 |
C language(c언어) comment(주석 처리) (0) | 2023.08.31 |