출력 함수 printf()

 

printf()함수에 대하여 이야기하기전에 함수에 대한 필수적인 용어를 먼저 보자.

    • 함수 정의 : 사용자가 함수를 만드는(정의하는) 과정
    • 함수 호출 : 라이브러리 함수를 포함해 만든 함수를 사용하는 것
    • 매개변수 : 함수를 정의할 때 사용되는 입력변수
    • 인자 : 함수 호출 과정에서 전달되는 여러 입력값

printf() 함수는 헤더파일 stdio.h에 있는 함수이다.

 

printf()는 인자를 크게 형식문자열과 출력 목록으로 구성된다.

//printf(" 형식문자열(출력할 문자) ", 출력목록);

int a = 3;

int b = 4;

 

    printf(" %d 와 %d의 합은 %d입니다. \n", a, ba+b);

 

형식문자열에는 출력될 일반 문자와 형식지정자, 이스케이프 문자로 구성된다.

 

 

형식 지정자

 

형식 지정자는 어떠한 자료형태로 표현할 것인지 지정하는 문자이다.

 

서식문자 자료형 출력
%c char, int 문자 출력
%d, %i int 부호 있는 정수 출력
%o unsigned int 부호 없는 8진수 출력
%x, %X unsigned int 부호 없는 16진수 출력, x는 소문자 출력, X는 대문자 출력
%u unsigned int 부호 없는 10진수 출력
%e, %E double 실수를 지수 형식으로 출력,  ex) 1.2345e+002
%f , %lf double 소수 형식 출력
%s char * 문자열 출력
%p void * 주소값을 16진수로 출력

 

형식 지정자는 %와 서식문자 d 사이에 %[옵션(플래그)][폭] . [출력문자수] d와 같이 표현한다.

 

 

이스케이프 문자

 

이스케이프 문자는 역슬래쉬 와 문자의 조합으로 표현하는 문자이다.

이러한 문자는 \n과 같이 다음 줄로 이동하는 등 특수한 문자, 제어문자들을 표현한다.

 

제어 문자 코드값(10진수) 제어문자 표현 의미
널문자 0 \0  아스키코드 0번
경고 7 \a  경고음 울림
백스페이스 8 \b  한 문자 뒤로 이동
수평탭 9 \t  수평으로 탭만큼 이동
개행문자 10 \n  다음 줄로 이동
수직탭 11 \v  수직으로 탭만큼 이동
폼피드 12 \f 새 페이지의 처음으로 이동
캐리지 리턴 13 \r 현재 줄의 처음으로 이동
큰따옴표 34 \" " 문자 표현
작은따옴표 39 \' ' 문자 표현
역슬래쉬 92 \ 문자 표현

위와 같이 여러문자가 있다.

여기서 '\'(역슬래쉬)는 키보드에 없어지면서 '\'문자를 쓰면 '\'로 인식한다.

개인적으로 printf()함수를 쓰면서 이스케이프 문자중에 '\n' 을 제일 많이 쓰는거 같다.

 


 

입력 함수 scanf()

 

scanf()는 프로그램 사용자로부터 변수의 값을 입력하게 하여 입력값을 저장하는 함수이다.

 

//scanf(" 형식문자열 ", &입력변수);

int a, b;

    scanf(" %d %d ", &a &b );

 

위와 같이 위와 같이 scanf()함수에서는 형식지정자와 일반문자, &입력변수로 구성된다.

&는 주소연산자로 뒤에 표시되는 변수의 주소값을 반환한다는 의미이다.

입력값이 저장되는 변수를 찾는다는 의미에서 주소연산자 &가 사용되고 주소연산자를 사용하지 않으면 오류가 발생하게 된다.

 

입력 함수 사용

 위 사진과 같이 여러 값을 입력할때 스페이스 또는 엔터키를 눌러 입력값을 구분하고, 마지막 값을 입력한 후에는 엔터키를 눌러야 프로그램이 진행된다. 

 

 여기서 sacnf()함수 사용시 주의할 점으로 최근 비주얼 스튜디오에서는 scanf()함수를 사용하면 경고 또는 오류가 발생한다. 보안문제로 사용을 권장하지 않고 있는 상태이고, scanf_s()로 대체되고 있다. 

비주얼 스튜디오 2017 이하에서는 #include<stdio.h>  문장 전에 #define _CRT_SECURE_NO_WARNINGS 를 정의하여 경고메시지를 발생하지 않도록 하였지만, 2019에서는 이 방법이 되지않아 scanf_s()함수를 사용하여 경고 메시지를 발생하지 않도록 하자.

 또, scanf()함수를 사용하면서 엔터키가 원하지 않는 변수에 저장되는 경우도 있다. 입력에는 임시저장 장소인 버퍼(buffer)를 사용하는데, 입력과 같이 자료를 처리할 때 바로 처리하지 않고 중간에 임시로 저장하고, 버퍼가 가득차거나 명령에 의해 호출되어 입력을 수행한다. scanf()함수를 여러번 호출하게 되면 엔터를 누르면서 버퍼에 엔터가 저장되고 실제 문자에는 저장되지 않을 수 있다. 그럴 때 함수 fflush(stdin)을 호출하여 버퍼를 없애버리자.

 

    scanf("%d", &a);

    fflush(stdin); //입력 버퍼를 모두 지움

    scanf("%c", &ch);

 

여기까지 대표적인 입출력 함수 printf(), scanf()를 알아보았다.

전처리

 C언어에서는 컴파일러가 컴파일을 하기 전에 전처리기의 전처리 과정이 필요하다.

전처리 과정은 컴파일을 하기 이전에 수행하는 작업으로, #include 전처리 지시자를 통한 헤더파일 삽입, #define을 통한 상수 표현이 있다.

 

1. 전처리 지시자 #include

 전처리 지시자 #include 는 영어의 표현 그대로 헤더파일을 포함한다는 뜻이다.

여기서 헤더파일은 함수, 자료형의 재정의 등과 같은 문장이 있는 텍스트 파일을 이야기한다.

대표적인 헤더파일로 stdio.h는 printf(), scanf() 등 기본 입출력 함수들을 담고 있는 파일이고, 자주 쓰인다.

이제 배우는 printf(), scanf() 함수는 우리가 작성을 소스파일에 사용하기 위해 stdio.h가 필요한데, #include로 헤더파일을 다음과 같이 삽입할수 있다.

 #include <stdio.h>

 stdio.h말고 다른 헤더파일을 넣고 싶다면 <>안에 파일이름을 작성하면 된다.

여기서 소스 작성 시 주의사항으로 위의 문장과 같이 전처리 지시자는 항상 #으로 시작하고, 마지막에 세미콜론을 붙이지 않는다.

 

비주얼 스튜디오에서 다음과 같이 해더파일 소스를 볼 수도 있다.

소스의 <stdio.h>에 마우스 우클릭으로 메뉴를 열면, 위 사진과 같이 '문서로 이동'을 클릭한다.

 

stdio.h 헤더파일 소스

위 사진과 같이 헤더파일 소스를 볼 수 있고, 다음과 같이 헤더파일 위치도 알 수 있다. 

 

헤더파일 위치

2. #define

프로그래밍 언어에서 정해진 하나의 값으로 사용되는 데이터값을 '상수'라고 한다. 쉽게 말하면 변하지 않고 있는 그대로의 데이터값이다.

상수는 있는 그대로의 데이터값을 표현하는 리터럴상수와 이름을 갖는 심볼릭상수가 있다.  

이러한 상수들 중 심볼릭상수를 표현하는 방법중 하나가 전처리 지시자 #define이다.

 

#define은 정수,실수,문자 등의 상수를 PI, K, PPT 등의 이름으로 정의한다.

#define 이름 상수값

#define PI 3.14

 


자료형

 자료형은 데이터를 표현하고 저장하는 자료에대한 종류이다.

그 종류의 기본은 정수형, 실수형, 문자형, void형(무치형)으로 분류된다.

이러한 자료형을 프로그래머가 알고리즘의 적당한 자료형을 사용하여 효율적인 프로그램을 작성한다.

 


기본 자료형

기본적인 자료형은 정수형, 실수형, 문자형, void형(무치형)으로 나뉘어진다고 했다.

이러한 자료형을 더 자세히 살펴보면 다음과 같다.

 

1.정수형

정수를 표현하는 자료형이다.

자료형 음수지원 여부 저장공간 크기 표현 범위
short 부호 있는 자료형(음수지원) 2 byte -2^15 ~ 2^15 -1
int 4 byte -2^31 ~ 2^31 -1
long 4 byte -2^31 ~ 2^31 -1
unsigned short

부호 없는 자료형

unsigned

2 byte 0 ~ 2^16 -1
unsigned int 4 byte 0 ~ 2^32 -1
unsigned long 4 byte 0 ~ 2^32 -1

 

2. 실수형

3.14, 1.2345 와 같은 실수를 표현하는 자료형이다.

자료형 크기  정수의 유효 자릿수
float 4 byte 6~7 자리
double 8 byte 15~16 자리
long double 8 byte 15~16 자리

 

3.문자형

문자형의 저장값은 실제로 정수값이고, 아스키 코드표에 의해 문자를 표현한다. 

자료형 크기 표현범위
char 1 byte -128 ~ 127
unsigned char 1 byte 0 ~ 255

 

4. void형 (무치형)

void는 영어로 '빈 공간' 이라는 뜻이다. void형은 말 그대로 텅 빈 공간이다, 아무런 자료형도 지정하지 않는 자료형, 함수의 반환값에 '반환값이 없다'라고 표현할때 주로 사용한다.

 


변수(variables)

 사람이 요리를 하기 위해서는 식재료들을 담을만한 접시와 최종적으로 나오는 음식에 대한 접시가 필요하다.

프로그래밍에서도 정수, 실수, 문자 등 여러가지 데이터를 저장하는 공간을 필요로하는데, 프로그래밍에서 데이터를 저장하는 공간을 변수(variables)라고한다. 변수에 고유한 이름이 붙여지고, 물리적으로 메모리에 위치한다.

자료형에 따라 변수에 저장되는 데이터값이 달라지고, 변수의 크기도 달라진다.

변수의 데이터값은 바뀔 수 있고, 마지막의 저장된 값이 유지된다.

 

변수

 

변수는 어떠한 종류의 데이터를 사용하고, 변수의 크기를 결정하는 자료형과, 변수의 이름을 붙여 변수를 사용하겠다고 알리는 변수선언을 하는 과정이 필요하다.

 

1
2
3
4
5
6
int age; //변수선언문 (자료형 변수이름;)
 
age = 23//변수에 값을 저장하는 대입문 (변수 = 데이터값;)
 
int year = 2019//변수 초기화
 

 

변수는 위에 첫번째 문장과 같이 선언하고, 선언된 변수에 두번째문장과 같이 데이터값을 저장한다.

두번째 문장의 '=' 는 오른쪽에 위치한 값을 왼쪽의 변수에 저장한다는 의미(수학에서 쓰는 같다라는 의미 아님)이고, 이를 대입연산자라 한다.

세번째 문장은 변수의 선언과 함께 변수의 데이터 초기값을 저장하는 문장이다. 이것을 변수의 초기화라 한다.

 

 

 

 

프로그램 구조

 

 C프로그램을 전체적으로 살펴보면 여러 개의 함수들이 모여 하나의 프로그램이 된다는 것을 알 수있다. 그래서 C언어를 함수들의 집합이라고 이야기하기도 한다. C언어의 함수들 중에서 main()이라는 함수가 가장 기본이 되고 C프로그램이 실행되면 main()함수로 시작해 main()내부의 문장의 순서대로 실행하고 끝이 난다. C프로그램에서 main()함수 하나는 꼭 있어야 한다.  다음은 C프로그램의 구조를 요약한 것이다.

1. 전처리    // 컴파일하기 전에 '어떤' 것, 기능을 해라!

 

2. 함수, 변수선언     // 나는 프로그램에서 어떤 종류의 함수와 변수를 사용하겠다!

 

3. main()함수     // 프로그램의 시작과 끝, 프로그램의 설명

 

4. 기타 함수     // 함수의 설명

 

 프로그래밍 언어로 표현하면 아래와 같다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//전처리
#include <stdio.h>
#define PI 3.14 
// 함수선언
int functions(intint)
 
// main()함수
int main(void)
{
    puts("Hello C!!");
    return 0; //main()함수 종료(프로그램 종료)
}
 
//기타 함수구현 
int functions(int a, int b)
{
    int sum = 0;
    sum = a + b;
    return sum;
}
 
 

 

 여기서 // 내용 으로 되어있는것은 한 줄의 내용을 프로그램의 내용에는 넣지 않는 설명문장이고, 이것을 주석이라고 한다. C언어에서 각각의 문장들은 끝에 세미콜론( ; )을 붙이고, 중괄호{ ~~} 로 여러 문장들을 묶어 소스를 작성한다. 여기서 전처리 부분의 문장들은 항상 #으로 시작하고, 끝에 세미콜론( ; )이 붙지않는다. 


프로그램을 개발하기 위해서는 프로그램 개발과정에 필요한 컴파일러, 링커, 디버거 등 여러가지 프로그램이 필요합니다. 개발에 필요한 편집기 등 이러한 프로그램을 통합해 효율적으로 제공하는 환경을 통합개발환경(IDE)라고 합니다.

이번에는 MS사의 Visual Studio 라는 IDE를 설치해봅시다.

 

1.다운로드

 

비주얼 스튜디오 홈페이지

밑의 링크에 들어가서 위의 사진과 같이 visual studio 커뮤니티(community)2019 버전을 다운로드 합니다.

프로페셔널과 엔터프라이즈 버전은 상용버전이고 커뮤니티버전은 무료버전입니다.

 

Visual Studio IDE, 코드 편집기, Azure DevOps 및 App Center - Visual Studio

Visual Studio 개발자 도구 및 서비스로 모든 플랫폼에서 어떤 언어로든 앱 개발을 쉽게 할 수 있습니다. Mac 및 Windows 코드 편집기, IDE 또는 Azure DevOps를 체험해 보세요.

visualstudio.microsoft.com

 


 

2.다운로드 후 실행

 

다운로드 후 화면

다운로드 후의 화면 입니다.

실행 화면

다운 후 실행을 하면 다음과 같은 화면이 나옵니다. 계속을 눌러 설치를 계속 진행합니다.

 


 

3. 필요한 개발 툴 선택, 설치

C/C++ , python 등 필요한 개발 툴을 설치할 수있습니다. 우리는 C언어를 박살 낼 것이기 때문에 C/C++를 선택하여 설치를 계속해서 진행합니다.

 


 

4. 설치 하는 중

 

설치를 완료하면 로그인 하라는 창이 뜨실텐데 MS 사이트에 가서 회원가입 후 로그인하셔도 되고 안해도 됩니다.

 


 

5. 설치 완료.. 새 프로젝트 만들기

 

우측 하단에 새 프로젝트 만들기를 클릭해줍니다.

여기서 프로젝트는 C언어로 작성된 C 소스파일을 여러개 저장하고 관리하는 단위이고 프로젝트 이름으로 실행 파일을 생성합니다.

 

 

빈 프로젝트를 클릭해주시고 다음을 클릭해줍니다.

그 후 프로젝트 이름을 설정해주시고 나면 하나의 프로젝트가 만들어집니다.

 


 

6. 소스 파일 만들기

 

프로젝트를 만들면 위 사진과 같이 솔루션 탐색기가 보입니다. 솔루션 탐색기에서 소스파일을 만들어줍니다.

 

 

위 사진과 같은 창이 뜨면 C++파일을 선택 후 이름을 설정해줍니다.

이 때, 확장자명은 .c 로 저장(C 소스파일)합니다.

확장자명을 .cpp로 저장하시면 C++소스파일이 됩니다.

 


 

7. 간단한 프로그램 구현 후 확인

 

간단히 "Hello C!!" 라는 문장을 출력하는 프로그램을 만들고 실행해 보았습니다.

실행 잘 되네요. Ctrl + F5 를 누르면 현재 프로젝트를 실행 할 수있습니다.

여기까지 visual studio2019 설치를 하였습니다. 

프로그램(program)

우리는 아침마다 스마트폰에서 알람을 통해 잠을 깨고, 학교를 가거나 출퇴근시간에 음악감상을 하거나, 학교나 직장에서 아래한글, Ms office를 이용해 문서작업을 한다. 우리가 일상속에서 사용하는 스마트폰의 앱이나 컴퓨터에서 문서작업하는 아래한글 등 이와 같은 것들이 프로그램이다. 즉 특정목적의 작업을 수행하기 위한 관련 명령어나 파일들의 모임을 프로그램이라 한다.


프로그래밍 언어(programming language)

위에 설명한 여러가지 프로그램을 만들기 위해서는 프로그래밍 언어가 필요하다. 프로그래머가 프로그램을 개발하기 위해 사용되는 언어가 프로그래밍 언어이다. 어떠한 문제를 해결하기 위해 컴퓨터에게 명령을 적절히 내려 프로그램을 만든다. 명령을 내리기 위해 프로그래머와 컴퓨터가 서로 대화를 하기 위한 것이다. 프로그래밍 언어에는 JAVA, C, C++, Python, Visual Basic, JAVAScript 등 사람들이 목적에 따라 여러가지 언어를 개발하였다. 우리는 그 중에서 C언어를 박살낼 것이다.

2019년 5월 프로그래밍 언어 top 20


C

C언어는 1972년 데니스 리치가 개발한 프로그래밍 언어이다. 운영체제 유닉스(UNIX)를 개발하기 위해 만들었고, 시스템의 세세한 부분까지 제어가능하며, 메모리 관리 기능을 갖고있어 프로그램을 효율적으로 사용하고 실행속도가 빠르다.

C언어는 C++, C#, Objective-C 등 여러가지 프로그래밍 언어에 많은 영향을 끼쳐 많은 언어의 기본이 되는 프로그래밍 언어이고, 아직까지 사랑받고 있는 언어이다.


컴파일러

C 프로그래밍을 하기 위해 필요한 것 중에 하나가 컴파일러이다. 컴퓨터는 전기적인 신호가 흐르는 1과 흐르지 않는 0으로 표현하는 기계어를 사용하는데 이러한 컴퓨터와 C언어를 사용하는 우리가 서로 대화를 하기 위해서는 번역기가 필요하다. 이러한 번역기 역할을 하는 것이 컴파일러이다.


프로그램 구현 과정

프로그램 구현 과정은 다음과 같다.

 1. 소스 작성

 2. 컴파일

 3. 링크

 4. 실행

1. 소스작성

소스작성은 C언어와 같이 프로그래밍 언어로 만들고자 하는 프로그램에 대한 명령어들을 텍스트파일로 작성하는 것을 말한다. 이러한 소스작성을 코딩이라고도 하고, 만들어진 텍스트 파일을 소스파일 이라고 한다.

 

2. 컴파일

컴파일은 컴파일러가 소스파일에 작성된 프로그래밍 언어를 기계어로 바꾸어 주는 과정을 말한다.

컴파일러가 기계어로 바꾸면서 생성하는 파일을 목적파일(object file)이라고 한다.

 

3. 링크와 실행

링크는 하나 또는 여러가지의 목적파일을 연결하여 하나의 실행파일을 만들어내는 과정을 링크라고 한다.

링크를 통해 만들어진 실행파일을 실행해보면 프로그램의 결과물을 볼 수있다.

+ Recent posts