2012년 10월 14일 일요일

switch문을 통한 선택적 실행

이 함수는 식당에서의 메뉴판(?)이라고 생각하면 쉽습니다.

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

1~5를 선택하면 case1~5를 6이상을 하면 default를 출력하는 프로그램입니다.
t값에 따라 case가 정해지는 겁니다.
음 제가 봐도 설명 참 못했네요.

수학으로 예를 들면 f(t)와 같다고 보시면 되겠습니다.
여기에서의 t는 문자가 될 수도 있고, 숫자가 될 수도 있습니다.

뭐 예제가 쉬워서 더 설명할 것도 없을 것 같습니다.

두번 째로는, break문을 생략한 switch문을 보시겠습니다.



break문을 생략하였기 때문에, 밑에 A와a가 같은 1이 나올 수 있었습니다.

아 그리고 5번 줄에 두사진의 자료형이 다른거 양해 부탁드립니다.

char형이 문자의 자료형인데, 맨처음 예제에서 int로 쓴 것을, 안 고쳐서 ㅋ;




이로써, break문을 생략한 switch문을 마치고 포스트도 마치겠습니다.

반복문에서 생략하는 함수와 벗어나는 함수(continue함수, break함수)

안녕하세요. 텐더입니다.

이번포스트에서는 continue함수와, break함수를 볼텐데요.

컴파일러에서의 내용을 알려드리겠습니다.

continue: 전 문장의 if조건이 참이면 생략을 하고 다음 문으로 넘어갑니다.
break: 전 문장의 if조건이 참이면 반복문을 아예 종료합니다.

저 함수들의 내용을 말을 하여도, 처음듣는 사람은 이해를 못할 것이므로, 간단한 예제를 통해 알아가보겠습니다.

이 프로그램의 내용은 9단의 9X9부터 반복문을 그만두는 내용입니다.

이 코드를 만들 때, 너무 귀찮아서 대충 만들었습니다.(양해좀ㅈ;)

결과는 보시다시피 9X9부터 끝.

2012년 10월 13일 토요일

피 연산자가 세 개인 삼 항 연산자(조건 연산자에 대하여)

이번 포스트는 제목부터 심상치가 않은 것 같습니다. 말을 꼬아놓은 듯해요. 하하

혹시나 모르는 분들을 위해서 제목을 하나하나 짚어드리겠습니다.

피 연산자(연산을 당하는(?) 연산 대상)가 세 개인 세개의 항을 나타내주는 연산자(이것의 내용을 담을겁니다)

이 연산자는 if ~ else문을 일부 대체할 수 있다고 합니다.

이 조건 연산자의 예제를 보자면,

ex) (t1>t2) ? (t1) : (t2); //여기서 소괄호는 생략이 가능합니다.

이런데요. 여기서 눈치챈분들도 계실것이고, 이미 아는 분들도 계실텐데요.

이 조건 연산자는 (조건) ? 변수1 : 변수2(여기서 변수는 문자가 될 수도 있고 상수가 될 수도 있습니다.) 여기서 ? :가 조건 연산자입니다.

알고보면 복잡해보이지만 if ~else보다 편한 문장인데요.

이 코드의 내용은 조건이 참이면 변수1을 또는 거짓이면 변수2가 출력됩니다.(출력입니다.)

실습으로 더 자세히 알아보겠습니다.


이 코드들은 간략하게 말해서 조건이 참일 땐, 입력한 상수에다 -1을 곱해주고, 조건이 거짓일 땐, 입력한 상수의 +1을 곱해주는 프로그램입니다.



쉬워서 이해가 쉽게 가셨으리라 알겠습니다.

그럼 다음 포스트에서 뵙겠습니다.

조건적 실행(if함수,if ~ else함수)

전 포스트 반복함수들 너무 어려워서 오래걸렸네요 ㅠㅠ

이번에는 조건적 실행을 하는 함수들에 대해 알아 볼 껀데요.

우선 if함수부터 알아보겠습니다.

1. if 함수

if함수는 조건을 if( 조건 ) <ㅡ 요 안에 쓰구요 조건이 참이면 그 밑에 중괄호를 실행시켜줍니다.

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





주의깊게 볼 것은 없습니다.

양식과 똑같이 했으니깐요 ㅎㅎ...

또 하나의 예제를 볼 건데요.

이번엔 다양한 옵션중에 택1하여 연산하는 프로그램을 만들겁니다.

한번 보시죠.




단, 주의할 것은 계산할 수를 입력할 때, 정수보단 실수로 입력하는것이 좋을 것입니다.


그리고 마지막은 필자에 소망이기도..... ㅇ ㅏ바가 땡기네 ㅠㅠ

그리고 지금은 반복문에 의한 if문의 사용을 보겠습니다.


이 코드들의 내용들을 요약하자면 1부터 50까지 3의 배수와 5의 배수를 가려내서 출력한다는 내용들입니다.

& 이 기호 기억나시죠? 비트 연산자와 여러가지 연산자 포스트에서 다뤘던 내용 ㅋ 그리고라는 뜻입니다.
자세한거는 이 링크에서

출력 결과는 3의배수 5의 배수 3의배수 3의배수 ......이렇게 출력됩니다.

왜 번갈아서 나오지 않는지는 아시죠?(for함수 주목)

2, if ~ else 문


이것도  do ~ while문과 비슷한 문장입니다.

if(조건)
{
//if 영역
}
else
{
 // else의 영역, if의 조건이 거짓일 때 발동하는 영역
}

생각보다 볼 것 없죠? ㅋㅋ

예제를 보겠습니다.




정석 코드라 볼 껀 없습니다.


이걸로 조건적 실행 포스트를 마쳤습니다. 별로 어려운내용은 없군요.

다음 포스트에서 뵙죠.

2012년 10월 7일 일요일

문장의 반복을 해주는 문항(while문,do~while문,for문)

이번 포스트는 반복을 하게 해주는 문항을 소개하고자 합니다.

1.먼저 반복문이란?

말 그대로 "Hi"란 문장을 반복시키고 싶을 때 쓰는 문항인데.

반복문을 만드는 방법엔 총 세가지가 있습니다.

제목과 같이 while문 do~while문 for문 이렇게 세 가지.

2.while문

while문은 특정 영역을 계속 반복하는 문입니다.

예를 보시겠습니다.

int main(void)
{
int tender=0 // 꼭 0이 아니어도 됩니다.

while(tender<5) //0부터 4번째까지 반복(소괄호안이 참이면 반복, 거짓이면 반복 종료)
{
printf(www.Beomicollection.blogspot.com);
tender++; // 0번 째를 출력하면 1번 째를출력, 1번 째를 출력하면 2번 째를출력....
}

이렇게 쓰는 것입니다. 어떻게 생각하면 알고리즘이라고 할 수도 있겠습니다.

실험으로 자세히 알아보겠습니다.


왜 마지막번호가 99인데 왜 100번이냐면 시작은 0부터 시작해서그렇습니다.

예와 똑같이해서 딱히 설명할 것은 없네요.
그런데 여기서 주의할 것은.

출력함수 다음줄에 ++연산기호를 주석처리하거나 쓰지 않으면 무한 반복이 된다고 하네요 ㅋㅋㅋ.

이를 무한루프라고도 합니다.

궁금해서 해봤습니다 ^^; 
정말로 계속 저 문장만 반복되더군요 ㅋㅋㅋ;


그리고 예제처럼 while함수 다음 중괄호({})를 쓰지 않아도 됩니다.

이렇게요
ex)
while
printf("편한데?"), tender++;

그런데, 이건 억지로 줄인것이라 중괄호를 쓰는 것이 좋다고 합니다.

3.do ~ while문

do ~ while문은 처음에 반복조건을 만족하지 못하면 아예 실행을 하지 않는 while문과는 달리, 반복영역을 최소한 한번 실행하는 함수입니다.

이렇게 설명하면 이해안되실 분들이 계실테니(나도지만), 예문보시면서 이해를 돕도록 하겠습니다.


do
{
printf("www.beomicollection.blogspot.com");
tender++;  //
} while(tender<5); //만약 이 반복조건이 만족하지 못해도 최소 한번은 블로그주소를 출력합               니다.

위 코드는 do~while문의 정석 코드입니다. do다음 중괄호영역이 반복 구간이고 중괄호 다음 while부분이 반복조건입니다.

그런데, do ~ while문보다는 while문을 더 많이 씁니다.

왜냐하면, 조건이 앞에있으면서 이해하기도 쉽기 때문입니다.

하지만 while문 보다 do while문이 더 자연스러운 코드도 있습니다.
(아직 거기까지 깊게 들어가지않았으니 이정도만 설명하겠습니다.)

3.for

예전에 어떤 코드를 위해서 for함수에대해 언급한적이 있었을겁니다.

그런데 이번엔 제대로 설명할 기회가 되었습니다.

우선, for함수를 이해하기전에 while문의 방식을 순서대로 꼽아 for설명과 연결시켜 자연스레 설명해보겠습니다.

우선 while문 예제입니다.

ex)
int 변수=0;         //1반복을 위해 변수 저장
while(변수<5);   //2반복을위해 반복조건 선언
{
printf("www.beomicollection.blogspot.com");
변수++;   //3반복조건의 거짓을 위해 변수 증감식 선언
}

끝;

위에서와 같이 반복을 위해 조건 1,2,3이 필요한데요. 그런데 조건들이 다 따로따로 흩어져있어서, 긴 코드를 작성하는데는 오래걸릴겁니다.

그래서 위 조건 3개를 한 곳에 모으는 함수가 생긴겁니다.

그 함수는 이름하여 for함수.

쓰는 양식은 이러합니다.
{
for(변수, 조건, 증감)
{
-------함수칸-------;
}
}
while문 보다 훨씬 짧아졌음을 알 수 있습니다.

예를 보시겠습니다.

ex)
for(tender=0; tender<5; tender++)
{
printf("www.beomicollection.blogspot.com");
}

return 0;

맨 위에 while예제와 같습니다.

이상으로 포스트를 마치겠습니다.

2012년 10월 4일 목요일

scanf 함수의 유용한 정보들.

우선 scanf 함수의 정수입력할 때, 서식문자는 %d, %o, %x 이렇게 세 개가 있습니다.

코드 형태는 다 아실 것이고.

두 번째는, 실수입력할 때, 서식문자는 %f, %e, %g 이렇게 세 개이며, 출력함수 printf 함수에서는 저 세 개의 서식문자에 기능이 각각 달랐지만, 입력함수 scanf 함수에서는 저 세 개의 서식문자가 float형태로 똑같이 입력됩니다.

이 때, 이런 질문을 생각한 사람도 있을 것일 텐데요.

"나는 실수 계산이 빠르면서 정확도도 어느정도가지고 부담스럽지 않은 double형을 쓰고 싶은데요?"

쓸데없이 길게 만들었지만, 자료형 더블을 사용하고 싶을때는, 앞에 포스트 "자료형을 고르는 방법."(링크:자료형을 선택하는 방법 포스트 바로가기)에서 설명했 듯이, 자료형 double을 입력하려면 %lf를 자료형 long double을 입력하려면 %Lf를 사용하면 됩니다.

실험으로 자세하게 파고들어 가보겠습니다.
따로따로 할 것을, 정수 실수 둘다 같이 한꺼번에 했더니 링크가 오류먹네요.
다들 조심하세요. 링크 오류...

뭐 다 아실거라고 믿습니다. 서식문자 %f, %lf, %LF만 조심하면 되니까요. 

위 설명처럼 셋 다 %f 표기법으로 나오구요. (float 자료형 방식)

뭐 이건 패스할게요 ;;

오타 용서해주세요. 한꺼번에 하려다 불상사가 일어났어요;;;;

이걸로 포스트를 마치겠습니다.

2012년 10월 3일 수요일

print함수에서의 유용한 정보 모음(이스케이프 시퀀스,Escape Sequence)

첫시작은 프린트함수에서 사용하는 기호부터 알아보겠습니다.

특수문자
의미
\a
경고음
\b
백스페이스(backspace),키보드에서 ()
\f
폼 피드(form feed)
\n
개 행(띄어쓰기)
\r
캐리지 리턴(carriage return)
\t
수평 탭
\v
수직 탭
\'
작은따옴표 출력
\"
큰 따옴표 출력
\?
물음표 출력
\\
역슬래쉬 출력

별로 어렵지 않죠? 쓰는 예로는 밑에처럼.

ex)printf(" \a \b \f \n \r \t \v \' \" \? \\");

이렇게 쓰는건데, 의미는 위에 있는대로 합니다.

실험으로 자세히 알아보겠습니다.


1.\a
실행하면 본체에서 삐 소리가 난다.

2.\b
\b앞에 aa를 붙여놨다.

결과는 a하나만 출력
3.\f

처음엔 폼피드가 뭔가해서 사진처럼 저랬는데, 알고보니 프린트할 때, 저 기호부터 한 장을 뛰어넘은다음 프린트재개를하는 기호더라구요 ㅋㅋㅋ.

"이게뭐짘ㅋㅋㅋ"까지 프린트하고 여자성별표시부터 한 장 뛰어넘은 후, 인쇄 재개라고 합니다.

4.\r (\n은 모두 아실거라생각해서 패스)

이것은 캐리지리턴이라고 하는 명령을 하는 함수인데요.

사진을 보면서 설명하겠습니다.

보시면 출력엔 잉이 없어졌죠? 어떻게 된거냐면요.
\r뒤에있는것(띄어쓰기 한 칸)을 맨 앞에 덮어씌운겁니다.

다른 예를 보겠습니다.


\r뒤에 아무것도없어서 그대로 출력이 됩니다.

다른 예제를 보겠습니다.
잉잉과 \r뒤에 아 별~ㅠㅠ까지는 잉잉보다 훨씬 내용이 많습니다.

출력은 덮어씌우는거니까 \r앞에 있는 내용은 \r뒤에 있는 내용이 덮어 씌웁니다.

5.\t

보시는바와 같이 Tab키라보시면 되겠습니다.

6.\v

수직 탭이라는 것은 C언어에서는 저 이상한 기호하나만 출력하지만, 다른 컴파일에서는 LF(LineFeed) 역할을 한다고 한다.(라인피드는 알아서 검색하시길)

나머지는 다 무슨 뜻인지 알 것이라 생각한다.

두 번째, 서식문자의 종류와 그 의미.


서식문자
출력 대상 함수
출력 형태
%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
포인터의 주소 값

이것들을 어떻게 쓰는지는 여태까지 해온 결과로 다 아실 수 있을거라 믿습니다.

그런데 여기서 참고로 알아야 할 것들만 골라서 하겠습니다.

1.정수를 출력할 때,%o와 %x의 부가설명

%o와 %x는 각각 8진수 16진수 서식문자이다.

그런데, 이는숫자만을 출력한다. 그래서 %#o, %#x로 써준다.

그러면 확실히 "아! 이건 8진수구나, 아 이건 16진수구나."라고 알 수 있다.




2.실수를 출력할 때, %e, %g의 부가설명

%f는 0.000001을 그대로 출력하지만, %e는 0.000001을 1.0e-6으로 표현합니다.

눈치채신분도 있겠지만, 이는 1.0x10^-20(일점영곱하기십에마이너스이십제곱)이다.



그리고 %g는 소수점 4자리까지는  %f 처럼 출력하다가 5자리부터는 %e처럼 출력합니다.

실험으로 알아보겠습니다.


변수 초기화를 %f형식으로 입력해서 소수점 5째 자리부터 %e형식으로 출력합니다.

그리고, 변수를 %e형식으로 초기화해도 결과는 같습니다.



셋 째, 위에 표에는 없지만 필드 폭을 지정해서 출력하는 방법.

%10d: 필드 폭을 10칸 확보하고 오른쪽 정렬
%-10d: 필드 폭을 10칸 확보하고 왼쪽 정렬

※위에 d는 숫자냐 문자냐에 따라서 각각 다르다.(문자면s 정수면d 실수면f 등..)

마지막으로 실험을 통해서 알아본 뒤, 포스트를 마치는걸로 하겠습니다.


아시죠 변수로 저장 및 초기화 안하면 수라도 프린트함수에서 큰따옴표로 가둬야 한다는것!

근데 솔직히 저도 이거 정신없이해서 왜 결과가 이렇게 나왔는지 정확히 판단을 못하겠네요. 대충 이렇게 나온답니다. ㅋㅋㅋㅋㅋㅋ 아 무책임한것 봐.

아무튼 자야할시간이라 이번주 포스트는 여기서 마치겠습니다.