우리들의 Google Night


30분이나 늦게 간 구글 나이트엔

이미 저녁을 먹고 오프닝을 하고 있었다....

분위기는....

재미있는 강의와 그걸 즐기는 학생들의 모임인듯 했다

신나게 이야기하는 모습, 그에 반응하는 모습은

왠지 나도 그런 모습으로 만들고 있었다....


오프닝에서 가장 인상적이었던 것은

요즘 대학생들이 대학생 답지 못하다는 것이었다

아이가 아이다운 생각과 행동을 할 때 그 아이가 순수하고 아이다워 보이듯

대학생도 대학생다운 생각과 행동을 해야하는데

그렇지 못하다는 것이었다....

4학년 2학기의 나로선 조금더 일찍 이런이야기를 듣지 못한것이 아쉬웠다...



그리곤 Ice Breaking 시간이었다...

신문을 접어서 그 위에 올라가는 엠티의 전형적인 게임인데도 불구하고

역시 적극적인 사람들만 온듯

빼는 사람이나 싫어하는 기색을 볼 수 없었다....

아쉽게 3등으로 선물은 못받았지만

어느 엠티에서 했던 게임들(술먹기 전에 한 게임들) 보다 재미있었다...


혹시 노정석이라는 사람을 아는지 모르겠다...

(사실 나도 이사람 이름만 듣곤 누군지 몰랐다...)

궁금한 사람은
http://www.hacklib.com/Security/Story/postech.html
이 글을 읽어보자....마치 소설같다... ㅎㅎ

그의 인생 자체가 소설이다...

아니 소설보다 더 흥미진진하다...

(이야기 듣는데 집중하면서 발로 대충 찍어서 흔들렸다...)

그의 인생의 원칙이다....

그는 물었다... 자기 자신에게 얼마나 솔직한지...

우린 10%의 꿈과 90%의 남의 시선으로 나 자신을 만든다...

그는 달랐다....

그저 하고 싶은것에 매달렸고

열정을 운운하기 보다

자신이 하고 싶은것을 한다면 열정은 자연히 생긴다고 했다...

해커로서의 인생에 있어서 구치소에도 갔었고 대학교 무기정학도 당했었다

정학기간엔 당구를 즐기며 미친듯 다마수를 늘렸고

레이스를 즐겨서 아마추어 경기에서 1등을 하기도 하고

인천공항 고속도로를 달리며 손에 꼽히는 속도를 내보기도 했단다...

창업과 성공, 실패를 거듭하고 그는 구글에 자릴 잡았다...

(그가 하고 싶은 말인데 길어서 못 외워 적어왔단다... 그는 너무 인간적이다...)

꼭 하고 싶은 일을 찾으라고 했다...

성공해보고 실패도 해보라고 했다...

그의 인생 만큼이나 그의 이야기엔 빠져들 수 밖에 없었다....



그의 이야기가 끝나고 잠시 쉬는 시간을 가졌다...

난 화장실로 달려갔다...

ToT(Testing on the Toilet)이 있는지 궁금했다!!!

소변기 앞에도~!!!!!!
좌변기 앞에도!!!!!!!!!!
ToT가 있었다!!!!!!!!!!

오!!!!!!!!!!!!!!!!!!

(그럼 있다고 그랬는데 설마 없을라고...)

내용은 영어라서 통과~~

나중에 물어본 사실이지만

저 ToT는 아무나 만들어서 제출을 하면 심사(??)정도의 과정을 거쳐서

전 세계로 구글로 배포된다고 한다...


또 마이크로 키친!!!!!

구글에 가면 저런 마이크로 키친이 사방에 널렸다...

마음것!!!!!!!!!!!!!!!! 먹을 수 있단다!!!!!!!!!!!!!!!!!!!!

실제로 살 찌는 사람이 많다고 한다....

이것도 구글 오피스 투어를 하면서 들은 이야기지만

마이크로 키친과 특정 사원과의 거리가 어느정도를 벗어나면 안된다고 한다...

그게 구글 사규에 있단다...

그래서 실제로 마이크로 키친을 옮겨주거나 신설하는 일이 벌어지기도 한단다....


또 주변의 놀이기구들....

포켓볼 테이블도 탁구 테이블도 있다...

위도 있었는데 발로 찍어서 흔들려서 버리자.....

소파도 있고 안마기기도 있고

수유실도 있고 좌식 다실도 있다....

최고의 회사다......


짦은 휴식시간이 지나가고

구글의 제품 소개를 해줬다...

평소에 쓰던 구글 제품들과 안쓰던 제품들도 소개해줘서

왠지 써보고 싶은 마음을 갖게 했다.... ㅎㅎ

그리곤 또다른 경기!!!

iGoogle꾸미기를 했다...

모르는 사람들 앞에서 나서는 일이 별로 없는 나였지만

워낙 분위기가 후끈 후끈해서

iGoogle을 쓰고있는 내가 만들기로 했다....

으하하!!!

1등이다!!!!!!!!!!!!!!!!!!!!!!!!

상품으로 목베게를 받았다...

구글 티셔츠가 갖고 싶었지만...

아까한 신문지 접기 1,2등 팀이 다 가져가 버렸다... ㅠ.ㅜ



그리곤 구글 투어~

염재현님을 따라 투어를 했다..

(이분이 최연소 검색엔진 연구원이란다... 헉!! 27살 이란다.... 부럽다... 구글에 취업하다니.. ㅠ.ㅜ)

인상적인 것들이 많았다...

(사진을 몇장 찍었지만 사진을 찍으면 안되는 공간이라 자삭..)

회의실 이름이 가야, 발해, 백제 이런식으로 한국어 이름으로 되어있었고

프린터기나 복사기들은 만두, 김밥, 잡채 같은 음식이름으로 되어있었다

구글은 뭐가 달라도 달랐다....

야경이 잘 보이는 곳으로 안내해 줬는데

테헤란로의 야경은 정말 멋졌다....


투어가 끝나고 계속 염재현님을 따라 테이블에 앉았다

나이도 비슷하고 1년밖에 안됐다고 하셔서

뜨끈 뜨끈한 정보를 들을 수 있을것 같았다....

회사에 대한 많은 이야기를 들었다...

거의 수평적인 직원구조와 상호평가제도

큰 문제가 없다면 집에서 일을 해도 상관 없고

우리나라의 가족적인 기업보다 더 편한 회사

다른 기업들이 할 수 없는 일들을 하고 있는 구글....


구글 신화와 야망이라는 책과 이런저런 선물들을 받아들고

아래 사진에 있는 포스터를 얻어서

난 구글 코리아를 나왔다...


구글에 취업하고 싶은 생각이 들었다....

지금 내가 취업하기엔 좀 늦었다...

내 실력이 뛰어나지도 않고 영어도 잘 못한다

하지만....

내일도 늦어있진 않을것이다...

2년? 3년? 후에라도 난 구글에 가고 싶다....

아니!!

구글에 가야겠다!!!!!!!!!

by 그아이 | 2009/08/29 17:42 | 머릿속 이야기 | 트랙백 | 덧글(5)

Google Korea에 가는 길....

며칠전 구글 코리아 블로그에서 구글 나이트에 참석해보라는 글이 떴다...

뭔가 궁금하기도 했지만

무엇보다 구글이라는 단어에 흥미를 느꼈다...

간단한 신청을 하고 기다려야 했다...

구글에서 하는 행사인데다가 100명만 초대한다는 말에

사실 기대는 하지 않았다...

(다들 이렇게 삽입했길래... 나도 한번.. ㅋㅋ)

구글 나이트 바로 전날~!!! 메일이 도착했다... ㅎㅎ



당일...

6시 모임에도 불구하고

금요일에대한 교통체증과 구글 본사를 미리 구경하겠다는 생각에

2시부터 준비를 하고 3시 반도 안되었을때 난 이미 집을 떠나고 있었다...

이런....

예상대로 차가 별로 없었다...

4시 버스를 타야했다....

그래도 평소에 한시간이면 가는 거리기에 늦어야 두시간이면 충분히 가고도 남을거라 생각했다

버스는 거의 한시간을 제자리에 서있었고

모임시간인 6시를 5분이나 넘긴 후에 서울에 내려줬다....

급한 마음에 택시를 잡아 타고

구글코리아가 있는 강남 파이넨스 센터로 가자고 했는데

기사 아저씬 모르신단다... ㅠ.ㅜ

네비마저 모른단다... ㅠ.ㅜ

파이넨스 센터로 예상되는 건물 앞에 날 내려주시곤

무책임하게 떠나가셨다...

그리곤 물어 물어 여섯시 반이 되서야

구글 코리아에 도착했다...

by 그아이 | 2009/08/29 16:42 | 머릿속 이야기 | 트랙백 | 덧글(1)

#4 함수

우린 아직 함수를 배우지 않았지만 계속 접하고 있었다.

지금까지 사용한

printf()

scanf()

if()

for()

while()

이것들이 모두 함수이다.

이정도면 뭔가 감이 오지 않는가...?

함수라는것들 뒤엔 모두 ()가 있다는 것이다.

그 안에 무엇이 들어가든 일단 ()가 있다는것만 알고 다음내용을 보도록 하자

 

그럼 도대체 함수는 무엇인가...?

우리가 외우면서 쓰던 것들은 뭘 했나?

어떤 일을 해주는 일종의 작은 프로그램 덩어리이다.

그 덩어리들을 잘 모아서 조립해 놓으면 하나의 프로그램이 된다.

printf()는 출력하는 일을

scanf()는 입력받는 일을 하는 함수들이다.

 

이해를 돕기위해 실생활의 예를 한번 들어보자...

밥통이라는 기계가 있는데 이것을 함수라고 보자

밥통이라는 함수는 쌀과 물을 넣으면

안에서 지지고 볶아서 밥을 만들어준다.

그럼 그 밥통은 함수이고 쌀과 물이 입력이고 밥은 출력이다.

뒤에서 함수와 비교해줄테니 외우지는 말자...

 

우리는 함수를 사용뿐만 아니라 만들기도 했다

배우지도 않았는데 언제 썼냐고~?

우린 계속 main()을 만들어왔다.

main()도 함수이다.

그럼 main()에서 시작해보자

 

void main(void) {

}

 

이렇게 썼던것을 기억할것이다.

#1을 기억하는지 모르겠지만

앞의 void는 없다는 뜻이고

뒤의 void도 없다는 뜻이었다

그럼 앞과 뒤의 차이는 뭔가...?

앞의 void는 출력형식이고

(출력 형식을 반환형이라고 부르겠다. 흔히 말하는 return값, 그 타입을 말한다)

뒤의 ()안에 있는 void는 입력형식이다.

(입력형식을 매개변수라고 부르겠다. 함수의 인자 혹은 parameter라고 부르기도한다.)

둘다 아무것도 없다는 뜻은

물이나 쌀도 안넣고 밥도 안나온다는 뜻이다...

아무것도 눈에띄는게 없으니 우리가 하나 만들어보자...

 

#include<stdio.h>

 

int sum(int, int);

 

void main(void)

{

int a = 2;

int b = 3;

printf("%d", sum(a, b));

}

 

int sum(int x, int y)

{

return x + y;

}

 

전처리기(#으로 시작하는것)와 main()사이에 뭔가 하나 생겼다.

 

int sum(int, int);

 

앞에서 들은 바에 의하면 이게 함수이다.

앞의 int는 정수형으로 출력을 하고

뒤의 두개의 int는 정수형으로 입력한다는 것 같다.

근데 내용이 하나도 없다...;;;

그리고 main()이 끝나는 부분에 앞에서 본것과 거의 같은 문장이 하나 더 있다.

 

int sum(int x, int y) {}

 

이게 제대로 함수인것 같다.

정확히 말하자면 위에서 본

int sum(int, int); 이것은 선언부이다.

int sum(int x, int y); 이렇게 정의부랑 똑같이 써도 상관 없다.

프로토타입이라고 부르고, 내가 이런 함수를 뒤에 만들어 놨고 사용하겠다는 말이다.

어디선가 많이 본듯하다...

int a;

이것과 같은 것이다.

우리가 정수형 변수를 미리 선언해서 사용하겠다고 말하는 것과 같은 이치다.

변수를 선언하는 것과 같다고?

그럼 한번 더 생각 해 볼 수 도 있다.

int a = 3;

이렇게 선언과 할당을 동시에 하기도 하지 않는가...?

함수도 이런게 가능 할까....?

물론 가능하다~

 

#include<stdio.h>

 

int sum(int x, int y)

{

return x + y;

}

 

void main(void)

{

int a = 2;

int b = 3;

printf("%d", sum(a, b));

}

 

작은 프로그램을 짤때는 후자처럼 선언부와 정의부가 함께 있는 후자를 선택해도 좋다

하지만 선언부(프로토타입)와 정의부가 따로 있는 전자를 추천한다

여러가지 이유가 있는데 나중에 설명 하도록 하겠다.

 

이제 진짜 함수가 어떻게 돌아가는지 보자

main()을 보자

앞부분은 다 알테고

 

printf("%d", sum(a, b));

 

이부분을 보도록 하자.

분명히 예전에 하던대로 정수형을 출력하는것인데

숫자나 변수는 없고 함수가 나타났다.

그래도 애러가 안나는 이유는 뭘까...?

우리가 선언한곳을 보자

int sum(int, int)

반환형이 int형이기 때문에

저 함수는 정수 값을 내보낼 것이기 때문에 문제가 없다.

int a = 2; 의 a를 출력하는 것과

int sum(int, int)의 sum(2, 3)을 출력하는것은 같다고 볼 수 있다.

 

대체 그럼 sum()이라는건 어떻게 돌아가는 걸까?

우리가 sum(a, b)라고 쓰면 어떤 일이 벌어지는 것일까...?

이해를 돕기 위해 하나하나 풀어 써보자...

sum(a, b)를 실행하게 되면 일단 앞에서 선언한 a와 b가 그 자리에 들어가게 된다.

sum(2, 3)이 되고 함수의 정의부로 들어가게 된다.

 

int sum(int x, int y)

{

return x + y;

}

 

이 부분으로 이동하게 되는데

아까 입력한 값들이 그 자리에 입력이 된다.

 

int sum(int x = 2, int y = 3)

{

return x + y;

}

 

x + y를 즉 2 + 3을 해서 5을 return해주게 된다

return??

이것이 반환해 주는 키워드이다.

return x; 라고 하면 x를 반환해 주는 것이다.

x와 y를 보니 2와 3이기 때문에

둘을 더해서 5가 반환되고

다시 아까 썼던 자리로 돌아가게 된다.

sum(a, b)의 자리에 5가 들어가게 되는것이다.

그렇기 때문에 결과적으로

 

printf("%d", sum(a, b));

printf("%d", sum(2, 3));

printf("%d", 5);

 

이렇게 차례로 변하게 되는 것이다.

그래서 출력은 5가 된다.

잠깐...

실컷 설명하고 났는데....

대체 왜 함수를 쓰는지도 모르고 하고 있다....

고작 더하기만 해주는 프로그램 만으로는 함수의 장점을 말 할 수 없다

그래도 그냥 설명하련다...(이것은 금방 피부로 느끼게 될 것이다.)

문제를 해결하는데 있어서 커다란 문제를 한번에 해결하기엔 쉽지 않다.

우리가 수학문제를 부분부분 풀어서 전체 문제를 풀듯 해결해나가야 한다.

Divide & Conquer라는 말이 있다.

나눠서 정복하라는 뜻으로 함수를 설명할때 이야기한다.

그리고 함수를 만드는 일은 반복되는 일을 컴퓨터에게 시키는것과 같다...

얼레?

왠지 어디서 들어본것 같다...

그렇다 반복문에서도 이런 이야기를 했다.

규칙적인 일을 시킬때 우린 반복문을 사용한다.

하지만 그 둘은 조금 다르다..

함수는 프로그램안의 프로그램이다.

메인함수가 하나의 프로그램이듯 우리가 만든 함수도 프로그램이다.

우리가 필요한 순간이면 언제든 호출해서 사용할 수 있다.

반복문은 반복문이 시작되고 끝나는 순간까지 같은 일을 반복하지만

함수는 우리가 필요할때면 불러내 일정한 일을 시킬 수 있다.

잘 이해가 안된다면...

우리가 만들 계산기의 메뉴를 함수로 만들어보자...


#include<stdio.h>

 

void printmenu(void);

 

void main(void)

{

printmenu();

}

 

void printmenu(void)

{

printf("==========================\n");

printf("1. 계산하기\n");

printf("0. 끝내기\n");

printf("==========================\n");

}

 

이렇게 만들어졌다면

우린 언제든 printmenu();라고 함수를 호출하면

저 printf()네줄로 구성된 메뉴를 출력할 수 있다.

피부로 느끼는게 가중 중요하다.

기회가 되는대로 함수의 장점을 보여주도록 하겠다.

함수에 대한 많은 내용을 했지만

가장 중요한 내용이 남아있다.

쉬운 내용으 아니지만 빼고 넘어갈 수 없는 부분이다.

(이해가 안된다면 여러번 읽어보기도 다른 곳을 참고하기도 하자)

이 글은 스프링노트에서 작성되었습니다.

by 그아이 | 2009/04/16 16:59 | Programming | 트랙백 | 덧글(1)

#3.1 제어와 흐름++

사실 제어문을 아무렇지 않게 시작했지만

우리가 알아야 할것들이 많이 있다.

제어문 시작부분에 참과 거짓을 판별 할 수 있다고 했는데

C언어가 말하는 참과 거짓은 우리가 알고 있는것과 조금 다르다.

참과 거짓이 다르다는게 조금 이해가 안 될 수도 있지만

앞으로도 자주 쓰이기 때문에 잘 알아두는 것이 좋다.

C언어에서의 거짓은 0이다.

0이 거짓이라는 것이 이해가 잘 되는가...?

그럼 1이 참이라는 것인가?

맞다...

0은 거짓이고 다른 모든것은 참이다.

1도 참이고 75도 참이고 'K'도 참이다.

(변수부분에 보면 캐릭터는 상수로 존재한다.)

0만 거짓인것이다.

('0'은 거짓이 아니다 '0'은 48이다.)

물론 '\0', 즉 NULL문자는 0이고 거짓이다.

아래 프로그램을 실행시켜보기 전에

무한 루프에 빠진 프로그램을 끝내기 위해선

프로그램을 종료하는 버튼인 Ctrl + c를 알아두고 가자

 

(이제 좀 알만하니 include문이나 main은 빼도 눈치껏 알아보자..)

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
}

 

이게 뭐가 중요한가 하겠지만 실제로 C언어 프로그래밍에서

변수만 제어문의 인자로 넣어줘도 변수가 변하면서 제어문을 빠져나오기도 하고

입력을 받을때 아무것도 입력 받지 않으면 NULL문자가 들어오기 때문에

제어문에서 거짓으로 판별할 수도 있다.

예를 들면

 

for(i = 100; i; i--)
{
   printf("%d", i);
}

 

이렇게 사용 될 수 있다는 것이다.

0(NULL 포함)이 거짓이라는것만 잘 알고 넘어가자

솔직히 위와같은 코딩은 안좋은 코딩이다...

위에는 확실히 그럴일이 없겠지만 혹시 음수에서 무한하게 돌고 있을 수 있기 때문에

음수부분을 아래처럼 처리해 주는게 좋다

 

for(i = 100; i <0 ; i--)
{
   printf("%d", i);
}

 

if()-else문에서 조금은 헷갈리는 문장이 생길 수 있다.

 

if()

if()

else

printf("어디냐");

 

 

if()

if()

else

printf("어디냐");

 

위 코드를 이해할 수 있는가...?

그냥 내용은 빼고 예를 들기위한 코드이다

여기있는 else문은 if()문에대한 else문일까...?

어떤 if()문이 거짓일때 "어디냐"가 출력될까...?

잠시 여기까지만 읽고 저걸 실행해 보자...

C언어를 계속 접해도 가끔 물어보면 저 문제가 헷갈리기도 한다

그러니까 직접 해보길 바란다

답은 아래있는 if()문이다

else는 바로 앞에 있는 if()문에 붙게 되어있다

이것에 대한것은 아마도 3학년쯤

언어론 시간에 배우게 될 것이다

 

그리고 switch()문에서 잠시 나온

break라는 문을 생각해보자...

갑자기 말도 없이 나타난 break...

단어 자체 때문에 끝낸다거나 빠져나간다는 느낌이 들었다

어디서 얼마나 빠져나가는 것인지...

처음에 접하는 사람은 다 헷갈리게 마련이다.

break문은 좀 특수한 문장으로 제어와 흐름을 중단하는 역할을 한다.

앞에서 본 switch()문안에서나 반복문(for(), while(), do-while())문에서

뒷부분은 무시한채 반복을 종료하게 한다.

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
   if(j <= 10)
      break;
}

 

그리고 비슷한 놈이 하나 더 있다

continue라는 놈도 있다.

끝내는놈 말고 계속 하라는 놈이 또 있다~ ㅎㅎ

얘도 특수한 경우인데 반복문에서만 사용된다

반복문에서 반복되는 문장들 중에 continue의 뒷 문장들을 다 지나치고

반복문의 머리로 올라가서 계속 반복할 것인지를 확인하게 된다.

이해가 잘 안될 수도 으니 밑에 예제를 보자

 

int j = 0;
while(1) // 0이 아닌 모든것은 참이기 때문에 무한 루프에 빠진다)
{
   printf("%d",j);
   j++;
   if(j <= 10)
      break;
   if(j % 2 != 0)
      continue;
   printf("짝수");
}

 

j를 2로 나눈것이 0이 아니면 "짝수"를 출력하지 않고

다시 while()문의 맨위 부터 다시 실행한다

 

반복문을 계속 하고 있는데 그냥 넘어간 do-while()문에 대해 알아보자

반복문을 실행하는데 있어서 for()문이나 while()문이나 둘다 똑같이

조건이 만족하면 반복될 내용을 한번도 실행하지 못하게 된다.

적어도 한번은 실행되야 한다면 do-while()문을 사용하는 것이다.

예를 들면 프로그램이 실행되고나서

메뉴를 출력하는 일이 그렇다.

프로그램이 실행되고나서 메뉴를 한번 출력해줘야

무언가 선택 할 수 있지 않겠는가...?

그리고 계산을 끝내고 다시 돌아온 다음에

메뉴를 출력해줘야 하기때문에 이럴땐 do-while()문을 사용한다.

 

int input = 0;
do
{
   printf("1.계산기");

   printf("0.종료");
   scanf("%d", &input);
}while(input);

 

do-while()은 while()문의 반복내용을 실행하고 조건을 검사한다고 생각하면 된다.

영어도 쉽지 않은가 while()문이지만 일단 do하고 while()문을 하니까~ ㅎ

 

위에 나온 모든일을 단번에 할 수 있는 마법의 명령어가 하나 더 있다.

goto문은 내가 가고 싶은 어디든 이름만 정해 두면 한방에 날라갈 수 있다.

하지만!!!!!!!!!!!!!!!!!!!!!!!!!!

goto문은 사용해서는 안된다!!!

구조적인 언어에서 제어의 흐름을 마음대로 바꾸기 때문에 우린 위에서 쓴

제어와 반복문을 가지고 프로그램을 만들도록 하자...

그래도 goto문을 배워야 할것 같다면 책을 찾아보아라...

대부분의 책(99.99%)에도 사용하지 말라고 할것이고 쓰는 사람도 없다

배워도 쓸일이 전혀 없다는 것이다.

이 글은 스프링노트에서 작성되었습니다.

by 그아이 | 2009/03/22 23:03 | Programming | 트랙백 | 덧글(0)

#3 제어와 흐름

우리가 만든 프로그램이 여러 상황에 대처하기 위해선 제어문이 필요하다

참이면 참이다 거짓이면 거짓이라는 것을 판별 할 줄 알아야한다.

그것이 나누어지고 나면 그에 따른 반응이 달라야 한다

제어문에는  if(), if()-else, switch()문이 있다

 

#include <stdio.h>

void main(void)

{

int grade = 0;

scanf("%d", &grade);

if(grade >= 90)

printf("A");

}

 

다른건 보던거고... if()문이 생겨났다...

쉽지 않은가...?

if.. "만약에" 라는 단어뒤에 무언가 온다.

if(grade >= 90)

만약에 grade가 90보다 크거나 같으면 다음 문장을 실행하라는것 같은 느낌이 물씬 풍겨나지 않나?

입력받은 수가 90보다 크면 다음문장을 실행하고

아니라면 그냥 끝나버렸다

if()문의 괄호 안의 내용이 참이면 다음 문장을 실행하고 아니라면 다음문장을 실행하지 않는다.

제어문 너무 쉽다~~

근데...

그냥 끝내버리기가 너무 아쉽다

참일때 무언가 했으면 거짓일때도 뭔가 해야할일이 있을수도 있다.

그땐 if()-else문을 사용해보자

 

#include <stdio.h>

void main(void)

{

int grade = 0;

scanf("%d", &grade);

if(grade >= 90)

printf("A");

else

printf("not A");

}

 

else 가 추가 됐는데 위엔 모두 똑같다

else.. "그렇지 않으면"이란 단어 뒤에 뭔가 온다는건

앞에서 이야기한 거짓일때의 행위를 지정해준다는 확신을 가질 수 있다.

if()문의 괄호 안의 내용이 참이면 다음 문장을 실행하고

거짓일 경우에 else문이 있으면 else문 다음 문장을 실행한다.

참~쉽죠~?

이것을 좀 더 활용하면 여러개의 질문과 선택을 할 수 있다

 

#include <stdio.h>

void main(void)

{

int grade = 0;

scanf("%d", &grade);

if(grade >= 90)

printf("A");

else if(grade >= 80)

printf("B");

else if(grade >= 70)

printf("C");

else if(grade >= 60)

printf("D");

else

printf("F");

}

 

한번에 이해가 잘 안될 수도 있다

하지만 저것은 if()-else문의 반복이다

else

if(grade >= 80)

printf("B");

이것에서 위 두줄을 한줄로 합쳐 놓았을 뿐이다

거짓이라면 계속 다음으로 넘어가는 질문의 연속이다

이것이 이해 됐다면 다음으로 넘어가자

 

if()-else문을 너무 계속 쓰다보니 문장이 지저분해져버렸다

조금 더 깔끔하게 쓸 수 있는 방법은 없을까?

switch()문을 사용해보자.

 

#include <stdio.h>

void main(void)

{

int grade = 0;

int gradechar = 0;

scanf("%d", &grade);

gradechar = (grade - 9) / 10

switch(gradechar) {

case 9 :

printf("A");

case 8  :

printf("B");

case 7 :

printf("C");

case 6 :

printf("D");

default :

printf("F");

}

}

 

위 코드가 이해가 되는지 잘 모르겠다...

위에 if()문으로 만들었던것을 다시 만들어본것이다.

switch()문은 괄호 안에 나온 값을 case중에서 찾는 조건문이다.

간단하게 설명하자면

gradechar는 실제 점수 grade에서 9를 빼고 10으로 나누어 등급을 정한다

그리고 case중 아무것도 즉, 9, 8, 7, 6 가 아닌 것이 나오면

default이후의 내용을 실행하게 된다.

소스코드를 실행시켜본 사람은 알겠지만

예를 들어 8이 나오고 나면 결과로

BCD가 모두 나온다...

case가 선택되고 나면 그 뒤에 나오는 모든 케이스 문을 실행하기 때문에

소스를 다르게 수정할 필요가 있다.

 

#include <stdio.h>

void main(void)

{

int grade = 0;

int gradechar = 0;

scanf("%d", &grade);

gradechar = (grade - 9) / 10

switch(gradechar) {

case 9 :

printf("A");

break;

case 8  :

printf("B");

break;

case 7 :

printf("C");

break;

case 6 :

printf("D");

break;

default :

printf("F");

}

}

 

이렇게 각 case문 뒤에는 break문으로 switch()문의 블록 밖으로 나가야 한다.

우리가 만든 계산기의 메뉴는 switch()문으로 선택될 것이다.

지금 만들어 놓고 싶지만 넣을 내용이 없고 너무 간단하기 때문에 다음에 만들기로 하자.

 

우리가 컴퓨터를 쓰는 이유는...
몸이 편하자고 쓰는거다
똑같은 일을 계속 하면 컴퓨터가 해주면 좋겠다
우리 프로그램도 반복되는 일은 한번만 코딩하고
컴퓨터가 알아서 다시 해줬으면 좋을것이다
그런데 사용하는것이 반복문이다

 

#include <stdio.h>
void main(void)
{

int sum = 0;
int i = 1;

while(i <= 100)

{

sum = sum + i;

i = i + 1;

}
printf("합계 %d", sum);

}

 

실행해보지 않아도 합계를 구하는 프로그램 같다..
눈치가 빠른 사람은 1부터 100까지 더하는 프로그램이라는것까지도
알아차릴 수도 있을것이다
계속 보던 것들은 빼고 새로 생긴 while()를 보자

괄호 안에는 i <= 100 이라고 있다...

while이 '~하는 동안'이라는 뜻을 가지고 있다는걸 생각한다면

i가 100보다 작거나 같은 동안에 다음 문장들을 실행시키는듯 하다

while()문의 괄호 안의 내용이 참인 동안 다음 문장을 계속 반복한다.

sum은 자기자신과 i를 더하는 것이고

i는 자기자신에 1을 더하는 것이다

결론은 1씩 증가하는 i를 sum에 더하는 것이니까

1부터 100까지 더하는 프로그램이다

드디어 100줄을 써야 하는 일을 3줄로 줄였다

이제부터 뭔가 능률적인것같다...

 

비슷한 몇개가 있다

위에서 한 것은 while()문이라고 부르고

do-while()문이라는것이 있고

for()문이라는 것이 있다.

do-while()문은 #3.1에서 다루기로 하고

for()문을 알아보자...

 

for()문도 같은 반복문인데

그럼 뭐가 다른가....

 

#include <stdio.h>
void main(void)
{
   int sum = 0;
   int i = 0;
   for(i = 1; i <= 100; i = i + 1)
   {

sum = sum + i;

}

printf("합계 %d", sum);

}

 

딱보아하니 위에프로그램이랑 비슷하다
for()문의 괄호 안에 뭐가 들어가 있는가...
i = 1; i < 100; i = i + 1
;(세미콜론)은 명령이 끝날때 쓴다더니
괄호안에 두개나 들어가있다
세가지가 들어가는데 ;으로 나누는것 이다
그럼 세가지를 떼서 보자...
i = 1 이부분은 초기화이다

(while()문 밖에 있는 내용이다)
반복문이 시작하기 전에 i값을 초기화 시켜 준것이다.
i <= 100 이부분은 조건이다

(while()문의 괄호 안에있는 내용이다)
i가 100보다 작거나 같은 동안 반복문이 계속 된다는 것이다.
i = i + 1 이부분은 변화다

(while()문의 다음에 나오는 내용이다)
반복문이 한번 실행되고나서 다시 반복문안의 명령어를 실행하기 전에 이 부분이 실행된다
여기선 99번 실행되었을것이다.
그리곤 for()문 뒤에 붙어있는 { }안의 내용이 100번 실행 되었다
sum에는 자신이 가지고 있는 값과 증가하고있는 i의 값을 반복해서 더한다.

 

while()문으로 만들 수 있는 모든것을

for()문으로 만들수 있고 그 반대로도 가능하다

대부분 각자의 취향에 따라서 사용하고 싶은것을 사용한다

지금은 다른 사람의 소스를 볼일이 없어서

"왜 이걸 두개 다 알아야 하나?"

하는 생각을 가질 수 있지만 두개의 차이를 확실히 알아야한다

(대부분 C언어강의 첫 시험엔 이 두개를 바꾸는 문제가 나올 확률이 상당히 크다...)

이 글은 스프링노트에서 작성되었습니다.

by 그아이 | 2009/03/21 16:12 | Programming | 트랙백 | 덧글(4)

◀ 이전 페이지          다음 페이지 ▶