본문 바로가기
C

1. C시작 (기본구조, 자료형, 입출력함수, 형식지정자)

by heekng 2021. 1. 19.
반응형
 

C언어를 시작하며 이전에 자바를 공부한 경험을 되살려 C를 알아보겠습니다.


1. C언어란?

1960년대부터 변수, 배열, 구조체를 주로 한 C언어가 이용되었고 구조적언어, 절차적언어로 사용되었습니다.


2. C언어의 기본구조

C언어의 기본구조는 다음과 같습니다.

#include <stdio.h>

void main()

{

printf("Hello Worlds");

}

1) #include <파일>는 선행처리자이며, main함수가 실행되기 전에 해당하는 파일을 로드하여 main 안에서 이용할 수 있도록 도웁니다.

stdio.h란 기본 입출력함수를 가지고있는 파일입니다.

2) void main() {}은 해당 프로그램이 실행될 때 가장 먼저 수행하게 되는 함수입니다. main()함수는 항상 존재해야 하며, 없거나 2개이상 존재하면 안됩니다.

void가 있는 자리에는 리턴값을 정해주는 자리이며, void란 리턴값이 없다는 것을 뜻합니다.

또한, main()함수 안에 수행할 코드를 작성합니다.


3. 출력함수 printf

입출력을 하기 전에 형식지정자를 알아야 합니다. 형식지정자란 출력할 데이터가 어떤 형태인지 알려주는 역할을 합니다.

출력함수에 이용되는 형식지정자는 다음과 같습니다.

형식지정자

내용

%d

10진수 정수로 출력

%f

소수점 고정 실수로 출력

%lf

double형 실수를 소수점 고정형식으로 출력

%c

문자형으로 출력

%o

부호없는 8진수 정수로 출력

%x

부호없는 16진수 정수로 출력

%s

문자열로 출력

%u

unsigned(부호없이) 출력

%e

지수 표기 형식으로 출력

C의 기본출력함수인 printf()는 화면을 통하여 내용을 출력합니다.

printf("[형식지정자1,2, ...] [제어문자1, 2, ...] 출력할 내용", 출력데이터1, 출력데이터2, ...); 의 형태로 작성합니다.

#include <stdio.h>

void main()

{

printf("정수: %d\n실수: %f\n문자: %c", 7, 3.56, 'A');

}

코드 실행 시

위처럼 첫번째 인자에는 출력할 문구와 함께 형식지정자와 제어문자를 작성하고, 이후 인자에서 작성한 형식지정자의 순서에 맞게 데이터를 입력합니다.

제어문자는 \와 함께 작성하며 \n은 줄넘김을 뜻합니다.

위 코드에서 7, 3.56, 'A'가 작성된 위치에는 변수도 입력할 수 있습니다.

형식지정자를 %[자릿수]형식지정자 형태로 작성하면 해당 출력문자의 자릿수를 지정할 수 있습니다

예) %3.2d => 정수3자리와 소수점아래 2자리까지 출력


3. 입력함수 scanf_s()

입력함수는 외부에서 키보드로 데이터를 입력받는 함수입니다.

입력함수의 형식지정자는 다음과 같습니다.

형식지정자

내용

%d

10진수 정수형으로 입력

%c

문자형으로 입력

%f

실수형으로 입력

%o

8진수 정수형으로 입력

%x

16진수 정수형으로 입력

%s

문자열로 입력

%u

unsigned(부호없는)으로 입력

입력함수 scanf_s()를 작성하는 방법은 다음과 같습니다.

scanf_s("%[자릿수]형식지정자1 %[자릿수]형식지정자2 ...", &변수명1, &변수명2, ...);

scanf_s함수를 이용하여 데이터를 입력받는 경우엔 꼭 입력받은 데이터가 들어갈 변수명을 작성합니다.

#include <stdio.h>

void main()

{

int num;

printf("입력받을 정수 입력: ");

scanf_s("%d", &num);

printf("입력받은 정수는 %d 입니다.", num);

}

특이점은 scanf_s()함수에서 변수명 앞에 &를 붙여주는데 이는 &뒤에 붙는 내용은 주소값을 뜻한다는 것이며 자세한 변수에 대한 내용은 추후 포스트 하겠습니다.


4. 자료형, 변수

1) 변수란 프로그램에서 데이터를 기억하기 위해 메모리의 공간을 미리 준비하고 메모리의 주소 대신 이용할 이름을 설정하는 것입니다.

변수를 선언할 때에는 자료형 변수명; 의 형태로 선언하며, 자료형은 다음과 같습니다.

자료형

크기(byte)

데이터

범위

char

1

문자

-128 ~ +127

short

2

정수

-32,768 ~ +32,767

unsigned short

2

부호없는 정수

0 ~ 65,535

int

4

정수

-2,147,483,648 ~ 2,147,483,648

unsigned int

4

부호없는 정수

0 ~ 4,294,967,295

long

8 (windows운영체제에서는 4)

정수

-2,147,483,648 ~ 2,147,483,648

unsigned long

8 (windows운영체제에서는 4)

부호없는 정수

0 ~ 4,294,967,295

float

4

소수

-3.4 * 10^38 ~ 3.4 * 10^38

double

8

소수

-1.7 * 10^308 ~ 1.7 * 10^308

제가 공부하면서 혼란이 왔던 int형과 long형의 차이점은 4byte와 8byte의 차이가 존재함에도 넣을 수 있는 수의 범위가 같다는 점인데, 이는 windows운영체제에서의 long형은 4byte로 작동한다는 점이였습니다.

32비트 운영체제에서 short는 2, int는 4, long은 4byte이며, 64비트 운영체제에서 short는 2, int는 4, long은 8byte로 작동합니다.

#include <stdio.h>

void main()

{

int num;

printf("입력받을 정수 입력: ");

scanf_s("%d", &num);

printf("입력받은 정수는 %d 입니다.", num);

}

위 코드를 보면 num이라는 이름을 가진 변수는 int형 정수이며, 입력받을 때 -2,147,483,648 ~ 2,147,483,648 안에 존재하는 수를 입력받을 수 있습니다.

2) char 문자형의 특이점은 단순한 문자만 받는 것이아닌 아스키코드를 이용하여 숫자도 넣을 수 있다는 점입니다.

#include <stdio.h>

void main()

{

char numChar = 65; //문자형이지만 정수 65를 넣음

printf("numChar : %c", numChar);

}

아스키코드에서 10진수 정수 65는 A를 뜻하여 문자형 65를 출력하면 A가 출력됩니다.

3) 변수명에서 유의사항

변수명을 작성할 때에는 몇가지를 주의하여야 합니다.

(1) 영문자, 숫자, 특수문자(_)로만 구성

(2) 반드시 영문자나 특수문자(_)로만 시작

(3) 영문자 대문자와 소문자는 엄격히 구분

(4) 변수의 이름을 키워드는 사용할 수 없음

또한 변수 이름은 헝가리언 표기법, 파스칼 표기법, 카멜 표기법 등으로 짓을 수 있습니다

(1) 헝가리언 표기법: 자료형의 약자를 접두어로 붙이는 방법

(2) 파스칼 표기법: 의미 있는 단어를 _로 구분하는 방법

예) phone_number

(3) 카멜 표기법: 시작은 소문자로, 단어의 첫자를 대문자로 표기하는 방법

예) phoneNumber

4) 자료형의 재정의 typedef

unsigned int, unsigned char 등과 같은 자료형은 매번 작성하기에 이름이 길어 불편함이 있습니다.

이때 사용하는 것이 typedef입니다.

typedef 기존_자료형_이름 새로운_자료형_이름; 의 형태로 작성하며 main()함수 밖에서 작성합니다.

#include <stdio.h>

typedef unsigned int u_int; //자료형 재정의

void main()

{

u_int num = 82; //재정의한 자료형 사용

printf("num : %d", num);

}

반응형

'C' 카테고리의 다른 글

3. 조건문과 반복문 (if, switch, for, while)  (1) 2021.01.19
2. 연산자  (0) 2021.01.19