c 언어 반복문 이해하려면 어떻게 해야하나요

dkanjel의 이미지

지금 c언어 공부 중인 학생입니다
그런데 반복문 공부 중인데 이해하기가 쉽지 않네요
제가보기에 c언어는 반복문 잘해야 할 것 같은데
이해를 돕는데 좋은 방법 없을까요
답답해 죽겠습니다

가치투자왕의 이미지

4주동안의 조정기간를 거쳐 반복문를 보신후

정 안되시면 반복문 책를 가지고 법원를 방문하세요 ^^

dwfree74의 이미지

콘솔에서
cout이나 printf 로 과정을 일일이 출력해서 눈으로 확인한 다음
(범위를 좁히세여... 5나 10 정도로 )
하면 더 확 와 닿지 않을라나요...^^;

아니면 예전에 포트란 숙제 할때처럼 루프 문안에다가
각 과정의 결과값을 파일로 저장하는 거에요.. 로그 기록하는 것 처럼..
그런 다음에 소스와 결과를 보면서 한단계씩 비교해서 보는 것도 괜찮죠..

kldp.net 에 많은 프로그래머들이 동참하기를 바라며...^^

사랑천사의 이미지

어떤 반복문을 쓰실지 잘 생각 해 보세요... while, for, do -- while 등... 여러가지 방법이 있겠죠. 그리고 그 조건을 조정 하는 방법도 알아야 되는데 보통은 조건을 제시하기 위해서 정수를 쓰죠...

#include <stdio.h>
 
// 1부터 10까지 출력
 
int main (void)
{
  int c = 0;
 
  while (c < 10) {
    printf ("%d\n", c + 1);
    c++;
  }
}

이대로 하면 1부터 10까지 출력을 하게 됩니다.

우선 WHILE를 보자면 ()안에 평가 조건이 들어 갑니다. c 라는 정수형 변수가 10보다 작은 값을 갖질 때만 실행이 되죠. 물론 이건 WHILE가 실행 조건을 판단 할 때 결과가 참일 때만 실행 되게 되어 있기 때문입니다. 다만 저기다가 !를 앞에 넣어 주면 절대 실행이 안 될 겁니다. 흠흠흠... 왜? 0은 10보다 작죠. 하지만 !는 그 반대의 조건일 때 참임을 말합니다. 이건 다 아실 거고요. 그럼 10과 같거나 10보다 커야 합니다. 그러나 루프 안에 c==;이 있으니 절대로 한번도 실행 되지 않는다면, 10 이상의 숫자를 강제로 먼저 대입 하지 않는 이상 실행 될 수 없겠죠.

WHILE의 경우 실행문을 실행 하기 전에 먼저 조건을 분석 해 봅니다.

int c = 0;

이었으니 분명히 10보다 c가 일단은 작습니다.
WHILE에 (c < 10) 인데 이게 참이죠...
그럼 {와 }안의 문구를 실행 합니다.
근대 printf에 주워진 인자가 c + 1 입니다. 이건 왜 그런지 아시죠? c는 분명히 0이죠. 그러나 원하는 출력 값은 1부터 입니다. 그럼 출력 할 때 c에 1을 더해서 %d에 대입 하게 되면 1이 나오겠죠 음. 그렇게 해서 출력 하고 나서...
c++; 합니다. 이건 현재 c에 1을 올린 수를 대입 하라는 겁니다. 바꿔서 말하면 이거죠.

c = c + 1;

그렇게 한번 실행 되고 나면 다시 조건 분석 단계로 돌아 갑니다. 어차피 {와 } 안의 내용은 printf와 c++; 이게 다니까 실행 하고 나면 다시 조건 분석으로 가는 거죠. 그래서 결과적으로 참이 아닐 때 까지(즉 조건이 거짓이면) 루프를 멈춥니다. 어쨌든 계속 설명 하면 이렇습니다.
c++; 했으니 이제 1이 되었겠죠 c는. 조건 판단 단계로 다시 이동 해도 역시 결과는 참입니다. 1도 10보다 작으니까요. 그럼 또 실행 하게 됩니다. 끝에는 꼭 c++;이 실행 될 거고 그럼 이제 c는 2가 됩니다. 이렇게 되면 아직도 참이니까 또 실행 되고 3 4 5 6 7 8 9 까지 실행 됩니다. 그 후에 마지막 9에서 c++; 하면 이제 이건 실행이 안 되죠. c가 10 이니까 10과 같은 것이지 10보다 작지는 않습니다. 그럼 조건에 안 맞으니까 루프에서 탈출 합니다.

고등학교 수학에 보면.. 알고리즘에 대한게 있습니다... WHILE를 아래와 같은 알고리즘으로 설명 할 수 있겠죠. 아... 저는 시각에 장애가 있는 시각장애인 입니다. 그래서 실행도 같은걸 그리진 못 합니다. 양애 바라고요.

--------
x에 1을 대입 한다
x의 값이 10 이하(<=)이면 x에 1을 더한다.
x의 값이 10을 초과할 경우 실행을 그만두며, 10을 초과 하지 않는 경우 다시 위 단계로 간다.
--------
위의 알고리즘데로 종이에 써 가면서 간단학 풀어 보세요. 어떻게 루프가 도는지 알기 쉬우실 겁니다.

--
1:x = 1
2:if (x <= 10) x = x + 1 && goto 2
3:else exit

/*
x = 1
R:x = 1
x <= 10? YES
x = x + 1
R:x = 2
x <= 10? YES
x = x + 1
R:x = 3
x <= 10? YES
x = x + 1
R:x = 4
x <= 10? YES
x = x + 1
R:x = 5
x <= 10? YES
x = x + 1
R:x = 6
x <= 10? YES
x = x + 1
R:x = 7
x <= 10? YES
x = x + 1
R:x = 8
x <= 10? YES
x = x + 1
R:x = 9
x <= 10? YES
x = x + 1
R:x = 10
x <= 10? YES
x = x + 1
R:x = 11
x <= 10? NO
EXIT
*/
--
으음.. 간단히 이런 거죠. FOR의 c = 0(초기화), c < 10(조건 분석), c++(실행문 후의 환경 조절 작업) 등의 일을 한꺼번에 ()안에 제시해서 좀 더 루프를 간단히 쓸 수 있게 해 놓은 형태입니다.

설명을 맞게 한 건지 모르겠습니다만, 도움이 되셨으면 합니다.
이여송 사도요한 드림.
PS:이거 왠지 BBCODE가 안 먹히는 느낌.. 다시 입력 했습니다 윽.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!

사람천사

dkanjel의 이미지

ysnglee2000 님 답변감사합니다 다른분들도요
다시 한번 읽어 봐야겠네요
그리고 반복문 루프 예제로만 되어 있는책 있을까요?

사랑천사의 이미지

책이라.. 후훗. 잘 모르겠네요. 저는 책을 보고 배운게 아니라 스승님 두 분을 통해서 배웠습니다. 저에게는 훌륭하고 정말 인생에 있어서도 많은걸 주신 분들이죠... 뭐 그분들은 교제를 쓰시거나 그러시지도 않았기 때문에 역시 책에 대해선 제가 아는 바가 없습니다.

뭐 다만 while, do -- while, for의 차이는 이렇습니다.
while: 실행 전에 조건 판단식을 수행하여 조건이 참일 경우 실행 한다.
do -- while: 최소한 한번은 실행 된다. 이유는, 실행을 하고 조건을 검사 한다. 그렇기 때문에 주워지는 조건이 참이 될 수 없는 경우라도 절대적으로 한번은 실행 되는 루프문이다.
for: 조건 판단에 필요한 변수들을 미리 초기화 할 수 있고, 조건 판단을 하며, 조건 변조 과정까지 모두 한꺼번에 최초의 for문 실행 조건 제시시에 지정이 가능하다. 간단히 설명하면

for (c = 0; c &lt; 10; c++) {
  printf ("%d\n", c + 1);
}

이건 제가 위에 쓴 예시를 간단히 바꾼 겁니다. for문으로. 이걸 설명 할 때 for문에 조건부가 2개 실행부가 1개 있다고 볼 수 잇는데 책 보면 보통은 위의 세 부분을 모두 조건부 라고 하더군요. ... ; ... ; ... 이 부분... 첫번째는 조건문이 실행될 때 최초로 평가 되며, 두번째 부분은 매번 실행 전에 평가 되고, 마지막 부분은 매번 실행 후에 평가 된다 라고 말 할 수 있습니다. 제가 책을 아무리 안 봤어도 대부분 책이 이정도 설명을 한다고는 알고 있습니다. 아마 제가 말 한 내용 비슷한게 for문에 대해서 나올 것으로 예상 됩니다만 다르겠죠. TURBOC.HWP였나? 아무튼 그 파일을 어디서 구해서 읽었는데(재미삼아서. 아직도 가끔 그냥 읽곤 합니다.) 저런 내용이 나왔던 것 같군요.

그리고 do -- while 의 경우

do {
  printf ("출력\n");
} while (0);

이런 경우 저걸 그냥 while로 했다면 절때 실행 될 수가 없습니다. 그러나, do -- while 형식이기 때문에 실행이 됩니다. 0이란건 무조건 거짓이란 소리가 됩니다. while에는 !feof (fp)와 같은 조건을 제시해서 파일의 긑인지 검사 해서 파일 읽기를 멈추게 한다거나 하기도 합니다. 말 그대로 괄호안의 조건이 참이면 다음으로 계속 가고 아니면 멈춘다 이거죠. 보통은 숫자로 장난을 많이 치지만 while (1)와 같이 하는 경우도 있습니다. 그리고 그 안에서 적절히 break나 continue로 제어를 하기도 하죠. 물론 이런 경우는 while 내부에 if가 잇어야 할 겁니다.

아무튼 도움이 되실지 모르겠군요. 책은 아는게 없고, 그냥 제가 아는거만 다 적습니다. (실력도 없으면서 참 잘도 떠드는 구만.. 풋.)

그럼 행복하세요.
이여송 사도요한 드림
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!

사람천사

dkanjel의 이미지


답변 감사

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.