// By File (pgh268400)
#include <stdio.h>
int main(void){
printf("Hello C World!!\n");
return 0;
}
안녕하세요 파일입니다. 항상 프로그래밍 언어에서 시작하는 것은 출력을 해보는 건데요. 우선 저번 소스코드부터
시작하겠습니다. 저번에 실행을 하면 Hello World!! 가 출력되는 것이 나왔는데 기억나시나요?
저번에는 아무것도 모르고 따라만 했지만 오늘은 이걸 상세하게 알아보겠습니다.
전처리기
#include <stdio.h>
우선 시작은 요렇게 시작하네요.
우선 include라는 영어는 대부분 아시겠지만
include 미국·영국 [ɪnˈkluːd] 발음듣기 영국식 발음듣기 중요도 별점 2개 다른 뜻(2건) 예문보기 1. 포함하다 2. ~을 (~에) 포함시키다 |
무엇을 포함하다, 포함시키다는 의미죠?
한마디로 stdio.h 를 포함시킨다고 할 수 있겠는데요. 여기에 특수문자 #이 들어갔는데 이런 것을 전처리기라고 합니다.
컴파일러가 컴파일을 하기 전에 먼저 처리하라는 의미입니다.
stdio는 Standard Input Output(표준 입출력)의 줄임말입니다. 즉 stdio.h라는 헤더 파일을 끌어오는 겁니다.
C언어에서 사용에 편하라고 함수들을 구현해놨는데 그것들이 헤더 파일에 묶여서 정의되어있고
stdio.h 에는 printf( ), scanf( ) 등이 있어서 이것을 사용할 수 있는 겁니다.
메인함수
int main(void){
printf("Hello C World!!\n");
return 0;
}
그리고 main( )이라는 함수를 정의했습니다.
main 함수는 모든 프로그램의 시작점이며(Entry Point 라고도 합니다.), 프로그램을 처음 실행하면 운영체제(OS)가 main() 부분을 찾아서 프로그램을 실행하게 됩니다.
함수는 초등학교 때도 배웠을 건데요. f(x) = x + 2 라던지...
예를 들면 상자에 과자 3개를 넣었는데 5개가 나왔다던지 하는 겁니다.
함수에는 입력값(INPUT)이 있고 안에서 처리하는 식(FUNCTION)과 출력 값(OUTPUT)이 있습니다.
여기서 main 은 함수의 이름으로 프로그램 실행 시 이름 그대로 맨 처음에 실행되고 맨 나중에 종료되게 됩니다.
void라고 적힌 곳은 함수가 받는 입력값(argument)입니다.
void라는 말 그대로 입력받는 값이 없다는 겁니다.
저희 목적은 print로 출력만 하는 거니깐요.
void 이므로 쓰지 않아도 정상 작동합니다.
앞에 int (정수)는 자료형인데 함수 출력 값(반환 값)의 형태를 지정합니다.
* 함수라는 용어는 뒤에서 한번 더 배우게 되니 거기서 제대로 배우시면 되겠습니다.
C언어에서의 자료형 표입니다.
이것을 다 암기하거나 이해하실 필요는 없고
필요할 때마다 참고하시면 됩니다.
자료형에 관해선 나중에 변수 강의 때 한 번 더 쓰겠습니다.
함수란?
본 글에서 함수라는 단어가 많이 나올겁니다. 프로그래밍에서 함수는 수학에서 함수와 비슷하게 입력과 출력을 가질 수 있고, 여러 줄의 코드에 이름을 붙여서 사용하는 코드 뭉치입니다.
지금 이 정도 설명으로썬 함수를 이해하기 매우 어렵습니다. 그렇기에 무언가 영어로 이름이 써져있고 () 괄호가 쳐져있으면 다 함수라고 부르는구나. 이해하시면 됩니다. ex) main(), printf(), scanf()...
자세한 내용은 함수 파트에서 자세히 배우게 됩니다.
함수처리
그리고 내부에서 처리하는 식이 바로 "Hello World!!"를 출력하는 부분입니다.
대괄호로 묶은걸 볼 수 있는데 main 함수가 작동 시에 저 대괄호 내부의 내용이 실행됩니다.
그러면 내부에서 처리하는 소스를 보겠습니다
printf("Hello C World!!\n");
return 0;
printf 함수는 출력할 때 사용하는 함수입니다. stdio.h 에 정의되어 있습니다.
저렇게 문자열을 출력할 때는 "(큰 따옴표)를 사용해 묶어서 출력합니다.
작은따옴표는 사용할 수 없습니다. (일부 언어에서는 인정함 ex) python )
\n 은 개행 문자로 New Line의 약자입니다. 한 줄 띄라는 의미겠죠?
그리고 ; 를 세미콜론이라고 하는데 우리가 글을 쓰면서 마침표를 찍듯 C언어에서의 마침표입니다.
그리고 마지막으로 프로그램이 끝나면 컴퓨터는 이것을 모르니깐 알려줘야 합니다.
return의 기능은 2가지입니다. 1. 특정값을 반환함 2. 함수의 종료를 알림
return 0; 의 의미의 경우 0을 반환하고 main() 함수를 종료한다는 의미 입니다.
보통 0은 False, 1은 True 이므로 main 함수가 false(거짓) 가 되어 종료가 되는 겁니다.
숫자를 반환하는 이유는 아까 함수 반환 값의 형태를 int로 지정해서 그렇습니다
주석
그리고 설명하진 않았지만
// By File (pgh268400)
이 부분은 주석입니다
보통 프로그램에서 부연 설명할 때 쓰는데
// By File (pgh268400)
#include <stdio.h>
int main(){
/*
파일의 C언어 강의
전체 주석
*/
printf("Hello World!!");
return 0;
}
// By File (pgh268400)
#include <stdio.h>
int main(){
printf("Hello World!!"); //부분 주석
return 0
}
전체 주석 시엔 /* */ 로 사용하고 부분 주석 시엔 // 로 사용합니다.
프로그램을 많이 만들다 보면 뭐가 뭔지 모르는데 이럴 때 달아둔 주석이 크게 도움이 됩니다.
벌써 과부하가 올 거 같다고요?
정상입니다. 처음 배우는 건 뭐든 어려우니깐요
뇌는 많이 쓸수록 노화에 저항하는 능력이 강해진다고 합니다.
힘들어도 더 파이팅하고 따라가 봅시다!!
특수문자 처리하기
// By File (pgh268400)
#include <stdio.h>
int main(){
printf("출력 연습해볼까\n\n"); //개행 문자를 통한 2줄 띄기
printf("\\ 역슬래시 출력하기\n");
printf("큰따옴표 : \" \n");
printf("\작은따옴표 : \'");
return 0;
}
출력하다 보면 의문이 생길 겁니다
문자열을 묶을 때는 "를 사용한다고 했는데 만약에"를 출력하고 싶으면 어떻게 해야 하는 거지?
printf로 그대로 출력하면 될까? 하고 해 봤으나 역시 오류가 납니다.
이런 문자를 출력하기 위해 \(역슬래시) 기호를 사용하는데요
\a | 경고음 소리 발생 |
\b | 백스페이스 |
\f | 폼 피드 |
\n | 개행 |
\r | 캐리지 리턴 |
\t | 수평 탭(tab) |
\v | 수직 탭 |
\\ | 역슬래시 |
\' | 작은따옴표 |
\" | 큰따옴표 |
위의 표와 소스코드를 참고하며 직접 출력하는 연습을 해보세요 ^^
아마 이 중에서 사용하는 건
역시 이 표는 암기할 필요 없고 모를 때마다 여러 번 반복해서 익히면 됩니다
출력할 때 오류 나거나 겹치는 무언가가 있다면 \기호를 사용해서 표기하면 됩니다.
아마 이 중에서 사용할 건 표에서 하이라이팅 해둔 부분 정도 일 겁니다..
서식문자 처리하기
이제 문자열도 마스터했겠다.. 숫자를 출력해봅시다!
일단 간단한 덧셈을 먼저 해볼까요?
3+5 를 해볼겸.. 소스코드를 작성했는데
#include <stdio.h>
int main(){
printf(3+5);
return 0;
}
애석하게도.. 작동하지 않네요 왜그럴까요? C언어에서는 이런식으로 바로 계산해서 출력할 수 없고
서식문자란 것을 사용합니다.
printf( ) 의 이름이 왜 print( ) 가 아니고 printf( ) 인지 궁금해 하실분이 있을건데요 f는 Formatted 의 약자로 포맷,서식을 나타내는데 서식문자를 사용해 다양한 값들을 출력 할 수 있습니다.
예제를 통해 보겠습니다
#include <stdio.h>
int main(){
printf("3+5는 ? = %d", 3+5);
return 0;
}
3+5는 ? = 8
--------------------------------
Process exited after 0.02388 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
%d 라는 서식문자를 이용해 3+5 를 표현했군요! 문자라는 이름그대로 마치 문자처럼 적고 뒤에 %d 의 값을
지정해 줬습니다. %d는 10진수 정수(+, - 둘다 가능) 를 표현할때 쓰는 서식문자 입니다
%d, %i | 10진수 정수 (+, - 둘다가능) |
%x, %o | 16진수 정수 , 8진수 정수 (+ 만 가능) |
%f, %lf, %Lf | 10진수 실수 (+, - 둘다 가능) |
%c | 한개의 문자 |
%s | 문자열 (string) |
%u | 10진수 정수(+ 만 가능) |
%e | e 표기법에 의한 실수 |
%E | E 표기법에 의한 실수 |
%g | 소수점 이하 자리 수에 따라 %f, %e 둘중 하나를 선택 |
%G | 소수점 이하 자리 수에 따라 %f, %E 둘중 하나를 선택 |
%% | %기호 출력 |
서식문자의 종류입니다. 역시 여러번 보면서 익혀두세요.
#include <stdio.h>
int main(){
printf("%d + %d = %d\n", 12,5,12+5);
printf("%d - %d = %d\n", 20,5,20-5);
printf("%d * %d = %d\n", 9,5,9*5);
printf("%d / %d = %d\n", 11,5,11/5); //몫구하기 -- 소숫점을 사용하지 않음
printf("%d / %d = %d", 11,5,11%5); //나머지 구하기
return 0;
}
12 + 5 = 17
20 - 5 = 15
9 * 5 = 45
11 / 5 = 2
11 / 5 = 1
--------------------------------
Process exited after 0.02345 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
사칙연산 모두 가능합니다.
알아둘점은 나눗셈시 나머지는 %기호 몫은 / 기호 입니다
나눗셈시 11을 5로 나누면 정수에선 2이상 나누지 못하므로 몫이 나옵니다.
#include <stdio.h>
int main(){
printf("10진수 : %d, 16진수 : %x, 8진수 정수 : %o\n", 30,30,30);
printf("10진수 : %d, 16진수 : %x, 8진수 정수 : %o", -50,-50,-50);
return 0;
}
10진수 : 30, 16진수 : 1e, 8진수 정수 : 36
10진수 : -50, 16진수 : ffffffce, 8진수 정수 : 37777777716
--------------------------------
Process exited after 0.02567 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
아까 위표에서 16진수는 %x로 , 8진수는 %o로 표기한다고 했습니다.
음수를 표기해보면 10진수는 표현이 가능하나 16진수와 8진수에선 쓰레기값이 나옵니다.
즉 양수만 표현 가능합니다.
2편에서 계속됩니다....
'프로그래밍 강좌 > C' 카테고리의 다른 글
[C언어 강좌] #4-1 scanf로 입력받기 (0) | 2019.11.08 |
---|---|
[C언어 강좌] #3 변수(variable) (0) | 2019.11.02 |
[C언어 강좌] #2-2 printf 로 마음대로 출력하기 (0) | 2019.11.01 |
[C언어 강좌] #1 개발환경 구축하기 (0) | 2019.10.29 |
[C언어 강좌] #0 시작에 앞서 C언어를 왜 배우는가? (0) | 2019.10.28 |