츄잉~ chuing~
츄잉 신고센터 | 패치노트 | 다크모드
공지&이벤트 | 건의공간 | 로고신청N | HELIX
로그인유지
회원가입  |  분실찾기  |  회원가입규칙안내
[C언어] 8.C언어 기초(5)
팟독 | L:0/A:0
278/450
LV22 | Exp.61% | 경험치획득안내[필독]
추천 0 | 조회 5,211 | 작성일 2014-11-22 21:19:21
[서브캐릭구경OFF] [캐릭컬렉션구경OFF] [N작품구경OFF]
*서브/컬렉션 공개설정은 서브구매관리[클릭]에서 캐릭공개설정에서 결정할수 있습니다.
  [숨덕모드 설정] 숨덕모드는 게시판 최상단에 위치해 있으며 언제든 설정할 수 있습니다.

[C언어] 8.C언어 기초(5)

 부제
 군대갑니다...

 이번에는 제어문 중 반복문을 할 겁니다...

 반복문이란 매우 간단합니다. 조건이 참이 될때까지 반복해서 수행해주는 명령어인거죠.

 반복문의 문법에는 for 와 while 이 있습니다. 

 for와 while의 차이는 for는 반복 수행 횟수가 정해져있을때 while은 반복 수행 횟수가 정해져있지 않을 때에 사용합니다.
 라고 합니다만 실제로 for로 while의 역할을 못하는것도 아니고 while로 for의 역할을 못하는것도 아닙니다.

 for문

 for는 기본적으로 for(변수초기화 ; 반복 조건 ; 변수 증가 방법)으로 사용이 되는데요.
 여기서 중요한건 각자 조건의 사이에 콤마(,)가 아닌 세미콜론(;)을 사용한다는 점이죠.

 예를들어서 위에서 i라는 변수를 선언했다라고 가정을 하였을 경우에 
 for(i=0;i<9;i++)  <- (여기서 i=0이 변수초기화 , i<9 반복조건 , i++이 변수 증가 방법입니다.)
{
    printf("%d",i);
}
 라고 코드를 적고 실행을 하였다면 0부터 8까지 순서대로 출력이 되겠죠.
 여기서 i=1이라고한다면 1부터 출력이되겠죠.
 
혹은 for(i=9;i>0;i--)
{
    printf("%d",i);
}
 라고 코드를 적고 실행을 한다면 9부터 1까지 역순으로 실행이 됩니다.

for문에 다중 for문이라고 for문안에 for을 삽입하는 방식이 있습니다.
다중 for문을 제일 처음 배울때 하는게 구구단 만들기인데요.
구구단을 예제로 설명드리겠습니다.
for(i=2;i<=9;i++)
{
    for(j=1;j<=9;j++)
    {
        printf("%d*%d=%d,i,j,i*j)
    }
}
실행을 하면 2단부터 9단까지를 출력하는데요. 왜 그러냐면 i는 8번 j는 9번을 실행합니다. j의 조건이 완료되고 j의 반복문을 빠져나와야만 i가 1 증가합니다.
그러므로 i가 2일때 j는 9번을 실행하고 i가 3일때도 j는 9번을 실행하는거죠. 그렇기 때문이 총 8*9 72번의 printf를 실행합니다.

while문

while문은 일반 while문과 do while문이 있는데요. 둘의 차이는 각자 설명하며 말해드리겠습니다.

일반 while문은 while(조건) 처리구문 으로 사용합니다.
예제를 보여드리자면
i=0;
while(i<9)
{
    printf("%d",i)
    i++;
}
이런식이지요.
위의 for문과 같이 0부터 8까지 출력하는 반복문입니다.
while문에서의 중요한점은 조건이 증가 혹은 감소하는 조건등이 for문과는 다르게 처리구문에 들어간다는 점이죠.
그리고 for문과 다르게 시작할때 초기화를 하지않기때문에 사용 전 초기화를 해주어야합니다.

do~while문은 do 처리구문 while(조건) 으로 사용됩니다.
이 구문이 일반 while문과 다른점은 일반 while문은 조건이 처음부터 맞지않을때에는 반복문의 처리구문을 한번도 실행하지않지만 do ~ while문은 조건이 처음부터 맞지않더라도 조건문이 마지막에 있기때문에 처리구문을 한번은 실행해줍니다.
do~while문도 예제를 보여드리면
i=0;
do
{
    printf("%d",i)
    i++;
}
while(i<9)
물론 결과는 위의 for이나 while문 같이 0~8까지 출력이 됩니다.

반복문을 사용할때 조심해야할점이 있습니다. 
for문과 달리 while문은 얼마나 실행될지 모르는 경우에서 실행하는 경우가 많기때문에, for문보단 while문에서 자주 나오는 오류입니다. for문에서도 안나오는건 아닌데요.
무한루프라고 불리는 오류입니다. 
만약 반복문의 조건이 항상 성립하게 만들어버리면 반복문이 계속 끊임없이 실행되는 오류인데요.
예를들어 for(i=1;i>0;i++) 이런식 혹은 while(i<10)을 했는데 조건문에 i++등을 안넣어줬다던지 할때 나오는 오류입니다.
for에서는 i는 0보다 클때 실행인데 i는 계속 증가하는데 0보다 작을 수 없으니 계속 실행되겠죠.
while(i<10)의 경우에는 i가 10보다 작고 조건내에 i++이 없다면 i가 증가하지않으므로 계속 실행이 되겠지요.

허나 이 무한루프를 이용하여 코딩하는 방법도 있습니다. 그러기위해선 아래 2가지의 명령어를 익혀야합니다.

 break와 continue

그리고 반복문을 사용할때 중요한 명령어가 2가지 있습니다. break와 continue인데요.

break의 경우에는 그 구문이 실행될때 현재 실행되고 있는 반복문을 강제로 빠져나옵니다.
continue의 경우에는 그 구문이 실행될때 현재 실행되고 있는 반복문의 다음차례를 실행시킵니다.

 break

C언어는 말로만 설명하면 이해하기 힘드니 무한루프예제로 보여드리겠습니다.
i=0;
while(1) <- C언어에서 0을 제외한 모든수는 참입니다. 그러므로 while은 조건이 참으로 인식하기때문에 무한루프가 실행이 됩니다. 
{
    if(i>10)
    {
        break;
    }
    printf("%d",i);
}
만약 i가 10보다 크다면 if의 조건이 참이므로 break를 실행하게되고 그럼으로써 의도한 무한루프를 빠져나오게되는 방식입니다.
위의 예제를 보시면 break문이 왜 필요해? 라고 할수 있기때문에 무한루프와 break문을 제대로 활용한 예제를 하나 적어보겠습니다.
int i;
while(1)
{
    scanf("%d",&i)
    if(i==100)
    {
        break;
    }
        printf("%d",i);
}
이런 예제인데요.
반복문이 실행될때 사용자가 숫자를 입력하게하고, 만약 그 숫자가 100이라면 반복문을 끝내고 아니라면 그 숫자를 출력하는 방식입니다.

그럼 for문은 의도적인 무한루프가 안되는가? 라는 의문을 가질수도 있는데요. for문도 물론 무한루프가 가능합니다.
for문에서 조건없이 for( ; ; )라고 실행을 하면 무한루프가 될겁니다.

 continue

for(i=0;i<=9;i++)
{
    if(i%3==0)
    {
        continue;
    }
    printf("%d",i)
}
라고 코딩을 하면 실행을 하면 3의 배수를 제외한 수만 출력이 되는 소스코드가 만들어집니다.
continue는 break와 달리 현재의 반복처리만을 중지시키기때문이죠.

반복문을 학교나 학원에서 제일 처음배우면 반복문에 익숙해지라고 내주는 숙제가 몇가지 있습니다.
1.구구단만들기
2.마름모꼴만들기,피라미드만들기 등등이죠.

여기까지 어느정도 익숙해졌으면 rand라는 랜덤함수를 이용하여 컴퓨터와 간단한 게임도 가능합니다...
(i=rand() 이런식으로 사용하는 함수입니다. 잘 이해가안되면 검색해보면 됩니다. 매우 쉽습니다.)
뭐 컴퓨터가 생각하는 홀짝맞추기하던가...
옛날에 야구게임이라고 출제자가 세자리숫자 생각을 한뒤 맞추는사람이 숫자말하면 스트라이크인지 볼인지 알려줘서 출제자가 생각해낸 숫자를 맞추는 게임이 있었는데요... 이제 직접 코딩짜서 컴퓨터랑 할 수 있습니다. (이 야구게임에 규칙을 추가해 더욱 세세하게 만든게 더지니어스:룰브레이크에서의 진실탐지기입니다.) 
 
 
이 진실탐지기라는 게임도 만드려하면 만들 수 있습니다.
물론 컴퓨터가 자신의 숫자를 맞추는걸 구현하는게 현재의 상황에선 힘들겠지만... 자신이 컴퓨터의 숫자를 맞추는것만은 구현이 가능합니다.
 
혹은 내기같은것을 할때 높은 숫자를 뽑는 내기같은것도 구현이 가능하구요.
문자로 주사위도 구현이 가능하고... 여기까지 배웠으면 매우 다양한게 구현이 가능합니다..
 
 
 
 
 
프로그래밍책을 사셔서 보셨을 때 파일입출력을 제외하고 모든 프로그램의 기초가 여기까지입니다.
(C언어 기초가 여기까지란게 아닙니다. 여기까지가 모든 프로그래밍의 공통점! 어떤 프로그래밍기초 책을 사더라도 여기까지 명령어만 다를뿐 하는행동은 같습니다.)
여기까지만 알고있어도 어떤 언어든 기초까지는 배우기 수월해집니다. 명령어만 다르지 하는행동은 똑같으니까요.
 
현재 대부분의 C언어 기초책은 여기서 위에서 말한 파일입출력과 약간의 자료구조(배열,구조체,포인터)를 추가한게 대부분입니다. 
 
아무튼 쉽게 말해서 여기서 자료구조+그래픽을 공부하기 시작하면 나름 프로그래밍 고급과정으로 들어가게되는거지요.
게임 프로그래밍의 기초가 테트리스라고 말하는데... 완전 기초적인 테트리스는 거짓말 하나 안보태고 여기서 그래픽만 공부하고 몇가지 명령어만 더 익히면 만들 수 있습니다. 
그리고 약간 고급스러운 테트리스는 약간의 자료구조를 익히면 되니 여기서 그래픽+자료구조를 익히면 만들 수 있게 되는거지요.
 
 
참고로 전 게시글에서부터 적었고 이 게시글 시작할때 적었듯이 제가 11.24 입대를합니다... 현재 글을 쓰는 시간으로 따지면 2일후...에 입대합니다... ㅅ.ㅂ...
ㅅ...ㅂ.... 친구들 입대하는거 보면서 웃을때 난 입대안할줄알았는데...
그리고 친구들이 제대를 하는걸 구경도 했는데 이제 걔들한테 제가 놀림을 당하고있습니다.
 
제가 신체검사를 하면서 팅기지 않고 입대에 성공한다면....
저는 나름 널널한 곳을 갔기때문에 블로그를 운영하려면 충분히 할 수 있을것 같습니다만... 잘모르겠네요.
같은 곳에 간 사람 중 어떤 사람은 일주일에 두세번씩 네이버카페 들어가고있던데...
 
여기까지 뭐 보신사람이 얼마나 있을지는 모르겠지만... (내 생각엔 20명보면 많이 본거...)
C언어를 조금이라도 배우신분은 별 무리없이 그냥 보셨을꺼고 C언어 자체를 모르셨던분은 그냥 검은건 글자요 하얀건 여백이로다하면서 봤을거라고 생각됩니다.
(솔직히 아무리 C언어 자체가 기초로 독학하기 좋다라는 말을 하곤 하지만 까고 말해서 JAVA보다 컴퓨터쪽에 지식이 없으면 독학하기 힘듭니다. JAVA도 아예 지식없으면 하기힘든데요 뭘...)
원래 그렇게 보는게 정상이구요... 여기까지가 프로그래밍언어의 첫 고비라고 할 수 있습니다.(C언어 수강생이 30명일 경우 기본 15명정도는 여기까지 따라옵니다..많으면 20명정도..)
 
프로그래밍언어는 처음 글에서 말했다시피 계속 코딩하고 수정하고 코딩하고 수정하고 코딩하고 수정하고가 제일 중요한 작업입니다.
검은건 글자요 하얀건 여백이로다 라고 느끼시는분들도 제가 적은 예제 한번씩 따라 코딩해보고 응용해보고 스스로 피라미드같은걸 만들어보고 문제를 만들어서 풀어보고 하다보면 여기까지는 쉽게 이해가 될꺼라고 생각합니다.
 
이걸 시작할때 C언어의 꽃이라는 포인터까지는 적는게 목표였고.. 자료구조는 반응보면서 적을까했는데... 조만간 적고 싶긴한데 힘들꺼같네요...
 
여기까지 보신분이 얼마나 있을지는 모르겠지만 읽어주셔서 감사합니다. (위에서 말했다시피 제 예상은 3명정도나 보지않을까 싶네요 솔직히 많이봐야 20명)
신체검사에서 팅기지않는다면 2~3개월 후 뵙겠습니다...
 
 
개추
|
추천
0
신고
    
  [숨덕모드 설정] 숨덕모드는 게시판 최상단에 위치해 있으며 언제든 설정할 수 있습니다.
우마루쨩
ㅋㅋ 군대라니~~~~ ㅋㅋㅋ어떨지 모르겠네요 신병들이 싸지방 눈치 안 보고 가도 될런지ㅋㅋㅋ 부대랑 선임들, 간부들 만나는 운에 따라 다르겠죠 뭐ㅋㅋ
2014-11-23 11:56:38
추천0
[L:42/A:188]
물트라
잘 보고 가요. 자대에서도 C언어 계속하실 계획이신가요?
또 봤으면 좋겠네요. 군대 잘 갔다 오세요.
2014-11-23 15:58:53
추천0
ㅋ라운제과
자바가 C보다 쉽다고 하는 이유는 쓰레드가 포인터보다 쉬워서가 아닙니다. 또한 포인터 때문에 C를 포기하는 사람들은 본 바가 많지만, 자바 배우는데 쓰레드 때문에 포기를 했다라는건, 들어본적이 없군요. 쓰레드가 자바의 대표? 이 역시 들어본적이 없습니다. 자바의 대표는 OOP 다. 라고 설명하시면 모르겠는데, 쓰레드라뇨. 이전부터 꾸준히 느꼈던 것이지만, 마지막에 신뢰도가 쭉 하락하는 기분입니다. 자바가 쉬운이유는 첫번째로, C를 배우고 자바를 배우는 분들이 많기때문이고, 두번째로 시스템 레벨까지 생각하지 않아도 되기 때문입니다. 하지만, 자바를 처음으로 딛는 사람들은 쉽다고 할 언어는 아닙니다. 케바케입니다만, (무엇을 사용하냐의 문제지만)실무 개발자 분들에서는 오히려 자바가 어렵다는 분들도 계시기도 합니다.

첫 글부터 느꼈지만, 이제와 군대가신다니 말씀드립니다. 이후 연재하실 것 같지도 않고요. 너무 일기 같습니다. 자기가 배운거 조금 정리해놓은 정도인가요. 개념에대한 명확한 정의나 정리보다는 자신이 이해한 대로 설명하는 느낌이 다분해요. 도움이되는 사이트나, 예제 같은 조언이 담겨있는것도 아니고요. 그렇다고 개념에 충실한 내용도 아니고. 츄잉에서 뭐 대단한 글을 기대하는 것은 아닙니다만, 연령대가 낮기 때문에 이정도로도 "우와, 뭔지 모르지만 컴퓨터 언어임! 신기함!" 하는 느낌은 들것 같습니다. 하지만 그런 겉햝기가 전부인 글입니다. 왠만하면, 본인 공부에 더 충실히 하시고 글 쓰시길 바랍니다. 물론 이런 컨텐츠가 츄잉에는 없었기 때문에, 그런 의미로 정말 좋은 도전이라고는 생각합니다만... C언어를 모르는 사람이나, 시작한 사람들이나 이 글들에서 무엇을 얻어 갈 수 있을 지를 생각하면- 아무것도 없다고 느껴지니까요.
2014-11-23 22:58:14
추천0
우마루쨩
엌ㅋㅋㅋ 이분 너무 정곡이시닼ㅋㅋㅋㅋ
글쓴분 지금 군대가서 자삭도 못한다그여ㅋㅋㅋㅋㅋㅋㅋ
2014-11-28 11:53:52
추천0
팟독
다 인정합니다.
제가 적으면서 아마 전공자나 좀 공부한사람이 보면 아마 이렇게 말할꺼다라고 생각한걸 그대로 말씀해주셨네요.

사실 진짜 거의 블로그 쓰듯이 썼습니다.
제가 컴퓨터 전공이긴하지만 프로그래밍전공은 아니고,
이 글을 적으면서 그냥 제가 알고있는걸 한번 더 정리하자 라는 생각으로 시작했고, 그렇기때문에 저의 주관적인 생각이 매우 깊게 담겨져있습니다. 그렇기때문에 제가 이해한 방식 그런걸로 글을 적었구요.
일기를 쓴듯하다... 라고 말씀하셨는데 정곡을 찌르셨습니다. 진짜 블로그쓴다고 생각하고 일기처럼 쓴게 사실입니다.

제가 이걸 시작하게 된 이유가 제가 프로그래밍 전공자가 아니기 때문에 일단 현재까지 알고있는걸 빠르게 쓴뒤에 현재까지 배운거 이상의 C언어를 공부하면서 그걸 써가는 방식으로 쓰려고했습니다. 그럴려고했는데...

솔직히 제 생각에도 아 이건 좀 많이 빈약하다라고 느낄때가 많았습니다.
이 점에 대해서는 죄송하다고 말씀드릴수밖에없습니다.
저도 글을 적으면서 제가 부족하다는걸 많이 느꼈고 공부하면서 차차 수정해나가야지하고 생각을 했는데 갑작스런 입대크리를 받았네요.

그냥 이 글을 유저분들이 보면서 느끼길 바란건 이걸보면서 C언어를 완벽하게 배워야지가 아니라 C언어를 모르는 사람이나 혹은 그냥 C언어라는 이름을 듣기만했던사람이 C언어라는게 있구나. 뭐 대충 이런거구나... 한번 공부해볼까? 라는 생각만 들게 하자. 였습니다.

한번 공부해볼까?라고 생각하고 검색했다면 널리고 널린게 C언어 강좌 사이트고 C언어 책이다보니, 이 쪽으론 별다른 언급을 안했었는데
죄송합니다.
2015-01-02 22:24:40
추천0
[L:48/A:401]
RaspberryPi
궁금한게 생겨서!
혹시 C에도 Lable단위의 break나 Continue가 있나요? 기억이 안나네여... 마이크로프로세서에서는 본거 같은데...
물론 LABLE을 안쓰는게 좋기는 하나, 다중 loop문(3개 이상 일 경우라던가)에서는 가끔씩 쓰기도 한다고 하더라구요.. break를 언제 다 걸어주냐며...
그래서 뜬금없이 생각난겁니다.

1:
for(;;){
for(;;){
for(;;){
break 1:;
}
}
}
8051아키텍쳐 MCU에서는 이런 비슷한 작업이 가능했던가 싶어서 뜬금없이 질문 날려봅니다!

C++을 배웠으면 JAVA는 확실히 쉽게 느껴질 것 같지만 C만 배운 터라.. JAVA는 그저 먼.... ㅜㅜ 학점을 말아먹었답니다!
2015-01-07 00:48:30
추천0
ㅋ라운제과
레이블(Label) 을 말씀하신 것으로 알고 그렇게 답하겠습니다.
가장 먼저 생각해 볼 만한 것은 goto 문이 있습니다. http://msdn.microsoft.com/en-us/library/2c002fdz.aspx
그리고 솔직히, goto 를 이용한 labeling 말고는 딱히 더 생각나는 것도 없네요. 알고 계신 것 처럼 가능 하면 쓰지 않는 것이 좋다. 라고 배웠던 것 같습니다. 하지만, 필요할땐 쓰는게 낫겠지요. 과제나 프로젝트 할때도 어지간하면, 그렇게 다중 루프문을 만들지 않으려고 합니다.
2015-01-08 23:00:15
추천0
샹크스¸
잘보고가요.
2015-02-08 22:53:59
추천0
의견(코멘트)을 작성하실 수 없습니다. 이유: 로그인을 하시면 댓글작성이 가능합니다. 츄잉은 가입시 개인정보를 전혀 받지 않습니다.
  
즐겨찾기추가   [게시판운영원칙] | [숨덕모드 설정] |   게시판경험치 : 글 10 | 댓글 1
번호| | 제목 |글쓴이 |등록일 |추천 |조회
86 츄간음악시간  
[음악시간] 3. 2000년대의 음악 [4]
古제갈공명
2015-05-12 1 4488
85 츄간음악시간  
[특별판] 츄잉에서 선정한 최고의 로리 [40]
古제갈공명
2015-05-08 7 10357
84 음덕겜덕피덕  
찾아라 비밀의 열쇠 & 안녕 디지몬 [6]
짱폭
2015-05-04 8 7896
83 별처럼빛나는  
[리니지] 간담회 발췌록 [2]
2015-05-04 2 5837
82 츄간음악시간  
[음악시간] 2. 축제의 달 5월 [1]
古제갈공명
2015-05-04 0 4211
81 츄간음악시간  
[음악과 사람] 3. LiSA [29]
古제갈공명
2015-04-30 12 8279
80 츄간음악시간  
[음악시간] 1. 시작의 계절 봄 [3]
古제갈공명
2015-04-27 1 6627
79 음덕겜덕피덕  
디지몬 어드벤쳐 Butterfly & 테이머즈 The Biggest Dreamer [26]
짱폭
2015-04-25 6 9023
78 츄간음악시간  
[음악과 사람] 2. Mark Ronson & Bruno Mars [2]
古제갈공명
2015-04-24 1 4080
77 츄간음악시간  
[음악과 사람] 1. sg워너비 [20]
古제갈공명
2015-04-22 6 5446
      
1
2
3
4
5
6
7
8
9
10
>
>>
enFree
공지&이벤트 | 접속문제 | 건의사항 | 로고신청 | 이미지신고 | 작품건의 | 캐릭건의 | 기타디비 | 게시판신청 | 클론신고 | 정지/패널티문의 | HELIX
Copyright CHUING Communications. All rights reserved. Mail to chuinghelp@gmail.com | 개인정보취급방침 | 게시물삭제요청