1장. C언어와의 만남
- 처음으로 만드는 C언어 프로그램
너무 진부한것 같지만...
거의 99%의 컴퓨터 프로그래밍 언어책과 C언어 책이 그러하듯이
우리도 이 책에서 가장 먼저 Hello C World 라는 글자를 화면에 출력하는 프로그램을 작성해 보겠습니다.
우선 알아 두셔야할 내용은
모든 프로그램은 위에서 아래로 하나씩 수행되는 절차적인 특징을 지닙니다.
이는 C언어만 가지는 특징이 아니고 거의 대부분의 프로그래밍 언어의 특징이기도 합니다.
물론 분기문이나 반복문을 통하여 프로그램이 수행되는 절차를
위에서 아래로만이 아닌 상, 하, 좌, 우 같이(?)
다른 방식으로 프로그램이 수행되게 할수 있습지만
지금은....
기본적으로 모든 컴퓨터 프로그래램은
위에서 아래로 절차적으로 수행된다고 생각하겠습니다.
일반적으로 여러분들이 책을 읽을때 위쪽부터 아래쪽으로 순서대로(절차적)로 읽듯이
컴퓨터 또한 여러분들이 작성한 프로그램을 해석하고 실행할때
위에서 아래로 절차적으로 분석하고 실행한다는 뜻입니다.
따라서,
아래 프로그램 예시는 왼쪽에 표시된 행번호(라인) 순으로 실행이 되며
표시된 행번호는 보통 컴파일러에서 프로그램 작성 편의상 자동으로 표시 되며
실제 프로그램 작동과는 무관합니다.
프로그램 작성시 실제로 행번호를 직접 입력하시면 안됩니다.(메모장등을 활용할때 주의!!!)
자 그럼 입력해 볼까요?
#include <stdio.h>
int main(void){
printf("Hello C World");
return 0;
}
위 프로그램을 작성하고 실행해보면 아마도 화면에 아래와 같은
Hello C World 라는 글자를 보게 될것입니다.
그림상에 나타난
-------------------------------------------------------
Process exited after 0.04791 seconds with return value 0는
컴파일러에 따라 다르게 나타날수도 있으며 전혀 표시되지 않을수도 있습니다.
대략적인 뜻은
-------------------------------- <--이것은 단순 구분선입니다. 위쪽은 실제 프로그램 실행결과 아래쪽은 실행 관련 메시지로 구분됩니다.
구분선 아래쪽의 내용은
위 프로그램의 실제 실행 시간은 0.04791초 이며 반환값은 0이라는 뜻입니다.
반환값은 차후에 설명하겠습니다.
다시 돌아와서
위에서 우리가 작성한 프로그램은 영어로 많은 내용들이 적혀 있는데
처음으로 배우는 컴퓨터 프로그래밍 언어를 C언어로 선택하신 분이라면
무슨 뜻인지 하나도 이해가 가지 않을듯 합니다.
그렇다고 결과 좌절하거나 실망하지 마십시요.
모르는것이 당연하고 모르니까 배우는것 아니겠습니까?
하나씩 차근 차근 배우면 되는것이니깐요.
하지만....
위 코드를 이해하기 위해서는
C언어에 대한 상당한 지식을 요구하므로
이걸 지금 당장 다 이해 시켜 드릴수는 없습니다.
그래서
여기서는 위 문장의 모든 뜻을 알기 보다는 암기 문장과 이해 문장으로 구분을 할 것입니다.
물론 암기라고 하여 영원히 암기를 요구하는 것은 아니니 너무 걱정 마십시요.
책 뒤쪽 함수 부분에서 자세히 설명을 하겠습니다.
자 그럼 무조건 외우는 문장을 아래와 같이 저와 약속하고 암기하는것으로 하겠습니다.
무조건 암기할 문장들
#include <stdio.h>
int main(void){
return 0;
}
자 위와 같은 문장을 암기 문장이라고 하겠습니다.
보시는 것처럼 가운데(3~6번줄)가 뻥 비어 있지요?
앞으로 사용할 대부분의 C 언어 예제는
위 암기 문장을 작성후 컴파일(해석) 하고 실행한뒤
아무런 오류가 없을 경우에만 추가적으로 프로그래밍 한다는 것 잊지 마시기 바랍니다.
위 문장만 작성한뒤 컴파일하고 실행하였을 때 오류가 있어서 정상적으로 실행되지 않는다면
그것은 거의 99.9% 암기 코드 작성이 잘못되었다거나 설치된 컴파일러 문제일수 있습니다.
위 암기문장에서 조차 틀려서 정상적인 실행이 안되는 상황이라면
추후 배우는 다량의 코드를 입력해서
암기문장 테스트 없이 실행한다면 엄청나게 많은 오류 메시지를 만나게 될것이고
그 오류가 어느곳에서 발생하였는지 찾기가 어렵게 됩니다.
따라서 최소한 암기문장이라도 완벽하게 입력되어 있는지 확인후에
추가 코드를 입력하는 습관을 길러 두는것이 좋습니다.
자 그럼 이해 문장을 한번 이해해 볼까요?
처음 우리가 작성한 Hello C World를 출력하는 프로그램과
암기 문장의 차이점은 딱 한줄이며 아래와 같습니다.
차이점(문장) : printf("Hello C World");
위 문장은 아래와 같이 크게 두 부분으로 나누어 질수 있습니다.
printf(" "); 과 Hello C World
우선 왼쪽을 먼저 분석해 보면
왼쪽의 것을 printf 함수라고 부릅니다.
함수는 일반적으로 함수명 + ( )와 같은 형태로 나타나며
여기서 함수명은 printf가 되겠네요.
일단 함수라는 것은 어떠한 일을 하는 기능 단위다 라고만 생각해 두겠습니다.
여러분들도 잘 아시다 시피
f는 함수의 영어 표현인 function의 앞글자 입니다.
결론적으로 print + function이 합쳐진 것이 printf 입니다.
통상 읽을때는 프린트에프 또는 프린트펑션이라고 읽어 줍니다.
물론 읽는 방법은 취향따라 다양하겠지만 함수임을 강조하기 위해서 프린트 펑션으로 많이들 읽는다고 필자는 생각을 합니다.
정리하자면
printf 함수는
글자를 화면에 출력해주는 함수로써 화면에 출력하고자 하는 글자를 “(쌍따옴표)와 "(쌍따옴표) 안에 적어주면 됩니다.
가령,
printf("이것 출력해 주세요.“);
위와 같은 식으로 문장을 암기문장 안에 작성후 실행하게되면
실행 결과는
위와 같습니다.
그리고 함수나 기타 컴퓨터가 수행해야 할 명령뒤에는 ;(세미콜론)을 붙여 준다는 것도
여기서는 그냥 규칙같은 것이다 라고만 알아두고 넘어 가겠습니다.
자 그럼 복습해 볼까요?
화면에 홍길동라는 이름을 출력하는 프로그램을 작성해 보겠습니다.
#include <stdio.h>
int main(void){
printf("홍길동");
return 0;
}
위와같이 프로그램을 작성한뒤 실행을 하면 실행 결과 화면에
이라는 글자가 보여 지게 됩니다.
대략 printf 함수 사용법에 대해서 조금 정리가 되었을 꺼라고 생각합니다.
다시 한번 정리하자면 “(쌍따옴표) 안에 적은 내용이 화면에 출력된다 이정도로 정리 할수 있습니다.
그럼 가령 아래와 같이 2줄을 적으면 어떻게 될까요?
#include <stdio.h>
int main(void){
printf("홍길동");
printf("홍길동");
return 0;
}
위와 같이 printf 출력문(함수)을 2개 적을 경우
화면에 두줄에 걸쳐서
홍길동
홍길동
이라는 글자가 화면에 보여질까요?
답부터 말씀 드리면 그렇치 않다는 것입니다.
직접 실행을 해보시면
위와 같은 식으로 1줄로 나타나게 됩니다.
우리가 원하는
위와 같은 글을 출력하기 위해서는
우선 홍길동 이라는 글자를 출력한뒤
“줄을 바꿔서 밑에 줄로 내려 가세요”라는 명령(?)을 한뒤
다시 홍길동 이라는 글자를 출력하도록 해줘야 합니다.
컴퓨터에게 줄을 바꿔서 다음줄로 내려 가라는 명령어(?)는 \n입니다.
(\n은 실제로는 명령어가 아니고 줄바꿈 특수문자라고 합니다. 편의상 명령어라고 부르는것일 뿐입니다.)
그럼 왜 하필 n이냐 인데요..
여기서 n은 new line의 약자입니다.
이러면 \n 특수문자의 용도를 쉽게 암기 하실수 있겠지요?
자 그럼 2줄에 걸쳐서 이름이 나오는 프로그램을 한번 작성해 볼까요
#include <stdio.h>
int main(void){
printf("홍길동\n");
printf("홍길동");
return 0;
}
위와 같은 식으로 작성을 하면 됩니다.
아래와 같은 방식을 이용하면 위 문장과 같이 printf를 2번 적을 필요도 없습니다.
한번 고쳐 볼까요?
#include <stdio.h>
int main(void){
printf("홍길동\n홍길동");
return 0;
}
위와같은 식으로 적을수 있습니다. 위 프로그램도 실행을 해보면 홍길동이 두줄에 걸쳐서 출력되는 똑같은 결과를 얻을수 있습니다.
여기서 초보자 분들이 흔히 하는 실수가 있습니다.\n은 줄바꿔주세요라는 뜻이며 \n 또한 “(쌍따옴표) 안에 넣어 주셔야 합니다.
올바른 사용 : printf("홍길동\n");
잘못된 사용 : printf("홍길동“\n);
잘못된 사용의 예와 같이 \n이 쌍따옴표 밖으로 나와 있으면 문법오류에 해당하므로 컴파일이 정상상적으로 완료되지 않아 실행이 되지 않습니다.
여기서 한가지 알수 있는 것이 printf 함수는 출력하고자 하는 모든 글자 또는 줄바꿈문자(\n) 기타 특수문자등을 쌍따옴표 안에 적어주어야지만 정상적으로 작동을 한다는 것입니다.
그럼 여기서 한가지 더 재미있는 방법을 보도록 하겠습니다.
#include <stdio.h>
int main(void){
printf("홍길동");
printf("\n");
printf("홍길동");
return 0;
}
위 소스코드에서 보시는 바와 같이
\n 이라는 뉴라인 특수문자를 단독으로 출력하는것도 가능하며
결과는 여전히 같습니다.
자 그럼 우리는 원하는 모든 문자를 화면에 출력하는 법을 배웠습니다. 이런 작은 규칙 하나 하나가 모여서 C언어 문법(사용법)이 된다는 것을 잊지 마시고
오늘 배운 내용을 반드시 컴퓨터에 입력하여 컴파일 한뒤 직접 실행해보도록 합니다.
모든 프로그래밍 언어를 가장 빨리 배우는 방법은 좋은 책, 좋은 예제이기 보다는 책의 모든 예제를 직접 타이핑하고 실행해보는 것이 가장 프로그래밍 언어를 빨리 학습하는 방법입니다.
저자가 얼마나 프로그래밍 강의를 잘하는지
팔짱끼고 책만 읽으면서 공부하지 마시고
내 손으로 직업 입력하고
컴파일하고
실행하면서
소스코드(작성한 코드) 오류를 스스로 찾아내고 손에 감각을 익히는 것이 무엇보다 중요합니다.
이렇게 소스 코드를 직접 입력하다보면
조금씩 한가지 의문점이 들기 시작할것입니다.
줄과 줄사이는 보기 편하게 임의로 띄어쓰기 가능한가?
글자와 글자 사이는 보기 편하게 임의로 띄어쓰기 가능한가?
우선 한가지 명확한 사실은
줄과 줄 사이는 100줄을 띄워도 아무런 문제가 없다는 것입니다.
예를 들어서
#include <stdio.h>
int main(void){
printf("Hello C World");
return 0;
}
#include <stdio.h>
int main(void){
printf("Hello C World");
return 0;
}
위 두개의 프로그램은 완전히 동일한 프로그램입니다.
즉, 줄과 줄사이는 얼마든지 띄어쓰기 가능합니다.
그리고
#include <stdio.h>
int main(void){
printf("Hello C World");
return 0;
}
이렇게 printf 함수 부분을 들여쓰기를 많이 많이해도 완전히 동일한 프로그램입니다.
하나더 다른 예를 들어 보면
#include <stdio.h>
int main(void){
printf("Hello C World");
printf("Hello C World");
return 0;
}
#include <stdio.h>
int main(void){
printf("Hello C World"); printf("Hello C World");
return 0;
}
위 두개의 프로그램은 완전히 동일한 프로그램입니다.
심지어
#include <stdio.h>
int main(void){
printf("Hello C World"); printf("Hello C World"); return 0;
}
위와 같이도 작성 가능합니다.
위 내용을 간단하게 정리하고 설명을 하자면
들여쓰기 띄어쓰기는 가독성을 올리기 위하여 인간을 위해서 하는것이지
컴퓨터 실행에 아무런 영향을 주지 않는다는 것입니다.
결론적으로 적당하고 예쁜 띄어쓰기는 오직 인간만을 위한 조치일뿐
컴퓨터에게는 어떠한 도움되 되지 않은 공간 낭비라고 볼수 있습니다.
그럼 마음대로 띄어쓰기를 하면 안되는것은 어떤것이 있을까요?
대표적으로
printf 와 같은 완전한 함수명을
printf가 아닌 print f 이런식으로 띄어쓰기 하면 안됩니다.
완전히 붙여써야 하나의 완전한 의미가 되는것들은
띄어쓰기를 하면 안된다 정도로 알아두고 실전을 통해서 차차 익혀 가도록 하겠습니다.
그럼 간단한 복습의 의미로 아래 예제를 한번 풀어 보도록 하세요.
문제 1 : 화면에 아래와 같은 내용을 출력하시오. 단 printf는 한번만 사용하시오
출력내용
모범답안 : 누르면 펼쳐 집니다.
#include <stdio.h>
int main(void){
printf("Hello C World!");
return 0;
}
문제 2 : 화면에 아래와 같은 내용을 출력하시오. 단 printf를 2회 사용하시오.(좀 억지 스럽지만)
출력내용
모범답안 : 1
#include <stdio.h>
int main(void){
printf("Hello C");
printf(" World!");
return 0;
}
모범답안 : 2
#include <stdio.h>
int main(void){
printf("Hello C ");
printf("World!");
return 0;
}
*모범답안 1과 2는 언뜻 같은 코드 처럼 보이지만 실제로는 다릅니다.
띄어쓰기 지점을 주의깊에 관찰 바랍니다.
문제 3 : 화면에 아래와 같은 내용을 출력하시오. 단 printf를 2회 사용하시오
출력내용
Hello
C World!
모범답안 :
#include <stdio.h>
int main(void){
printf("Hello\n");
printf("C World!");
return 0;
}
문제 4 : 화면에 아래와 같은 내용을 출력하시오. 단 printf는 한번만 사용하시오
출력내용
Hello
C World!
모범답안 :
#include <stdio.h>
int main(void){
printf("Hello\nC World!");
return 0;
}
문제 5 : 화면에 아래와 같은 내용을 출력하시오. 단 printf는 한번만 사용하시오
출력내용
Hello
C
World!
모범답안 :
#include <stdio.h>
int main(void){
printf("Hello\nC\nWorld!");
return 0;
}