오랫만에 글을 올리네요.


개인적인 사정으로 바빠서 올리지 못 한 점 양해 부탁드립니다.




이번 글에서는 if ~ else 문과 if ~ else if ~ else 문을 다루도록 하겠습니다.



1. if ~ else 문


if 문하고 if ~ else 문의 차이점은 처음 보자마자 알 수 있듯이 else 가 추가 된 것입니다.


if 문은 조건을 검사 후 조건 성립하면 실행하고, 조건 성립하지 않으면 실행을 하지 않고 다음 문장으로 넘어갑니다.


if ~ else 문 if 부분에서 조건이 성립하지 않을 경우 else 문의 내용을 실행합니다.


반대로 if 부분에서 조건이 성립하면 else 문의 내용을 실행하지 않습니다.


예제를 통해 알아보도록 하겠습니다.



[ if 문의 조건이 성립할 경우 ]



[ if 문의 조건이 성립하지 않을 경우 ]


위의 예제에서처럼 if 문의 조건이 성립하지 않았을 경우 실행할 것을 else 문을 통해서 실행할 수 있습니다.






2. if ~ else if ~ else 문


if ~ else if ~ else 문은 조건검사 효율 문제 때문에 사용한다고 보시면 됩니다.


바로 예제를 통해 알아보도록 하겠습니다.



[ if 문의 비효율성 ]


위의 예제를 사람이 보면 단순히 '조건이 맞는 것만 실행하고 나머지는 실행하지 않는다' 라고 생각을 하기 쉽습니다.


하지만 C언어에서는 4가지의 if 문에 있는 조건문을 전부 검사합니다.


그렇게 되면 필요하지 않은 것들까지 조건을 검사하게 되서 그만큼 효율이 떨어지게 됩니다.


그렇다면 if ~ else if ~ else 문을 예제를 통해 알아보도록 하겠습니다.



[ if 문의 비효율성 해결을 위한 if ~ else if ~ else 문 ]


위 예제에서는 if 문의 비효율성을 해결하기 위해 if if if 대신 if ~ else 문 중간에 else if 를 추가 한 것입니다.


위 예제와 같이 코드를 작성하게 될 경우, if 문의 조건이 성립하지 않고, 두 번째 if 문 대신 들어간 else if (opt == 2) 문장이 참일 경우 해당 문장을 실행하고, 나머지 else if (opt == 3) 부터 else 문 까지는 실행을 하지 않고 바로 24번 째 줄의 printf("결과: %f \n", result); 문으로 넘어가게 됩니다.


이렇듯 if 를 연속적으로 사용하여 조건 검사를 매 회 계속 하는 것보다 else if 를 사용하여 조건이 성립 할 경우 남은 조건 문을 실행하지 않도록 하여 효율성을 높이는 방법이 훨씬 보기에도 편하고, 사용에 익숙해지면 편하게 사용 가능합니다.






3. if ~ else 문과 if ~ else if ~ else 문의 구조


if ~ else 문과 if ~ else if ~ else 문의 구조는 다음 예제를 통해 알아보도록 하겠습니다.



[ if ~ else 문, if ~ else if ~ else 문의 구조 ]


위 예제에서 확인 가능 하듯 if ~ else 문은 if 문의 조건식이 성립하지 않을 경우 else 문을 실행하는 구조입니다.


if ~ else if ~ else 문의 경우


if 문의 조건식이 성립하지 않아도 else if 문 조건 성립 또는 모든 조건이 성립하지 않아 else 문을 실행하는 구조로 되어 있습니다.


또한 if ~ else if ~ else 문에서 else if 부분은 추가로 else if 를 삽입 가능합니다.






이것으로 if ~ else 문, if ~ else if ~ else 문에 대하여 알아 보았습니다.



다음에는 반복문의 생략과 탈출에 사용되는 continue 와 break 에 대하여 글을 올리도록 하겠습니다.









'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 공부 관련!  (0) 2019.08.16
C언어 조건문 - if 문 (1)  (0) 2017.01.26
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12

이번에는 선택적으로 실행 할 수 있는 if 문에 대해서 알아보도록 하겠습니다.






1. if 문이 필요한 이유


귀찮게 if 문도 알아야 되는 구나 생각 하실 수 있습니다.


계산기를 예로 들어 보겠습니다.


분명 자신은 덧셈 결과만 알고 싶은데, 덧셈, 뺄셈, 곳셈, 나눗셈등 모든 결과가 나오면 불편합니다.


다음 예제를 통해서 알아보겠습니다.



위의 예제에서 알 수 있듯이 if 문으로 지정을 해서 원하는 연산만 실행이 되도록 할 수 있기에 if 문을 사용합니다.







2. if 문의 구조와 흐름


if 문의 경우 if 문, if~else 문, if~else if~else 문 이 있습니다.


* 이번 글에서는 if 문만 다루도록 하겠습니다. if~else 문, if~else if~else 문은 다음 글에서 다루도록 하겠습니다.


if 문의 경우 구조는 다음과 같습니다.



* 5행의 // 주석 처리와 7행과 18행의 /* */ 주석처리를 빼고 보시면 됩니다.


위 예제에서 확인 할 수 있듯이 if 문 또한 중괄호 { } 를 생략 가능합니다.


또한 if 문의 조건식에서 조건이 참이면 해당 문장을 실행하고, 다음 행으로 넘어갑니다.


다음 행으로 넘어가서 조건식이 거짓이어도 다음 문장의 내용을 '또' 한 번 읽고, 조건의 참/거짓 여부를 확인 후 실행 할지 안 할지 판 단 후 종료하게 됩니다.


이러한 불편한 점 때문에 조건이 참일 때까지 계속 검사 하다가 조건이 참이면 나머지는 안 하는 방법이 없을까? 라는 생각에서 if~else 문과 if~else if~else문이 나오게 되었습니다. ( 위에서 한 번 언급 한 것처럼 if~else 문과 if~else if~else 문은 다음 글에서 다루도록 하겠습니다. )


이렇듯 if 문을 사용하면 사용자가 원하는 대로 '선택' 할 수 있다는 점 때문에 if 문을 사용합니다.






이번 글은 여기서 마치도록 하겠습니다.



다음에는 if~else 문과 if~else if~else 문에 대하여 올리도록 하겠습니다.










'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 공부 관련!  (0) 2019.08.16
C언어 조건문 - if 문 (2)  (0) 2017.02.16
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12

이번에는 C언어에서 반복문들의 중첩에 대하여 알아보겠습니다.







1. for 문의 중첩


while 문, do~while 문 의 중첩처럼 for 문 또한 중첩이 가능하고, 코드 간결화 및 가독성과 효율을 높여주는 방법으로 중첩을 사용합니다.


따로 설명 하지는 않고, 반복문들의 중첩에 대한 구구단 예제를 통해 알아보고, 익숙해지는 시간을 가지도록 하겠습니다.








2. for / for 구구단



(개인적으로 for 문이 제일 편했습니다.)








3. for / while 구구단








4. for / do~while 구구단








5. while / while 구구단








6. while / for 구구단








7. while / do~while 구구단









8. do~while / do~while 구구단








9. do~while / while 구구단








10. do~while / for 구구단






여러가지 반복문들의 중첩을 구구단을 통해 알아보았습니다.


순서만 바꿔주면 된다라는 것이 이번 글의 목적이 아닙니다.


C언어의 특징과 각 반복문들의 특징을 잘 알고, '계속 연습 해보면서 익숙해져야 된다'는 것이 이번 글의 요점입니다.


처음 접하시는 분들의 경우 while, do~while, for 문에 대해서 완벽히 이해하셨어도 바로 적용이 안 되시는 경우가 대부분입니다.

(물론 예외이신 분들도 존재합니다.)


따라서 구구단은 단순한 예제일 뿐이고, 여러번 중첩해서 사용하는 연습을 해보셔야 됩니다.


for / for 반복문을 다른 반복문으로 바꿔본다던지 하는 식으로 연습 해보시는 것이 가장 좋습니다.

(꼭 중첩만이 아니더라도, 중첩이 없는 반복문을 중첩이 없는 다른 반복문으로 바꿔본다던지 하는 방식도 좋습니다.)






이것으로 반복문들의 중첩에 대해서 알아보았습니다.





다음에는 '조건에 따른 흐름의 분기' 에 대해서 공부하고 글을 올리도록 하겠습니다.










'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 조건문 - if 문 (2)  (0) 2017.02.16
C언어 조건문 - if 문 (1)  (0) 2017.01.26
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09

이번에는 반복문 중 하나인 for 문의 생략 가능한 부분과 무한루프에 대해서 알아보도록 하겠습니다.








1. for 문 에서의 생략


저번 글에서 for 문의 구조는 for ( 초기식 ; 조건식 ; 증감식 ) 이렇게 된다고 글을 작성 했었습니다.


하지만 이러한 초기식, 조건식, 증감식을 '생략' 하고 사용할 수 있습니다.


예제를 통해서 알아보도록 하겠습니다.



위의 예제는 입력 받은 값들의 평균을 출력 해주는 예제입니다.

* num++; 은 평균 계산을 위해 작성한 부분이고, (num - 1)은 조건식의 input>=0.0이 아닐 경우 음수의 값은 평균 계산에서 제외 시키기 위한 부분입니다.


평균 계산을 원하는 값들을 계속 입력 받아야 되고, 사용자가 원하는 시기에 음수 값을 입력해서 평균을 계산하는 소스입니다.


위의 예제의 경우 for( 초기식 ; 조건식 ; 증감식 ) 에서 초기식, 증감식 이 생략 되었습니다.


생략 해준 이유는 간단하게 말하면 필요 없기 때문입니다.


input 값은 사용자로 부터 값을 입력 받아서 입력 받을 때마다 해당 값으로 초기화가 되고, 사용자가 언제 입력을 종료할지 모르기 때문에 초기화를 필요로 하는 초기식 및 조건식을 충족시키기 위한 증감식 또한 필요하지 않게 됩니다.


따라서 초기식과 증감식은 필요하지 않기에 생략을 하고, 조건식만 충족시켜서 반복문을 탈출하면 되기에 조건식만 입력한 경우입니다.








2. for 문의 무한루프


이번 글의 첫 번째 주제에서 초기식, 증감식의 생략을 보고, 조건식도 생략 가능하지 않을까? 라는 궁금증을 가지시는 분도 계실겁니다.


당연히 생략 가능합니다.


예제를 통해서 알아보도록 하겠습니다.



위의 예제에서 조건식의 생략이 가능한 것을 알 수 있습니다.


또한 예제에서 확인 가능한 것은 다음과 같습니다.


1) 초기식 생략 가능

2) 조건식 생략 가능

3) 증감식 생략 가능

4) 무한루프 발생

이로써 초기식, 조건식, 증감식 의 생략이 모두 가능한 것을 알 수 있습니다.


하지만 여기서 궁금증을 가지시는 분들이 계실 겁니다.


조건식의 생략에 대해서 제대로 설명이 안 되어 있네? 갑자기 무한루프는 왜 나왔지? 라는 생각을 하시는 분 당연히 계실 겁니다.


while 문, do~while문에 대해서 글을 올리면서 반복문의 조건식이 항상 '참'이 되면 반복문을 탈출하지 못 하고, 무한루프를 형성하게 된다라는 글을 올렸었습니다.


이 때, while 문과 do~while 문에서는 조건식에 0을 제외한 '참'을 나타내는 값 중 대표인 '1'을 사용해서 조건이 항상 참이도록 했었습니다.


하지만 for 문에서는 조건식을 '생략' 함으로 써 무한루프를 형성하게 됩니다.


물론 변수 선언 해주고 해당 변수의 값을 1로 지정 해주고 조건식을 써줘서 for 문의 무한루프를 형성해도 됩니다.


하지만 for 문의 경우 생략이 가능한데, for 문에서의 조건식을 생략할 경우 조건을 항상 '참'으로 인식하게 됩니다.


따라서 for 문의 조건식을 생략할 경우 무한루프를 형성하게 됩니다.


또한 for 문에서 조건식을 사용하기 복잡하거나 까다로울 경우 추후 올릴 예정인 if 조건문과의 연관성이 있습니다. if 문으로 조건을 걸어서 무한루프의 반복문을 탈출하는 경우도 있습니다.











이것으로 for 문의 생략과 무한루프에 대하여 알아보았습니다.


다음에는 for 문의 중첩과 다른 반복문들의 중첩에 대하여 글을 올리도록 하겠습니다.









'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 조건문 - if 문 (1)  (0) 2017.01.26
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02

이번에는 반복문 중 하나인 for 문에 대해 알아보도록 하겠습니다.







1. for 문 이란?


첫 번 째 주제에서처럼 for 문도 다른 반복문인 while, do~while문 처럼 반복을 위해 사용되는 문장입니다.


while, do~while 문. 이 두 가지 했으면 충분한 것 같은데 굳이 또 다른 반복문을 할 필요가 있을까? 라는 궁금증이 생기실 수 있습니다.


이에 대한 것은 다음의 예제를 먼저 본 후 진행 하도록 하겠습니다.



예제를 보면서 이렇게 생각할 수 있습니다.


main이라는 함수를 선언 해주고, 4 bytes 크기의 int 형 변수인 count를 선언하면서 동시에 0으로 초기화를 해줬구나.


반복문 중 하나인 while 문을 선언 했는데 조건은 count 가 10이 되기 전까지 while문을 실행 해주는구나.


반복을 실행하는 문장은 어떤 기능일까? -----> "비교를 위한 예제입니다." 라는 문장을 출력하는 구나.


몇 번 출력하는 걸까? ----------> count++; 이라는 문장이 있다면 총 10번의 printf 기능을 하고 반복문인 while 문이 종료가 되겠구나.


while 문이 종료되고나면 return 0; 문장으로 인해서 프로그램이 종료가 되겠구나.


이처럼 어떠한 기능을 '반복'하고 싶고, '몇 번 반복'하고, '반복 조건을 충족시킬 문장'은 어떤 것인지 한 번에 보는 것이 힘듭니다.(번거로워요...)


이렇듯 일반적인 while, do~while 문은 익숙해진다 해도 한 번에 알아 보기에는 약간 무리가 있습니다.


따라서 반복 횟수, 반복 조건 등을 한 번에 알아 볼 수 있도록 해주는 문장이 'for 문' 입니다.








2. for 문의 구조와 이해


for 문의 구조는 다음과 같은 필수 요소 들로 이루어져 있습니다.


필수요소 

기능

                                          초기식

  반복을 위한 변수의 선언 

                                          조건식 

  반복의 조건 검사

                                          증감식 

  반복의 조건을 '거짓' 으로 만들기 위한 연산


물론 위의 요소들이 while, do~while 문 에서도 사용이 되는 요소 들입니다.



예제에서 보시는 것처럼 while, do~while 문에도 필요한 요소들입니다.


하지만 for 문의 경우 초기식, 조건식, 증감식을 한 줄에 표현 할 수 있습니다.



예제에서 알 수 있듯이 반복을 실행할 문장을 '몇 번 반복하고, 반복 조건을 만족 시키는 증가 및 감소식, 반복 조건 및 증가, 감소에 사용되는 변수의 초기화'를 한 줄에 작성하여 알아 보기 편하도록 되어 있는 것을 확인 하실 수 있습니다.


이렇듯 코드를 간결화 하고, 가독성을 좋게 해주기 때문에 for 문을 사용하게 됩니다.


다시 한 번 for 문의 구조를 정리해 보면 다음과 같습니다.


for( 초기식 ; 조건식 ; 증감식 )

{

// 반복의 대상이 되는 문장들

}


이러한 형식으로 for 문을 사용해주시면 됩니다.


그런데 바로 위의 예제에서 for 문을 2개 사용 했는데 왜 그런거지? 라는 궁금증을 가지시는 분들도 계실거고, 대략 눈치를 채신 분들도 계실겁니다.


for 문 이후에 if 문 에서도 나오는 내용이지만 for 문에서 반복할 문장이 1줄일 경우, 중괄호 { } 의 생략이 가능합니다.

* 하지만 반복할 문장의 마지막에 세미콜론 ; 을 반드시 작성하셔야 됩니다.


for 문이 작동하는 순서에 대해 알아보도록 하겠습니다.


for 문이 작동하는 순서는 다음과 같습니다.


1) 초기식 ==> int count=0 에 해당하는 초기화는 반복문이 시작하기 전 '1회' 만 실행합니다.

2) 조건식 ==> count < 10 에 해당하는 조건의 검사는 반복문의 시작에 앞서 진행하고, 반복 영역을 실행하기 전에 항상 확인 합니다.

3) 증감식 ==> count++ 에 해당하는 증감연산은 반복영역을 실행한 후에 진행합니다.


이렇듯 더욱 간단히 순서를 나열해 보면,


(1) 초기식 ==> (2) 조건식 ==> (3) 반복영역 실행! ==> (4) 증감식 ==> (2) ==> (3) ==> (4) ==> (2) 조건식이 '거짓' 이 될 경우  종료!


위와 같은 순서로 for 문이 작동하는 것을 알아 보았습니다.


실제로 편하고(개인 적인 생각입니다.), 가독성이 좋고, 코드의 간결화도 할 수 있는 for 문을 주로 사용합니다.








이것으로 반복문 중 하나인 for 문에 대하여 간단하게 알아 보았습니다.


다음에는 for 문의 중첩과 for 문 중첩 예제, 반복문들을 다양하게 중첩시켜서 사용하는 예제와 for 문 구조의 생략 가능한 부분, for 문의 무한 루프에 대해서 글을 올리도록 하겠습니다.












'프로그래밍 언어 > C' 카테고리의 다른 글

C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02

#상당히 늦었습니다. 죄송합니다. 오랫만에 와서 올리는 건데 짧은 내용에 대해 미리 사과의 말씀 드리고 진행 하도록 하겠습니다.




이번에는 do~while문에 의한 문장의 반복에 대해 알아보도록 하겠습니다.





1. do~while문 이란?


do~while문이란 '반복영역을 최소한 한번은 실행하는 구조'인 반복문 입니다.


do~while문은 while문과 거의 차이가 없습니다.


그러면 왜 do~while문이 필요하지? 라는 궁금증이 생기실 수 있습니다.


이와 관련하여 다음의 예제를 보도록 하겠습니다.



위의 예제에서 확인할 수 있듯이 do~while문과 while문은 차이가 거의 없습니다.


예제를 봐도 똑같지 않나? 라는 생각을 하실 수 있습니다.


이러한 궁금증에 대해서 위의 예제를 통해 다시 한 번 자세히 살펴보면 다음과 같은 사실을 알 수 있습니다.


1) 위의 예제의 경우에는 반복횟수가 이미 정해져 있습니다.

2) while문은 조건을 확인 하는 문장이 위쪽에 있는데 do~while문은 뒤쪽에 있습니다.

* 영어사전에서 do 는 '~하다' 라는 의미입니다.


여기까지 오셨으면 어느정도 눈치 채신 분들도 계실거고, 이러한 생각도 하실 수 있습니다.


단순하게 사용자의 입력이 완료될 때까지를 기다리는 계산기처럼 반복 횟수가 정해지지 않았을 경우 어떻게 하지?


C언어의 절차지향적 언어의 특성으로 위에서 부터 아래쪽의 순으로 순차적으로 실행 할 경우 do~while문의 반복영역은 무조건 한 번이 실행되나?


라는 궁금증이 생기실 수 있습니다.


우선 do~while문은 무조건 do~while문 의 중괄호 { } 사이의 영역은 무조건 처음에는 한 번 실행을 한 후, 조건을 검사합니다.


또 한가지 예를들면 사용자의 입력이 언제 끝날지 모르고, 무조건 한 번은 입력이 되어야 할 경우 do~while문을 사용합니다.


이러한 경우에는 while문 보다 do~while문이 훨씬 자연스럽기 때문입니다.


다음은 do~while문이 while문 보다 자연 스러운 상황을 나타내는 예제입니다.



위의 예제에서처럼 무조건 한 번은 실행이 되어야 할 경우에 do~while문을 사용하게 됩니다.


아직 이해가 되시지 않으신 분들은 다음 예제를 보도록 하겠습니다. (제 설명이 부족해서..)



위의 예제에서 보시는 것처럼 프로그램이 입력을 받기도 전에 종료가 되어 버렸습니다.


조건식을 만족하지 않아 while문의 반복영역을 실행조차 하지 않고 종료가 되는 것을 확인 하실 수 있습니다.


여기서 '그럼 조건식을 바꾸거나 조건에 사용된 변수를 다른 값으로 초기화 하면 되지 않나?' 라는 분들이 계실수도 있습니다.


당연히 가능합니다.


하지만 그렇게 하는 경우도 계실 수 있지만 '무조건 한 번은 실행 시키는 프로그램을 만들어야 되는데 while문 밖에 쓸 수 없다' 라는 문제에 직면 했을 경우 다음과 같이 do~while문이 while문 보다 자연 스럽다는 것을 아실 수 있습니다.



위의 예제에서처럼 무조건 한 번을 입력해야 되는데 '저는 do~while 문은 모릅니다. ㅠㅠ' 라는 상황이 생겼다고 가정하겠습니다.


그리하여 while문을 이용해서 작성을 해 본 결과 굉장히 부자연 스럽다는 것을 확인 할 수 있습니다.



이렇듯 do~while문은 입력을 받아 누적이 되어야 하는 프로그램의 경우 do~while문이 훨씬 자연스러운 것을 알 수 있었습니다.


또한 '최소한 1회는 반복영역을 실행하게 된다'는 점이 while문과의 가장 큰 차이점이라 할 수 있습니다.






이것으로 C언어 반복문 중 하나인 do~while문에 대하여 알아 보았습니다.



다음에는 for문에 의한 문장의 반복에 대하여 공부하고 글을 올리도록 하겠습니다.












'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01

이번에는 저번 글 http://widevery.tistory.com/7 에 이어서 while문의 루프와 중첩에 대하여 알아 보겠습니다.





1. 무한루프


while문에서 while(조건식) 과 같이 조건식이 '참'인 경우 while문의 내용을 실행하고, 조건식이 '거짓'일 경우 while문을 종료하게 됩니다.


그렇다면 조건식이 '항상 참'인 경우에는 어떻게 될까? 라는 생각을 가져 볼 수 있습니다. 이와 같은 생각으로 다음과 같이 해볼 수 있습니다.



0을 제외한 나머지 값은 참으로 인식하니까 참으로 인식하는 값 중 대표적으로 많이 쓰이는 1을 조건식에 넣어서 실행 해볼까? 라는 생각을 가지고 실행하게 되면 위의 예제에서처럼 따로 멈춰주지 않는 이상 계속 실행을 하게 됩니다. ( Ctrl + C를 누르면 멈추게 됩니다.)


이렇듯 반복문의 탈출조건이 성립하지 않는 경우 무한루프를 형성한다고 합니다.


이러한 무한루프는 실수로 만들어지는 경우도 있지만, 의도적으로 만들어서 break문과 함께 사용하기도 합니다.

(break문은 추후 조건에 따른 흐름의 분기와 관련하여 내용을 다루면서 그 때 다시 다루도록 하겠습니다.)





2. while문의 중첩


while문의 중첩은 말 그대로 반복을 위해 사용한 while문 안에 while문이 존재하는 경우를 의미합니다.


다음 예제는 while문을 중첩시켜서 구구단 2~9단 까지 출력을 하는 예제인데, 해당 예제를 통해서 중첩된 while문의 코드 흐름을 이해하도록 하겠습니다.



위의 예제를 보시면 코드를 실행한 결과로 오른쪽에 구구단이 출력이 된 것과 해당 코드가 구구단을 출력하기 위한 코드라는 것을 확인 할 수 있습니다.


짧고 간단한 코드이지만 while문의 중첩을 모르는 상태에서 보게 될 경우 복잡해 보일 수가 있습니다.


우선 위 예제의 코드에서 다음과 같은 내용을 알 수 있습니다.


1) while문의 중첩

2) 원하는 결과의 출력을 위한 변수 초기화

3) while문의 조건 설정


이와 같은 내용들을 확인 할 수 있습니다.


먼저 while문에서 while(조건식) 의 '조건식'이 만족할 때까지 while문 내부에 있는 문장을 실행하는 것을 저번 글에서 알아 보았습니다.


그렇다면 while문의 내부에 while문이 있다면 while문 안쪽의 while문이 끝날 때까지 처음 작성한 while문은 계속 실행이 된다는 것을 알 수 있습니다.


이와 같은 내용을 바탕으로 위의 코드를 해석하면 첫 번째 while문의 조건이 i = 2 일 때 내부의 while문을 9번 실행하고, i가 하나씩 증가 되는 것을 알 수 있습니다.


i 값이 하나씩 증가하여 i 의 값이 9일 때까지 실행이 되고, i 가 10이 되면 while문을 실행하지 않고, while문을 종료 후 그 다음 문장을 실행하게 됩니다.


또한 위의 코드에서 첫 번 째 while문이 끝날 때까지 내부의 while문을 실행해야 되는데 9번째 줄에서 j = 1; 로 초기화를 시켜주는 이유는 초기화를 하지 않고 진행하게 될 경우 구구단을 정상적으로 출력하지 않게 됩니다.


초기화를 진행 해 주지 않으면 j의 값이 계속 10으로 지정 되어 있기 때문에 다음과 같이 실행 결과가 나오게 됩니다.



[구구단 출력 예제에서 곱해지는 값인 j 값의 초기화를 하지 않았을 경우]




또한 while문을 사용하지 않고 예제에 사용된 구구단 출력을 할 수도 있습니다.



[while문의 중첩을 활용하지 않고 출력을 한 경우]



위와 같이 효율이 떨어지게 됩니다.


따라서 반복문의 중첩을 자주 사용하게 됩니다.










이것으로 반복문 중 하나인 while문에 대하여 모두 알아 보았습니다.


다음 글에서는 반복문 중 하나인 'do~while문에 의한 문장의 반복'에 대하여 공부하고 글을 올리도록 하겠습니다.












'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01
C언어 상수와 기본 자료형  (0) 2016.12.27

이번에는 C언어에서 반복 실행을 위해 사용이 되는 반복문 중 하나인 while문에 대하여 알아보도록 하겠습니다.




1. 반복문


반복문 : 하나 이상의 문장을 두 번 이상 반복 실행하기 위해서 구성하는 문장입니다.


반복문의 종류는 'while', 'do~while', 'for' 문이 있습니다.


우선 반복이 필요한 이유에 대해서 다음의 예제를 보도록 하겠습니다.



위 예제에서 확인 할 수 있듯이 반복해서 할 수 있는 작업을 하나씩 전부 작업 해 준다면 효율이 떨어지게 됩니다.

(예제에서는 10개의 문장으로 예를 들었지만 100개, 1000개 등 그 이상을 하게 될 경우 효율이 굉장히 나빠지게 됩니다.)


이렇듯 반복을 해야 할 경우 쉽게 해주는 것이 반복문입니다.





2. while문의 사용


이번 글에서는 반복문 중 하나인 'while문'에 대하여 알아 보도록 하겠습니다.


while이라는 단어를 검색해 보면 '~하는 동안' 이라고 되어 있습니다.


프로그래밍에서도 마찬가지로 while문은 '~하는 동안 반복해라' 라는 것을 의미합니다.


while문을 사용해 보도록 하겠습니다.


while문 사용은 다음의 예제를 통해 먼저 알아보고 진행하도록 하겠습니다.



위 예제와 위쪽 글의 주제에 사용 되었던 예제 사진과 비교를 해 본 결과 반복문을 사용할 경우 훨씬 효율적인 것을 알 수 있습니다.


반복문 중 하나인 while문을 사용하기 위해서 다음과 같은 사실들을 알 수 있습니다.


1) 반복을 하기 위한 조건 설정 ( 5번째 줄의 int num = 1;  /  7번째 줄의 while 다음에 있는 (num < 11)  /  10번 째 줄의 num++; )


2) 반복을 하기 원하는 문장 ( 9번째 줄의 printf 문장 )


실행 순서는 다음과 같습니다.


(1) 10번 반복 하고 싶으니까 10번 반복을 위해 count 해 줄 값인 1을 num 이라는 변수에 저장

(2) while문을 선언하고 10번 반복을 위해 num이라는 변수에 저장 되어 있는 값이 11 보다 작을 때까지 라는 조건 설정

(3) 반복을 실행할 문장 작성

(4) num이라는 변수에 저장 되어 있는 값을 1 증가 (이 때 num++ 문장으로 인하여 num 값은 2가 됩니다.)

    (또한 아직 num에 있는 값이 while문의 조건 (num < 11) 을 만족하기 때문에 return 0; 문장을 실행하지 않고 다시 while문을 실행하게 됩니다.

(5) (3) ~ (4) 를 계속 반복 하면서 num 값이 11이 되어서 다시 while문의 조건(num < 11)으로 가서 해당 조건이 만족하지 않을 경우 while문을 빠져나오게 됩니다.

(6) return 0; 실행 (프로그램 종료)


이렇듯 반복을 원하는 문장과 반복 하기 위한 조건을 설정을 하게 되면 해당 반복조건이 만족하지 않을 때까지 while문이 실행이 되고, 반복조건이 만족하지 않으면 while문을 종료하고 다음 문장을 실행하게 됩니다.





3. while문의 들여쓰기


들여쓰기와 관련하여 다음의 예제를 보고 진행하도록 하겠습니다.



[들여쓰기 하지 않았을 경우]




[들여쓰기를 한 경우]



위의 두 사진에서 알 수 있듯이 들여쓰기를 해도 되고, 하지 않아도 상관은 없습니다.


단지 들여쓰기를 하게 되면 가독성이 훨씬 좋아지기 때문에 보편적으로 들여쓰기를 해서 프로그램을 작성합니다.


들여쓰기의 기준은 보통 띄어쓰기(Space) 4회 또는 Tab을 사용합니다.


들여쓰기를 하실 때 띄어쓰기(Space)와 Tab을 혼용해서 사용하시는 것보다 하나로 통일해서 일관성 있게 하는 것이 좋습니다.

(실제로 저는 처음에 프로그래밍을 할 때 띄어쓰기(Space)와 Tab을 혼용해서 사용 했었는데 작성한 소스를 수정할 때 굉장히 불편함을 겪은 적이 있습니다.)





4. 반복문의 중괄호 { } 생략


int main(void) 함수에서도 중괄호 { } 를 사용하였는데 while문에서도 사용하니까 불편하다 라고 하실 수도 있습니다.


이와 관련하여 생략을 할 수 있는 경우가 있습니다.


실행할 문장이 한 줄이거나, 한줄로 표현이 가능한 경우 입니다.



위의 예제처럼 한 줄로 표현이 가능한 경우 중괄호 { } 를 생략할 수 있습니다.

(중괄호를 사용하지 않기 위해 일부러 한줄로 다 표현하는 경우 가독성이 굉장히 떨어지게 됩니다. 그러한 방법은 사용하지 않는 것을 권장합니다.)


또한 하나의 문장이어도 중괄호 { } 를 포함 할 수 있습니다.



위의 예제처럼 하나의 문장이지만 중괄호 { } 를 생략하지 않아도 아무런 이상이 없이 정상적으로 작동하는 것을 알 수 있습니다.







이것으로 반복문 중 하나인 while문의 첫 번째 Part에 관한 내용이 끝났습니다.


다음 글에서는 while문의 무한루프와 while문의 중첩에 대하여 공부하고 글을 올리도록 하겠습니다.











'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01
C언어 상수와 기본 자료형  (0) 2016.12.27
C언어 데이터 표현방식  (0) 2016.12.25

이번에는 printf 함수와 scanf 함수에서 사용하는 서식문자에 대해서 알아 보도록 하겠습니다.





1.  특수문자 출력


printf 함수는 문자열을 출력하는 함수입니다.


문자열을 출력할 때 큰 따옴표(" ")로 묶인 문자열을 전달하고, printf 함수를 실행(호출)하면 전달된 문자열이 모니터상에 출력이 됩니다.



위 사진과 같이 큰 따옴표(" ")로 묶인 문자열이 출력 되는 것을 확인 할 수 있습니다.


이 때 이러한 생각이 들 수 있습니다.


철수가 말했습니다. "안녕 나는 철수라고 해." 라는 문장을 출력하고 싶은데 어떻게 어떻게 해야 되지? 라고 생각을 가질 수가 있습니다.


그래서 다음과 같이 문장을 작성 하시는 경우가 생길 수 있습니다.



일반적으로 사람이 볼 때는 "철수가 말했습니다. "안녕 나는 철수라고 해."" 라고 문장을 작성하게 되면 "안녕 나는 철수라고 해." 부분이 철수가 말하는 내용으로 출력이 되서 결과가 나와야 된다고 쉽게 생각을 할 수 있습니다.


하지만 컴퓨터는 처음 시작하는 큰 따옴표(" ")와 해당 큰 따옴표(" ")와 짝이 맞는 큰 따옴표(" ")를 찾아서 하나의 문장으로 인식 하기 때문에 에러가 위와 같은 경우가 발생하게 됩니다.


이러한 경우 다음과 같은 방법으로 해결할 수 있습니다.



이와 같이 큰 따옴표(" ")와 같은 문자를 직접 출력하고 싶을 경우 해당 따옴표 앞에 역슬래시(\)를 입력해주면 해당 문자가 직접 출력이 됩니다.


이렇듯 위의 예제에서 사용된 역슬래시(\)와 같은 문자를 특수문자라 합니다.



다음은 특수문자의 종류와 각 특수문자가 의미하는 내용을 나타낸 표입니다.


 특수문자

의미하는 바 

  \a 

  경고음 

  \b 

  백스페이스(backspace) 

  \f 

  폼 피드(form feed) 

  \n 

  개 행(new line) 

  \r 

  캐리지 리턴(carriage return) 

  \t 

  수평 탭 

  \v 

  수직 탭 

  \' 

  작은 따옴표 출력 

  \" 

  큰 따옴표 출력 

  \? 

  물음표 출력 

  \\ 

  역슬래시 출력 



이 때 \f와 \v는 모니터 출력이 아닌 '프린터 출력'을 위해 정의된 특수문자이기 때문에 모니터의 출력에 사용하게되면, 이상한 문자가 출력 됩니다.





2. printf 함수의 서식지정과 서식문자들


%d %X와 같은 서식문자를 이용해서 출력할 문자열의 형태를 직접 지정할 수 있습니다.



위의 예제에서 보시는 것과 같이 myAge라는 변수에 저장 되더 있는 정수 12를 서식문자인 %d(10진수 형태로 출력), %X(16진수 형태로 출력)를 사용해 출력 형태를 직접 지정하여 출력한 결과 지정한 형태대로 출력이 되는 것을 확인 할 수 있습니다.


다음은 서식문자의 종류와 그 의미를 나타내는 표입니다.


서식문자 

출력 대상(자료형) 

출력 형태 

  %d 

  char, short, int 

  부호 있는 10진수 정수 

  %ld 

  long 

  부호 있는 10진수 정수 

  %lld 

  long long 

  부호 있는 10진수 정수 

  %u 

  unsigned int 

  부호 없는 10진수 정수 

  %o 

  unsigned int 

  부호 없는 8진수 정수 

  %x, %X 

  unsigned int 

  부호 없는 16진수 정수 

  %f 

  float, double 

  10진수 방식의 부동소수점 실수 

  %Lf 

  long double 

  10진수 방식의 부동소수점 실수 

  %e, %E 

  float, double 

  e 또는 E 방식의 부동소수점 실수 

  %g, %G 

  float, double 

  값에 따라 %f와 %e 사이에서 선택 

  %c 

  char, short, int 

  값에 대응하는 문자 

  %s 

  char * 

  문자열 

  %p 

  void * 

  포인터의 주소 값 


* 위의 표에서 %s와 %p에 대해서는 추후 포인터와 배열을 다루면서 추가적으로 설명하도록 하겠습니다.



* 정수의 출력을 위한 서식문자들 중 %x, %o의 경우 출력한 결과 문자인지 숫자인지 헷갈리는 경우가 발생합니다. 이 때 사용해주느 것이 #을 사용하는 것인데 이와 관련해서 다음의 예제를 보고 추가 설명을 하도록 하겠습니다.



위의 예제에서 서식문자를 활용하여 num1과 num2에 저장되어 있는 정수인 7, 13을 각각 8진수와 16진수로 출력을 한 결과입니다.


이 때 8진수와 16진수로 출력을 했어도 단순하게 생각하고 보면 '7은 10진수 7이구나, d는 문자 d 이구나' 라고 생각을 할 수도 있게 됩니다.


그래서 사용해주는 것이 %와 출력형태인 o, x 사이에 #을 넣어주는 것입니다.


#을 넣어주게 될 경우 위와 같이 7 앞에 8진수를 나타내는 0이 붙어서 출력이 되고, d 앞에 16진수를 나타내는 0x가 붙어서 출력이 되는 것을 확인 할 수 있습니다.




3. 실수의 출력을 위한 서식문자들 : %f, %e


실수의 출력은 %f를 주로 사용하지만 '지수'를 사용한 실수를 출력할 때에 어떻게 출력해야 되는지 생각을 하게 됩니다.


이와 관련하여 컴퓨터는 지수를 표현할 수 없으므로 e 표기법으로 지수를 대신 표현하게 됩니다.


10의 n승을 기준으로 나타내게 되는데, 이 때 10을 e로 표현하고 지수인 n을 e뒤에 붙여서 출력하게 됩니다.


다음의 예제를 통해 알아보도록 하겠습니다.



위의 예제와 같이 %f의 사용 결과와 %e의 사용 결과를 알 수가 있었습니다. %e의 사용에 관한 내용은 다음 주제에서 추가적으로 다루도록 하겠습니다.




4. %g의 실수출력


서식문자 %g의 실수출력과 관련해서 다음의 예제를 먼저 보고 진행하도록 하겠습니다.



%g의 실수출력과 관련해서 위의 예제의 결과를 통해 알 수 있는 것은 서식문자 %g는 %f와 %e 표기 중 적절한 것을 사용해서 출력한다는 것입니다.


%g를 사용한 결과 d1과 d2의 경우 소수점 이하 자릿수가 너무 많지 않고 충분히 알 수 있을 정도의 자릿수여서 0.00123, 0.000123 그대로 출력이 되는 반면, d3와 d4의 경우 소숫점 이하 자릿수가 많아져서 읽을 때 불편함이 발생하게 됩니다. 


따라서 컴퓨터는 %g를 사용한 결과 d3와 d4는 %e를 사용해서 e 표기법으로 출력을 한 것을 확인 할 수 있습니다.




5. scanf 함수


1) scaf 함수에서 정수 기반의 입력형태를 정의하기


데이터를 입력 할 때 scanf 함수에세 전달해야 하는 두 가지 정보는 다음과 같습니다.


- 입력의 형식

- 입력 장소


이 두 가지 정보를 바탕으로 scanf 함수에게 데이터를 전달해야 합니다.


다음의 예제를 보도록 하겠습니다.



위의 예제에서 scanf 전달되어지는 데이터에 대해서 알 수 있습니다.


%d(10진수 정수) 형태, %o(8진수 정수) 형태, %x(16진수 정수) 형태로 데이터를 입력 받습니다.


* printf와 달리 저장 되어 지는 곳을 정해 줄 때 printf 함수 처럼 그냥 변수로 사용하면 될텐데 왜 변수 앞에 &를 붙이지? 라는 생각을 가지실 수 있는데 이와 관련해서는 포인터와 배열을 다루면서 추가적으로 설명하도록 하겠습니다.




6. 실수 기반의 입력형태 정의


printf 함수에서는 서식문자 %f, %e 그리고 %g의 의미가 각각 달랐습니다.


하지만 scanf 함수에서는 'float형 데이터를 입력 받겠다' 라는 말은 동일한 의미를 담고 있습니다.


scanf 에서의 %f %e %g는 float형 데이터의 삽입을 위한 서식문자 일 뿐입니다.


다음의 예제를 보고 진행하도록 하겠습니다.



printf 함수에서는 double형과 float형 모두 %f를 사용했습니다.


하지만 scanf 함수에서는 입력되는 자료형을 정확히 구분 해 줄 필요가 있습니다.(printf 함수의 경우 이미 저장되어 있거나 지정한 값들을 출력하는 것이기 때문에 상관이 없지만 scanf 함수의 경우 입력을 하는 것이기 때문에 정확하게 구분 해 줄 필요가 있습니다.)


다음은 scanf 함수에서 사용되어지는 서식문자를 나타낸 표입니다.


서식 문자

입력 받는 자료형

  %f 

  float 형  

  %lf 

  double 형

  %Lf 

  long double 형 


위의 표와 같이 정확하게 구분을 해줘야 합니다.


또한 double 형과 long double 형의 입력에 있어서 사용되는 서식 문자인 %lf 와 %Lf의 L의 대,소문자 또한 확실히 구분을 해주셔야 합니다.





printf 함수와 scanf 함수에 대해서 간단히 알아 보았습니다.


다음에는 반복실행을 명령하는 반복문에 대하여 공부하고 글을 올리도록 하겠습니다.








'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 상수와 기본 자료형  (0) 2016.12.27
C언어 데이터 표현방식  (0) 2016.12.25
C언어 변수와 연산자  (0) 2016.12.24

# 이번 글이 많이 늦어진 점 죄송합니다. 최대한 하루에 한 개 씩 올리자는 것을 목표로 올리도록 하겠습니다.(방학 현장실습 - (이것 또한 현장실습 나가서 공부합니다. 이에 대한 내용은 추후 포스팅 하도록 하겠습니다.) 방학 현장실습으로 인하여 중간 중간 포스팅이 되지 않는 날이 있을 수도 있다는 점 양해의 말씀 드립니다.)

# 또한 이번 글의 내용이 상당히 긴 점 양해의 말씀 드립니다. 내용이 중간에 한 박자 쉬어가게 되면 이해가 안 되는 부분들이 있어서 이렇게 올리게 되었습니다. (정확하고 이해하기 쉽게 설명할 수 있도록 표현을 최대한 다양하게 하겠습니다.)



이번에는 C언어의 상수와 기본 자료형에 대하여 알아 보겠습니다.


1. 자료형


자료형은 데이터를 표현하는 방법입니다.


C언어가 제공해주는 기본 자료형에 대하여 알아 보겠습니다.


int, double, char 등 이와 같은 일부의 키워드를 자료형이라고 합니다.


이러한 자료형들은 다음과 같이 2가지 정보를 담고 있습니다.


1) 표현 또는 저장 하려는 데이터가 '정수' 인지 '실수' 인지에 따른 정보가 담겨 있습니다.


2) 표현하려는 데이터의 크기가 몇 bytes 인지에 대한 정보가 담겨 있습니다.


ex) 1) int 자료형 : '정수'를 표현 및 저장하고, 그 크기는 4 bytes !

     2) double 자료형 : '실수'를 표현 및 저장하고, 그 크기는 8 bytes !




2. 기본 자료형의 종류와 데이터의 표현범위


C언어에서는 총 8개의 기본 자료형을 제공합니다.


다음은 기본 자료형의 종류와 데이터의 표현범위 입니다.


자료형

크기 

값의 표현범위 

정수형 

  char 

 1 Byte

  -128 이상   +127 이하

  short 

 2 Bytes 

  -32,768 이상   +32,767 이하 

  int 

 4 Bytes 

  -2,147,483,684 이상   +2,147,483,647 이하

  long 

 4 ~ 8 Bytes 

  -2,147,483,684 이상   +2,147,483,647 이하

  long long 

 8 Bytes 이상 

  -9,223,372,036,854,775,808 이상

  +9,223,372,036,854,775,807이하

실수형

  float 

 4 Bytes 

  이상  이하

  double 

 8 Bytes 

  이상 이하

  long double 

 8 Bytes 이상 

  double 이상의 표현 범위




자료형 별 크기는 컴파일러(사람이 프로그래밍 언어로 작성한 것을 CPU가 이해 할 수 있도록 변환 해주는 것)에 따라서 약간의 차이를 보입니다.

- C언어의 표준에서는 자료형별 상대적 크기를 표준화 할 뿐 구체적인 크기까지 언급하지는 않습니다.


자료형이 여러개가 있지만 그러한 자료형들이 크게 '정수형''실수형'으로 나누어집니다.

- 데이터를 표현하는 방식이 정수형과 실수형 두 가지로 나누어지기 때문입니다.


정수형에서도, 실수형에서도 둘 이상의 기본 자료형이 존재합니다.

- 표현하고자 하는 값의 크기에 따라서 적절히 선택할 수 있도록 다수의 자료형이 제공되기 때문입니다.


* ex) 3 Bytes로 데이터를 표현 하고 싶은 경우가 있을 수 있습니다. 하지만 그런 경우는(현재 VC++2015 기준) 제공되는 자료형이 3 Bytes는 없기 때문에 불가능합니다.




3. 연산자 sizeof를 이용한 'Byte' 크기의 확인


sizeof 연산자의 피연산자로는 '변수', '상수''자료형의 이름' 등이 올 수 있습니다.



이처럼 sizeof 연산자를 이용하여 자료형의 이름 및 상수, 변수의 크기를 확인 할 수 있습니다.


소괄호 ( ) 는 int와 같은 자료형의 이름에만 필수 입니다. 하지만 모든 피연산자를 대상으로 소괄호를 감싸주는 것이 일반적입니다. (일관성을 가지게 되면 가독성이 좋아지고, 이해하기 쉬워지기 때문입니다.)




4. 정수의 표현 및 처리를 위한 일반적 자료형 선택


일반적으로 정수를 표현 및 처리 하기 위해서 선택되는 자료형은 int 입니다.

- CPU가 연산하기에 가장 적합한 데이터의 크기가 int형의 크기로 결정되기 때문입니다. (운영체제 32 bit / 64 bit 라는 말은 해당 운영체제가 몇 bit 단위로 데이터 처리가 되는지를 말합니다. 따라서 컴퓨팅 환경이 좋아졌기 때문에 int형으로 표현 및 처리 해도 부담이 되지 않기 때문입니다.)

- 연산이 동반이 되면 int형으로 형 변환이 되어서 연산이 진행됩니다.

- 따라서 연산을 동반하는 변수의 선언을 위해서는 int로 선언하는 것이 적합합니다.


* char형, short형 변수는 필요하지 않나? 라는 의문이 생길 수 있습니다.

  - 연산을 수반하지 않으면서(최소한의 연산만 요구가 되면서) 많은 수의 데이터를 저장해야 하고, 그 데이터의 크기가 char 또는 short로 충분히 표현 가능할 경우, char 또는 short로 데이터를 표현 및 저장하는 것이 적절합니다.


다음으로 char 또는 short의 연산을 하게 되는 경우에 대해서 알아 보겠습니다. 글의 후반부에 설명할 내용이지만 형 변환에 대해서 char형과 short형의 연산과 관련된 자료형 선택에 관한 내용이 나온 관계로 char형 과 short형의 연산을 이용해서 간단하게 알아보도록 하겠습니다.



예제에서 확인 할 수 있듯이 char형 변수 num1 = 1 과 num2 = 2의 연산 결과로 3이 되어서 3이라는 값 또한 크기가 char형에 충분히 들어 가기 때문에 sizeof 연산으로 1 Byte 라는 값이 나와야 하는데 4 Bytes로 나온 이유는 결론 부터 말씀드리면 CPU가 정수형 연산을 하기에 가장 적합한 크기가 int 형이기 때문입니다. 따라서 '연산이 되는 동안'에는 1 + 2 해서 나온 결과 값이 3이어도 4 Bytes 로 되어 있고, 3이라는 결과 값을 저장하는 char 형 변수인 result1에 4 Bytes 의 3이 1 Byte로 '자동 형 변환' 하여 저장이 됩니다.


따라서 정수의 표현 및 처리의 일반적인 자료형의 선택은 int형인 것을 알 수 있습니다.




5. 실수의 표현 및 처리를 위한 일반적 자료형 선택


실수 자료형의 선택기준은 '정밀도' 입니다.


저번 글에서 말씀 드렸던 데이터의 표현 방식에 있어서 실수를 완벽하게 표현 할 수 있는 컴퓨팅 환경은 현재로써는 존재하지 않는다는 말씀을 드렸습니다.


따라서 실수 표현 및 처리를 위한 자료형의 선택은 정수 자료형의 선택과 다르게 오차가 되도록 없는 '정밀도' 를 기준으로 실수의 자료형을 선택하게 됩니다.


- 실수의 표현범위는 float, double 둘 다 충분히 넓습니다.

- 하지만 8 Bytes 크기의 double이 float보다 더욱 정밀하게 실수를 표현합니다.

* long double은 컴퓨터가 너무 큰 Bytes 이다보니 그 크기가 부담 스럽기 때문에 double을 일반적으로 선택합니다.


- 컴퓨팅 환경의 발전으로 float 보다 정밀도가 높은 double형이 데이터의 표현 및 연산이 덜 부담스럽습니다.

- float형 데이터의 경우 정밀도가 부족한 경우가 많습니다.




위의 두 가지 예제에서 확인 할 수 있듯이 float형은 데이터 표현의 정밀도가 낮아서 발생한 오차의 누적으로 소숫점 6 번 째 자리에서 2라는 값이 출력이 되고, double 형의 경우 float 형 보다 데이터 표현의 정밀도가 높아서 소숫점 6 번 째 자리에서 0이라는 값이 출력이 되는 것을 확인 할 수 있습니다.


이러한 예제의 결과를 바탕으로 알 수 있는 사실은 'double 형''float 형' 보다 정밀도가 높다! 라는 사실을 알 수 있습니다.


다음은 실수 자료형의 소수점 이하 정밀도와 바이트수를 나타낸 표 입니다.


실수 자료형 

소수점 이하 정밀도 

바이트 수 

    float 

    6자리 

    4 

    double 

    15자리 

    8 

    long double 

    18자리 

    12 


* double형 변수의 '출력' 에 사용되는 서식문자는 %f    ㅡㅡ> printf

  double형 변수의 '입력' 에 사용되는 서식문자는 %lf   ㅡㅡ> scanf


* double 형 변수의 '출력'은 %f 인데 '입력'은 왜 %lf 를 사용하지? 라는 궁금증을 가지시는 분들이 계실 텐데 이에 대한 내용은 다음 글에서 다루게 될 printf함수와 scanf함수에 대하여 간단하게 정리하면서 알아보도록 하겠습니다.




6. 정수형의 앞에 unsigned를 붙여서 0과 양의 정수만 표현


6 번 째 제목처럼 int, char, short, long, long long의 앞에 unsigned를 붙여서 0과 양의 정수만을 표현 하는 방법입니다.


다음의 unsigned가 붙지 않은 정수 자료형의 보편적인 크기와 unsigned 선언을 포함하는 정수 자료형의 보편적인 크기를 나타내는 표를 보겠습니다.


정수 자료형 

크기 

값의 표현범위 

    char 

    1 Byte

  -128이상 +127이하

    unsigned char 

  0이상 255이하

    short 

    2 Bytes 

  -32,768이상 +32,767이하

    unsigned short 

  0이상 65535이하

    int 

    4 Bytes 

  -2,147,483,648이상 + 2,147,483,647이하

    unsigned int 

  0이상 4,294,967,295이하

    long 

    4 Bytes 

  -2,147,483,648이상 + 2,147,483,647이하

    unsigned long 

  0이상 4,294,967,295이하

    long long 

    8 Bytes 

  -9,223,372,036,854,775,808이상      +9,223,372,036,854,775,807이하

    unsigned long long 

  0이상 18,446,744,073,709,551,615이하


표를 통하여 다음과 같은 사실들을 알 수 있습니다.

- 정수 자료형의 이름 앞에는 unsigned 선언을 붙일 수 있습니다.

- unsigned가 붙으면, MSB(부호 비트)도 데이터의 크기를 표현하는데 사용이 됩니다.

- 따라서 표현하는 값의 범위가 양의 정수로 제한이 되며 양의 정수로 두 배 늘어나게 됩니다.




7. 문자의 표현을 위한 약속, 아스키(ASCII) 코드


이번 7번 째 주제에서는 영어를 기준으로 하겠습니다.(컴퓨터가의 언어 표현을 영어로 먼저 표기 했기 때문입니다. 또한 아스키 코드는 자주 사용하게 됩니다.)


아스키 코드는 미국 표준 협회(ANSI: American National Standards Instute)에 의해서 제정된 '아스키(ASCII: American Standard Code Code for Information Interchange) 코드' 입니다.

- 컴퓨터는 문자를 표현 및 저장하지 못 합니다. 따라서 문자의 표현을 목적으로 각 문자에 고유한 숫자를 지정합니다.

- 인간이 입력하는 문자는 해당 문자의 숫자로 변환이 되어 컴퓨터에 저장 및 인식이 되고, 컴퓨터에 저장된 숫자는 문자로 변환이 되어 인간의 눈에 보여지게 됩니다.


따라서 실제로 컴퓨터에게 전달이 되는 데이터는 문자가 아닌 숫자입니다.


본격적으로 문자 표현에 대해 알아보기 전, ASCII 코드 표를 보고 진행 하도록 하겠습니다.



<출처 : Google 검색>


(ASCII 코드에 대해서 검색을 하게 될 경우 굉장히 많은 자료들이 존재 합니다. ASCII 코드에 관심이 있거나 필요하신 분들은 인터넷 상에 자료들이 많으니 검색을 통해 알아 보시기 바랍니다.)


미국 표준 협회에서 지정한 1 Byte 로 표현이 가능한 128개의 문자표 입니다.


소스를 작성 후 컴파일 시 각 문자는 해당 아스키 코드 값으로 변환이 됩니다.


C 프로그램 상에서 문자는 작은 따옴표('')로 묶어서 표현 합니다.



여기서 드는 의문점이 있습니다.


문자는 왜 char형 변수에 저장을 할까? 라는 의문입니다.


이유는 char형 변수가 문자열을 저장하기 위해 디자인 된 자료형이기 때문입니다.


문자는 연산을 동반하지 않습니다.


문자는 저장하고 보기 위한 것입니다.


또한 문자는 연산 보다 '문자열' 처럼 많은 양의 데이터가 대부분이기 때문에 부담이 되지 않는 char형 (1 byte) 변수를 사용합니다.


이렇듯, 문자 저장의 측명에서 보면 char형 자료형이 의미가 있게 됩니다.


결론적으로 문자를 저장하기 위해 특화된 정수 자료형이 char형 자료형 입니다.




8. 문자의 표현


서식문자 %c : 해당 숫자의 아스키 코드 문자를 출력하라는 의미입니다.


다음은 문자를 char형 변수에 저장하는 이유 입니다.

- 모든 아스키 코드 문자는 1 Byte로 충분히 표현 가능합니다.(ASCII 코드가 1 Byte로 표현 가능하도록 만들어 졌기 때문입니다.)

- 문자는 덧셈, 뺄셈과 같은 연산을 동반하지 않습니다. 단지 '표현' 에 사용될 뿐입니다.

- 따라서 1 Byte 크기인 char형 변수가 문자를 저장하기에 최적의 장소가 됩니다.

* 문자는 int형 변수에도 저장이 가능합니다 ! 문자라는 것은 사람이 보는 것이고, 실제로 문자에 해당하는 값은 '수' 이기 때문입니다.




9. 상수에 대한 기본적인 이해


int num = 3 + 2; 라고 했을 경우 3과 2도 메모리 공간이 필요합니다. 이유는 CPU에서 연산이 되기 위해서는 변수인 num 뿐만 아니라 3과 2도 메모리 공간이 필요하기 때문입니다.


C언어는 컴파일에 있어서 기본 자료형을 근거로 합니다.


C컴파일러는 써 놓은 숫자를 int형으로 표현을 해서 메모리 공간에 저장합니다.


그렇다면 8번 째 주제에서 문자는 사람이 보기 편하게 하기 위해 '표현'을 한 것일 뿐이고, 실제로 문자에 해당하는 값은 '수'라는 말씀을 드렸습니다.


그러면 4번 째 주제에서 말씀 드렸던 변수에 저장되기 전의 문자는 몇 Bytes 일까? 라는 의문을 가질 수 있게 됩니다. 이에 대한 내용은 다음의 예제를 보고 확인 하겠습니다.



예제에서 확인한 결과 문자라고 생각했던 'A'의 크기가 sizeof 연산에 의해 4 Bytes인 int형 인 것을 알 수 있습니다. 이 또한 변수에 저장 될 경우 형 변환이 이루어지게 됩니다. ( 또한 위의 예제는 이 글의 후반부에 다루게 될 리터럴 상수와 관련된 예제입니다. 이는 뒤쪽에서 다시 설명 드리겠습니다.)




10. 이름을 지니지 않는 리터럴 상수와 리터럴 상수의 자료형


이번에 다루게 될 내용은 이름을 지니지 않는 리터럴 상수 입니다.


연산을 위해서는 30, 40과 같이 프로그램상에 표현되는 상수(숫자)도 '메모리 공간에 저장되어야 합니다.'


글의 초반부에 사용했던 예제를 통해 알아 보도록 하겠습니다.



위의 예제를 통해 알 수 있는 사실은 여러가지가 있습니다.


1) 1, 2, 300, 400 처럼 저장되는 값은 이름이 존재하지 않습니다. (num1 이라는 '이름'의 변수가 '1'이라는 값을 가지고 있는 것입니다. '1'은 이름이 없습니다. 이렇듯 이름이 존재하지 않으니 변경이 불가능한 상수(리터럴 상수) 입니다.)

2) 뜬금 없이 1, 2, 300, 400 처럼 값을 주게 되면 CPU의 연산 대상이 되지 않습니다. 그러므로 메모리 공간에 저장이 되어야 합니다.

3) 글의 최후반부에 다루게 될 형변환에 대한 것을 알 수 있습니다.


이러한 내용을 바탕으로 리터럴 상수도 메모리 공간에 저장이 되어야 한다는 사실을 이해해 보면,  5 번째 줄의 문장 내용이 '정수를 표현 하고, 그 크기는 1 Byte로 하는 변수 인 num1과 num2, result1을 선언할게, 각각의 변수 num1과 num2에 저장될 값은 1과 2야. 그리고 선언한 num1과 num2의 + 연산을 통해서 나온 결과를 result1이라는 이름을 가진 변수에 저장할게.' 라는 내용이 되는 것을 알 수 있습니다.


또한 5 번 째 줄의 연산 과정에 있어서 변수인 num1과 num2가 연산이 되는 것이 아닌, num1과 num2에 저장 되어 있는 1과 2가 연산이 되는 것이므로 1과 2는 CPU가 연산하기 편한 int형으로 변환이 된 후 연산을 하고 해당 연산의 결과 값 또한 int형이 되어서 4 Bytes가 되지만 그 결과 값을 1 Byte의 char형 변수인 result1에 저장하는 것이기 때문에 4 Bytes의 결과 값이 1 Byte 로 형변환이 되어 저장이 됩니다.


이렇듯 변수에 저장되는 값이 처음부터 변수의 자료형에 맞춰서 저장이 되는 것이 아닌 먼저 상수에 대한 값을 저장할 메모리 공간이 필요하게 됩니다. 이는 연산과정에서도 마찬가지 입니다.


따라서 변수 선언 및 연산과정에 있어서 상수는 메모리 공간에 할당이 되어진 후 연산 및 변수에 저장이 진행이 되게 됩니다.

* int num = 3 + 4; 라는 문장을 작성한 경우 3과 4가 그대로 메모리에 남아 있어서 걱정인데 어떻게 하지? 라는 궁금증이 생기실 수 있습니다. 하지만 3과 4의 연산이 진행되고, 결과 값이 나올 때까지만 메모리 공간에 할당이 되어 있고, 변수 저장 및 다음 행으로 넘어가게 될 경우 메모리 공간에서 3과 4의 값은 증발하게 됩니다. 어차피 이름이 존재하지 않아서 접근 할 수 없는 값이기 때문입니다.


이와 같은 내용들을 바탕으로 리터럴 상수의 자료형이 결정되는 것 또한 알 수 있습니다.



위쪽에서 사용했던 예제를 다시 한 번 사용했습니다.


이번 예제에서는 리터럴 상수가 변수에 저장되기 전, 단순히 상수의 값을 어떤 자료형으로 지정해서 메모리 공간에 할당하는지 알아보기에 아주 간단한 예제 입니다.


7은 정수형 리터럴 상수이므로 int형으로 할당이 된 것을 확인 할 수 있습니다.


7.14는 실수형 리터럴 상수이므로 double형으로 할당이 된 것을 확인 할 수 있습니다.


문자 'A'는 실질적으로 문자가 아닌 숫자 값입니다. 아스키 코드표의 65는 'A'라는 문자와 매칭이 됩니다. 따라서 65는 정수형 리터럴 상수이므로 int형으로 할당이 된 것을 확인 할 수 있습니다.




11. 접미사를 이용한 다양한 상수의 표현


정수를 표현 할 때는 int, 실수를 표현할 때는 double입니다. 그 이외의 자료형을 가지고 상수를 표현하고 싶을 때 사용하는 것이 '접미사'입니다.


이러한 접미사들은 대,소문자를 구분하지 않습니다.


L이 붙으면 정수 형이고, 실수형에 붙으면 double long형입니다.


접미사를 통해서 상수의 자료형을 변경할 수 있습니다.


또한 다음과 같은 경우에는 에러가 발생합니다. 이러한 경우 접미사를 붙여서 사용하게 되면 에러가 발생하지 않습니다.


ex) float num1 = 5.789;

이 문장은 경고메시지가 발생하게 됩니다.

실수의 기본 자료형은 double형인데 그보다 표현 범위가 적은 float형 자료형을 사용하게 되면 데이터의 손실이 있을 거라는 경고메시지가 출력 됩니다.


이러한 경우 다음과 같이 접미사를 통해서 상수의 자료형을 변경하면 에러가 발생하지 않습니다.


ex) float num1 = 5.789f;

     float num2 = 3.24F + 5.12F;    (소문자 f 대신 대문자 F를 써도 됩니다.)


다음은 정수형 상수의 표현을 위한 접미사와 실수형 상수의 표현을 위한 접미사를 나타낸 표입니다.


접미사 

자료형 

사용의 예 

  U 

  unsigned int 

  unsigned int n = 1025U 

  L 

  long 

  long n = 2467L 

  UL 

  unsigned long 

  unsigned long n = 3456UL 

  LL 

  long long 

  long long n = 5768LL 

  ULL 

  unsigned long long 

  unsigned long long n = 8979ULL 


[정수형 상수의 표현을 위한 접미사]





접미사 

자료형 

사용의 예 

  F 

  float 

  float f = 3.15F 

  L 

  long double 

  long double f = 5.789L 


[실수형 상수의 표현을 위한 접미사]




12. 이름을 지니는 심볼릭(Symbolic) 상수: const 상수


글의 위쪽 내용 중 리터럴 상수는 이름이 존재하지 않아서 접근이 불가능 하다는 말씀을 드렸습니다.


하지만 이름을 지니는 심볼릭 상수라는 것도 존재 합니다.


심볼릭 상수를 선언 해주려면 변수 선언 문장의 맨 앞에 const라는 선언을 붙여줘야 합니다.

ex) const int MAX=100;    ㅡㅡ>   MAX라는 이름의 변수를 상수로 선언하겠다는 의미입니다.


const라는 것은 'const를 써서 해당 변수를 상수처럼 썼으면 좋겠다' 이러한 경우에 사용하게 됩니다.


const는 컴파일러가 인지하는 상수입니다.(리터럴 상수처럼 일시적으로 메모리 공간에 할당 되었다가 이름이 존재하지 않고, 의미가 없어져서 사라져 버리는 그러한 상수가 아닌 상수입니다.)


const는 변수를 상수화 시키는 키워드입니다.


const 상수는 메모리 공간에 할당되는 상수가 아닙니다.  const int MAX=100; 에서 100이라는 값이 const int MAX라는 변수에 할당 되기 위해 메모리 공간에 일시적으로 할당이 될지는 몰라도 MAX라는 변수에 할당이 되고 난 후에는 MAX라는 변수 자체가 100이라는 상수가 되기 때문입니다.


이러한 상수화된(const상수) 변수의 값을 변경하려 할 시 에러가 발생합니다. (개인적으로 포인터로 메모리에 직접 접근을 하게 될 경우 가능 할 것 같다는생각이 듭니다. 확실한 것은 아니고, 추후 포인터를 다루면서 제대로 알아보도록 하겠습니다.)



13. 자료형의 변환


이번에 다루게 될 내용은 자료형의 변환입니다.


여기까지 이해하시면서 잘 따라와 주셨으면 자료형의 변환에 대하여 어느정도 이해 하셨을거라 생각이 됩니다.


단순하게 'int형을 double형으로 바꿔야겠다. int inum=4; 를 double형으로 4.0으로 바꿔야지.'라고 생각하셔도 틀린 것은 아닙니다.


다만 저러한 형식으로 이해를 하시게 되면 정수와 실수 사이의 형변환에 있어서 정수형의 표현방식, 실수형의 표현방식에 있어서 문제가 발생하게 됩니다.


그렇다면 형변환을 어떻게 이해하면 좋을까? 라는 생각을 해보겠습니다.


정수형으로 선언된 자료의 '비트열'을 실수형 자료의 '비트열'로 다시 구성하자 라는 식으로 이해를 하시면 정수형과 실수형의 표현방식에 있어서 발생하는 문제가 줄어든다(?) 라고 생각하시면 되겠습니다.


실수의 표현 방식은 데이터의 표현방식이라는 글에서 제대로 다루지 않았지만 4 Bytes를 기준으로 앞의 반절은 소수점 이상부분을 표현하고, 뒤의 반절은 소수점 이하부분을 2진수 0000 0000 0000 0101 . 0000 0000 0000 1010 이런식으로 표현하면 되지 않을까? 라는 생각을 하실 수 있습니다.


하지만 이러한 경우 오차도 엄청 많이나게 되고, 표현 할 수 있는 범위도 줄어들게 됩니다. 따라서 실수의 표현방식을 오차도 적고, 표현 범위도 적게 하는 가장 보편적인 기본화 되어 있는 공식을 사용하여 구성하게 되어 있습니다.(실수 표현 방식의 기본화 되어 있는 공식은 인터넷상에 많은 자료가 존재 합니다. 궁금하시거나 관심 있으신 분들은 인터넷 검색을 해보시는 것을 권장합니다.)


이렇듯 정수형과 실수형간의 형변환에 있어서 굉장히 작은 값인 1, 3 이러한 값들일 경우 표현하는데 어려움이 없겠지만 값들이 굉장히 커지게 되면 정수형과 실수형의 표현방식의 차이로 인하여 형변환 하는데에 어려움이 따르게 됩니다.


따라서 컴퓨터는 형변환을 하게 될 경우 실수형에서 정수형으로 형변환을 한다는 의미는 실수형 표현방식으로 표현이 되어 있는 값의 2진수 비트열을 정수형 표현 방식의 2진수 비트열로 재구성 하는 것을 의미 합니다.


또한 자료형의 변환 시 오차 발생, 데이터 손실이 생길 수 있습니다.

ex) 실수형 4.123을 정수형으로 형변환 하게되면 프로그래밍 환경에서 정수라는 것은 소수점을 포함하지 않은 음의 정수, 0, 양의 정수만을 의미하기 때문에 변환 시 소수점 이하 .123은 다 버려지게 되고, 4 라는 값으로 형변환이 되게 됩니다. 이때 .123이라는 데이터의 손실이 발생하게 됩니다.


자료형의 변환의 종류는 크게 2가지로 존재 합니다.

1) 자동 형 변환

2) 명시적 형 변환 : 강제로 변환 시킵니다.


자동 형 변환 중 하나인 대입연산의 전달과정에서 발생하는 자동 형 변환을 다음 예제를 통해 확인 하겠습니다.



위의 예제는 피연산자의 자료형 불일치로 발생하는 자동 형 변환을 나타내는 예제입니다.


이렇듯 앞서 설명한 오차 발생, 데이터 손실, 대입 연산시 발생하는 형변환에 대한 내용들을 확인 할 수 있습니다.


또한 다음의 자동 형 변환 규칙을 근거로 int형 데이터 245가 double형 데이터 245.000000으로 형 변환이 되어 변수에 저장 되는 것을 확인 할 수 있습니다.

int    ㅡ>    long    ㅡ>    long long    ㅡ>    float    ㅡ>    double    ㅡ>    long double


* - 산술 연산에서의 자동 형 변환 규칙

  - 바이트 크기가 큰 자료형이 우선시 됩니다. (정수형, 실수형 각각의 형에서는 바이트 크기가 큰 자료형이 우선시 됩니다.)

  - 정수형보다 실수형을 우선시 합니다.(정수 자료형을 실수 자료형으로 형 변환을 하게 되면 데이터 손실이 현저하게 줄어들기 때문입니다.)

  - 이러한 규칙은 데이터의 손실을 최소화 하기 위한 기준입니다.


또다른 자동 형 변환 중 하나인 정수의 승격에 의한 자동 형 변환이 있습니다.


다음은 정수의 승격에 의한 자동 형변환 예제 입니다.(앞서 사용한 예제를 다시 사용하겠습니다.)



위의 예제에서 확인 할 수 있듯이 정수의 승격에 의한 자동 형변환이라는 것은 일반적으로 CPU가 처리하기에 가장 적합한 크기의 정수 자료형을 int로 정의하는 것을 말합니다.



마지막으로 자료형의 형 변환의 종류 중 다른 하나인 명시적형 변환(강제로 일으키는 형 변환) 에 대하여 알아 보겠습니다.


우선 명시적형 변환을 설명하기에 앞서 예제를 먼저 본 후 설명을 진행하도록 하겠습니다.



일반적으로 사람이 생각 할 때, '3/4=0.75 가 나오겠지?' 라는 생각을 하게 됩니다. 하지만 결과를 보면 0.000000이 출력되는 것을 확인 할 수 있습니다.


앞서 작성했던 글 중, 변수와 연산자 부분에서 연산기호의 우선순위 부분이 있었습니다.


이 때, 산술연산등이 먼저 진행이 되고, 대입연산이 진행이 되었습니다. 이러한 점을 바탕으로 double형 변수 divResult에 값이 저장 되기전, num1 / num2의 자료형이 int형인 상태에서 연산이 진행이 됩니다. 그렇게 되면 프로그래밍에서 정수 3과 정수 4를 나누면 몫은 0이 됩니다. 따라서 연산의 결과 값이 int형 정수인 0이 됩니다.


int형 정수인 0을 double형 변수인 divResult에 저장을 할 때 0을 실수로 형 변환 해도 0.000000이 됩니다. 따라서 divResult에는 0.000000이라는 값이 저장이 되는 것 입니다.


이러한 것을 해결 해주는 방법이 바로 명시적 형 변환(사용자가 직접! 형 변환을 선.언 해준다!)입니다.


위의 예제사진의 소스코드를 다음과 같이 변경 해주면 됩니다.


7번째 줄의 divResult = num1 / num2;를  divResult = (double)num1/ num2; 또는 divResult = num1 / (double)num2; 라는 형식의 문장으로 변경 해주게 되면 연산자의 우선순위에 근거하여 연산이 이루어지기전 num1 또는 num2의 형변환이 이루어지게 되고, 정수의 승격에 의한 자동 형변환에 의하여 남은 정수형 변수가 double 형으로 변환이 되어서 double형 자료형간의 연산이 이루어 지게 됩니다.


그렇게 되면 3.0 / 4.0 이라는 연산을 하게 되는데 이 때 나오는 결과는 0.75로 double형 자료형의 결과가 나오게 됩니다.



이것으로 이번 글의 내용인 상수와 기본 자료형에 대하여 알아 보았습니다.


내용에 대하여 제대로 설명을 못 한 점도 있고, 내용 자체가 (저도) 이해하기 약간 난해한 점도 있어서 이해가 제대로 되지 않으신 분들도 계실 겁니다.


이러한 부분은 추후 포인터와 메모리 부분을 다루면서 보다 정확하게 설명하겠습니다.






다음에는 printf함수와 scanf함수 에 대하여 공부하고, 글을 올리도록 하겠습니다.








'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01
C언어 데이터 표현방식  (0) 2016.12.25
C언어 변수와 연산자  (0) 2016.12.24
C언어 공부 시작  (0) 2016.12.21

+ Recent posts