[C언어 강좌] #2-1 printf 로 마음대로 출력하기


// 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( ) 등이 있어서 이것을 사용할 수 있는 겁니다.

 

C언어에 존재하는 여러 헤더 파일들

 

 

 

메인함수

 

int main(void){       
  printf("Hello C World!!\n");    
  return 0;
}

 

그리고 main( )이라는 함수를 정의했습니다.

 

함수라.. 기억이 날듯 말듯 합니다

함수는 초등학교 때도 배웠을 건데요. f(x) = x + 2 라던지...

예를 들면 상자에 과자 3개를 넣었는데 5개가 나왔다던지 하는 겁니다.

함수에는 입력값(INPUT)이 있고 안에서 처리하는 식(FUNCTION)출력 값(OUTPUT)이 있습니다.

 

여기서 main 은 함수의 이름으로 프로그램 실행 시 이름 그대로 맨 처음에 실행되고 맨 나중에 종료되게 됩니다.

 

void라고 적힌 곳은 함수가 받는 입력값(argument)입니다.

void라는 말 그대로 입력받는 값이 없다는 겁니다.

 

저희 목적은 print로 출력만 하는 거니깐요.

void 이므로 쓰지 않아도 정상 작동합니다.

 

앞에 int (정수)는 자료형인데 함수 출력 값(반환 값)의 형태를 지정합니다.

 

http://blog.naver.com/PostView.nhn?blogId=sharonichoya&logNo=220339079484&parentCategoryNo=&categoryNo=22&viewDate=&isShowPopularPosts=false&from=section

C언어에서의 자료형 표입니다.

이것을 다 암기하거나 이해하실 필요는 없고

필요할 때마다 참고하시면 됩니다.

 

자료형에 관해선 나중에 변수 강의 때 한 번 더 쓰겠습니다.

 

 

함수처리

 

그리고 내부에서 처리하는 식이 바로 "Hello World!!"를 출력하는 부분입니다.

대괄호로 묶은걸 볼 수 있는데 main 함수가 작동 시에 저 대괄호 내부의 내용이 실행됩니다.

 

그러면 내부에서 처리하는 소스를 보겠습니다

 

printf("Hello C World!!\n");
return 0;

 

printf 함수는 출력할 때 사용하는 함수입니다. stdio.h 에 정의되어 있습니다.

 

저렇게 문자열을 출력할 때는 "(큰 따옴표)를 사용해 묶어서 출력합니다.

 

작은따옴표는 사용할 수 없습니다. (일부 언어에서는 인정함 ex) python )

 

\n 은 개행 문자로 New Line의 약자입니다. 한 줄 띄라는 의미겠죠?

 

그리고 ; 를 세미콜론이라고 하는데 우리가 글을 쓰면서 마침표를 찍듯 C언어에서의 마침표입니다.

 

그리고 마지막으로 프로그램이 끝나면 컴퓨터는 이것을 모르니깐 알려줘야 합니다.

return의 기능은 2가지입니다. 1. 특정값을 반환함 2. 함수의 종료를 알림

이 경우에는 2번 케이스가 되겠죠?

 

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
계속하려면 아무 키나 누르십시오 . . .

사칙연산 모두 가능합니다.

알아둘점은 나눗셈시 나머지는 %기호 몫은 / 기호 입니다 

나눗셈시 115로 나누면 정수에선 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편에서 계속됩니다.... 

 

COMMENT WRITE