61
교교 : "C 교교교교교 교교", 교교교/교교교교교, 교교교교교 1 c1_02_data 2교 교교교교 교교교 교교 교교 교교 교교교 교 교 교교

2장 데이터형

Embed Size (px)

DESCRIPTION

2장 데이터형. 변수와 상수 출력 함수 데이터 형 형 변환. 학습목표. 변수와 상수의 개념을 이해할 수 있다 . 데이터 형의 의미와 필요성을 이해할 수 있다 . C 가 제공하는 데이터 형의 종류와 그 특성을 알 수 있다 . printf() 사용법을 익히고 활용할 수 있다. 변수( Variable). 변수는 프로그램을 작성하는 과정에서 처리 해야 될 많은 데이터와 정보, 처리후의 결과 등을 저장 할 수 있는 공간 을 의미 - PowerPoint PPT Presentation

Citation preview

Page 1: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 1

c1_02_data

2 장 데이터형

① 변수와 상수

② 출력 함수

③ 데이터 형

④ 형 변환

Page 2: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 2

c1_02_data

학습목표

변수와 상수의 개념을 이해할 수 있다 .

데이터 형의 의미와 필요성을 이해할 수 있다 .

C 가 제공하는 데이터 형의 종류와 그 특성을 알 수 있다 .

printf() 사용법을 익히고 활용할 수 있다 .

Page 3: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 3

c1_02_data

변수 (Variable)

변수는 프로그램을 작성하는 과정에서 처리 해야 될 많은 데이터와 정보 , 처리후의 결과 등을 저장할 수 있는 공간을 의미

변수가 선언되면 컴퓨터 내부적으로 볼 때 일정 크기의 기억장소를 할당 받는다 .

할당 받는 메모리의 크기는 변수의 데이터형에 따라 다르다 .

C 언어에서 변수를 선언할 때에는 저장될 데이터의 범위 및 상수의 종류에 따라 적절하게 데이터형을 결정해야 한다 .

Page 4: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 4

c1_02_data

변수의 선언

데이터형을 갖는 변수의 선언형식

① 데이터형 변수명 A, 변수명 B, ...;

예 ) int i, j, k;

② 데이터형 변수명 A;

예 ) int i;

③ 데이터형 변수명 B=0;

예 ) int j=0;

1. 데이터형이 동일한 2 개 이상의 변수를 선언할 때에는 콤마 (,) 로 구분하여 동시에 선언이 가능하며 ,

2. 개별적 선언도 가능하다 .

3. 변수의 선언과 초기화는 같은 문장에서 이루어 질 수 있다 .

변수는 외부 변수를 제외하고 함수 안에서 명령문을 사용하기 전에 선언 한다 .

Page 5: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 5

c1_02_data

변수 선언의 예

char c, ch; /* 변수 c, ch 를 문자형으로 선언 */

unsigned char munja; /* 변수 munja 를 부호 없는 문자형으로 선언 */

int i, j; /* 변수 i, j 를 부호 있는 정수형으로 선언 */

unsigned int k, l; /* 변수 k, l 를 부호 없는 정수형으로 선언 */

float a, f; /* 변수 a, f 를 4 byte 실수형으로 선언 */

double x, y, z; /* 변수 x, y, z 를 8 byte 실수형으로 선언 */

Page 6: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 6

c1_02_data

변수의 초기화

/* 선언과 동시에 초기화 하는 경우 */int count = 10;

/* 선언만 하고 초기화 하지 않은 경우 */float average;

/* 문자열 포인터 변수의 선언과 동시에 초기화 */char *user_name = “Hello, World!” ;

/* count 는 선언과 동시에 값을 할당하고 item_no 는 선언만 */

int count=10, item_no;

/* 선언 후 별도로 값을 할당하는 경우 */average = 78.37;

Page 7: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 7

c1_02_data

예 ) 변수의 선언 , 연산 , 대입

#include <stdio.h>

main()

{

int num1, num2;

int sum;

float div;

num1 = 2;

num2 = 3;

sum = num1+num2;

div = sum / 2.0;

}

Page 8: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 8

c1_02_data

변수명의 규칙

변수이름에 사용될 수 있는 문자는 알파벳문자 , 숫자 , 언더 스코어문자 (_)이다 .

변수 이름은 반드시 영문자나 _ 로 시작해야 된다 .

대 / 소문자는 서로 다른 이름으로 취급되므로 구별해야 한다 .

C 언어에서 사용되는 키워드 (Keyword) 는 변수 이름으로 사용할 수 없다 . 변수 이름을 정할 때는 위의 규칙에 따라 정하되 , 변수가 사용되는 목적을 알 수

있는 단어로 선택하는 것이 바람직하다 .

변수선언의 예 잘못된 변수선언 : int 2number; float f&data; char case; 올바른 변수선언 : int number; float f_data; char _ch;

Page 9: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 9

c1_02_data

키워드 , 예약어

Page 10: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 10

c1_02_data

상수 (constant)

상 수 란 연 산 에 이 용 되 는 데 이 터 로 서 그 값 이 한 번 정 의 되 면 프로그램이 실행되는 도중에 그 값이 변화되지 않고 일정한 값을 유지하는 데이터를 의미

상수의 종류

Page 11: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 11

c1_02_data

정수형 상수

소수점을 포함하지 않는 수로서 부호 있는 수와 부호 없는 수로 구분

C 언어에서 정수형 상수는 진법에 따른 수로 표현 가능하다 .

Page 12: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 12

c1_02_data

정수형 상수의 표현 예

int a = 2002; /* 양의 정수형 상수 */

int b = -377; /* 음의 정수형 상수 */

int count2 = 012; /* 8 진 상수 */

int c; c = 0xFF; /* 16 진 상수 */

long int d; d = 1234L; /* long 형 상수 */

Page 13: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 13

c1_02_data

실수형 상수

실수형 상수는 소수점이나 지수부를 가지고 있는 데이터 기억장소에 저장 될 때에는 부호 , 지수부 , 가수부로 구분하여

저장된다 .

실수형 상수의 표현 예

float f1; f1 = 3.14; /* 소수점 형태 */

float f2; f2 = -0.005;

double e1; e1 = 0.14E-3; /* 지수 형태 */

double e2; e2 = 1.5E+2;

Page 14: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 14

c1_02_data

문자 상수

문자 상수는 한 개의 문자를 상수로 취급 , 단일 인용부호 (' ') 를 붙여 표현 한 개의 문자는 1 바이트로 처리

문자 상수의 표현 예

char ch1; ch1 = 'A'; /* 'A' 는 내부적으로 ASCII 코드 값으로 변환 */

char c1; c1 = '3'; /* '3' 는 내부적으로 ASCII 코드 값으로 변환 */

char ch2; ch2 = 0x41; /* ASCII 코드 0x41 = 'A' */

char c2; c2 = 51; /* ASCII 코드 51 = '3' */

Page 15: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 15

c1_02_data

문자 상수와 ASCII 코드

컴퓨터는 문자를 숫자로 대신하여 인식하며 상호 연관을 위해 ASCII 코드를 사용

문자상수의 표현 예

문 자 'A' 의 ASCII 코 드 에 대 응 하 는 0x41(16 진 수 ) 의 수 치 로 변환되어 기억되며 ,

3 에 해당되는 ASCII 코드 값 0x33(16 진수 ) 또는 51(10 진수 ) 이 기억 .

따라서 , ASCII 코드 값을 직접 대입하여도 같은 결과를 얻을 수 있다 .

Page 16: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 16

c1_02_data

문자열 상수

문자열 상수는 단일 문자가 하나 이상 연결되어 있는 문자열을 의미 인용부호 (" ") 를 붙여 표현 , 문자열 끝에는 널 문자 (‘\0’) 가 자동으로 추가되며 널 문자는 문자열이 끝나는 지점을 나타내는 역할을 한다 .

문자와 문자열 상수의 메모리크기 문자 상수 'A' 인 경우 : 기억장소 1 byte 가 필요 문자열 상수 "A" 는 널 (null) 문자를 포함해 2 byte 가 필요

문자열 상수의 표현 예 char ch[5]; ch = "abcd"; /* 문자열 상수 , 널 문자 포함 */ char ch[2]; ch = "A"; /* 문자열 상수 , 널 문자 포함 */ char ch; ch = 'A'; /* 문자 상수 , 널 문자 없음 */

Page 17: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 17

c1_02_data

매크로 상수

#define MAX 100 /* 매크로 상수의 정의 */ #define COUNT 10 /* 매크로 상수의 정의 */

for (i=0; i < COUNT; i++) { … }

COUNT = COUNT + 1; /* 오류 */

Page 18: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 18

c1_02_data

printf() : 출력 함수

화면에 형식화된 문자열을 출력하는 표준 라이브러리 함수이다 .

함수의 형식 printf(" 출력 형식 지정 문자열 ", 인수 1, 인수 2, ...);

출력 형식 지정 문자열 : 어떻게 항목들을 출력할 것인가 하는 방식을 나타내 주는 문자열이 지정된다 . 문자열을 나타내는 " " 의 형식을 갖추어야 한다 . 변환문자 , 수정자 , 플래그 , 출력문자 ( 열 ), 제어문자 들을 포함하게 된다 .

인수 1, 인수 2, ... : 출력될 항목 가리키는 것으로 상수 , 값이 출력되기 전에 계산되어야 할 계산식 등 인수들은 출력 형식 지정 문자열에 각 인수들과 대칭 되는 변환 문자가 있어야 함 인수들과 변환 문자는 생략 가능하다 .

Page 19: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 19

c1_02_data

제어 및 변환문자 없이 출력하기

printf() 는 기본적으로 인용부호 (" ") 안의 모든 문자열을 화면에 출력

printf() 문의 사용 예 : 단순출력

printf("Welcome"); /* welcome 을 화면에 출력 */ printf("computer language"); /* computer language 을 화면에 출력

*/

Page 20: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 20

c1_02_data

예제 프로그램

/* 단순 출력 (1) */

#include <stdio.h>main(){ printf(" 홍 길 동 ");}

실행결과홍 길 동

/* 단순 출력 (2) */

#include <stdio.h>

main()

{

printf("Welcome to C programming");

printf("C is a computer language");

}

실행결과 Welcome to C programmingC is a computer

language

Page 21: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 21

c1_02_data

제어문자 (Escape Sequence) 포함하여 출력하기

제어문자는 문자로 표현할 수 없는 ASCII 코드 문자들을 표현한 것 표현 방식은 역 슬래쉬 (\) 와 함께 사용하여 구성

제어문자는 문자형 변수에 단독으로 또는 문자열 속에 사용할 수 있다 .

제어문자들은 데이터를 출력할 때 출력 형식을 지정하는데 많이 사용된다 .

출력 형식 지정 문자열에 포함된 제어문자는 화면에 나타나지 않으며

제어문자에 해당되는 기능만을 수행한다 .

Page 22: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 22

c1_02_data

제어문자의 종류 및 기능

Page 23: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 23

c1_02_data

printf() 문의 사용 예 : 제어문자 이용

① printf("Welcome\n"); /* 문자열 출력 후 , 줄 바꿈 */

② printf("\tcomputer language\n");/* 다음 텝으로 이동하여 문자열 출력 후 , 줄 바꿈 */

③ printf(“\%%computer \tlanguage\n"); /* %computer 출력 후 다음 탭으로 이동 , language 출력 후 , 줄

바꿈 */

Page 24: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 24

c1_02_data

예제 프로그램

/* 제어문자 이용하여 출력하기 (1) */

#include <stdio.h>

main()

{

printf("Welcome to C programming\n");

printf("C is a computer language\

n");}

실행결과

Welcome to C programming

C is a computer language

/* 제어문자 이용하여 출력하기 (2) */

#include <stdio.h>

main()

{

printf("\tWelcome to \nC programming");

printf("\nC is a computer language");

}

실행결과

Welcome to

C programming

C is a computer language

Page 25: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 25

c1_02_data

변환문자 이용하여 출력하기

출력 형식 지정 문자열에서 사용되는 변환문자는 printf() 문 내의 지정된 인수의 값을 받아들이는 데이터형을 나타낸다 .

인수들의 값은 변환문자 데이터 형태로 변환되어 출력 형식 문자열에 저장된 후 인용부호 (" ") 안의 모든 내용이 출력된다 .

변환 문자들에 해당하는 인수 ( 변수 ) 는 반드시 같은 순서대로 지정해 주어야 함

Page 26: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 26

c1_02_data

변환 문자의 종류 및 기능

Page 27: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 27

c1_02_data

printf() 문의 사용 예 : 변환문자 이용

Page 28: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 28

c1_02_data

변환문자 이용하여 출력 (1)

#include <stdio.h>

main()

{

printf("%c%d%f", 'A', 41, 3.14);

printf("%c %d %f", 'A', 41, 3.14);

printf("char=%c, int=%d, float=%f", 'A', 41, 3.14);

printf("%f %e %g", 1.2345, 1.2345, 1.2345);

}

실행결과 A413.140000

A 41 3.140000

char=A, int=41, float=3.140000

1.234500 1.23450e+00 1.2345

Page 29: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 29

c1_02_data

제어문자 이용하여 출력 (2)

#include <stdio.h>main(){ char ch; int integer; float f;

ch = 'K'; integer = 255; f = 12.345;

printf("ch=%c, int=%d, f=%f", ch, integer, f); printf("int = %d, octal = %o, hexa = %x", integer, integer,

integer); printf("%d - %d = %d", integer, 55, integer-55); }

실행결과ch=K, int=255, f=12.345000

int = 255, octal = 377, hexa = ff

255 - 55 = 200

Page 30: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 30

c1_02_data

수정자 (Modifier) 이용하여 출력

수정자는 기본 변환문자와 같이 사용하여 기본 서식의 출력형식을 다양하게 변형시킬 수 있다 .

주의할 점은 수정자는 기본 변환 문자와 결합되어 출력형식을 변형시키는 것으로 새로운 서식을 의미하지 않는다 .

Page 31: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 31

c1_02_data

수정자의 종류 및 기능

Page 32: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 32

c1_02_data

수정자 (Modifier) 가 사용된 예

① printf("%10d", 123); /* 필드폭이 10 인 정수형을 오른쪽 정렬 */

② printf("%+10d", 123); /* 필드폭이 10 인 정수형을 + 부호와 함께 출력 */

③ printf("%-10d", 123); /* 필드폭이 10 인 정수형을 왼쪽 정렬 */

④ printf("%010d", 123); /* 빈 공간을 0 으로 채움 , 오른쪽 정렬 */

⑤ printf("%ld", 1234567); /* long 형 값으로 변환 */

⑥ printf("%5.2f", 123.456); /* 전체 필드폭이 5 이고 정밀도가 소수점 이하 2 자리인 소수점형 */

⑦ printf("%10.4f", 123.456); /* 전체 필드폭이 10 이고 정밀도가 소수점 이하 4 자리인 소수점형 */

Page 33: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 33

c1_02_data

수정자 이용하여 출력 (1)

#include <stdio.h>

main()

{

int a = 1234;

float b = 12.3456789;

printf("%d", a);

printf("%3d", a); /* 원 데이터보다 작은 자리수이면 원래 길이대로 출력 */

printf("%6d", a);

printf("%06d", a);

printf("%u", a);

printf("%f", b);

printf("%7.3f", b);

printf("%12.6f", b);

}

실행결과

12341234 1234001234123412.345679 12.346 12.345679

Page 34: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 34

c1_02_data

수정자 이용하여 출력 (2)

#include <stdio.h>

main()

{

printf("==========================");

printf("%c%c%c%c", 'A', 'B', 'C', 'D');

printf("%c %c %c %c", 'A', 'B', 'C', 'D');

printf("%6c %6c %6c %6c", 'A', 'B', 'C', 'D');

printf("%-6c %-6c %-6c %-6c", 'A', 'B', 'C', 'D');

printf("==========================");

}

실행결과

==========================ABCDA B C D A B C DA B C D====================

======

Page 35: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 35

c1_02_data

데이터 형

프로그램에서 데이터를 표현하는 방법 : 상수와 변수의 두 가지 형태

상수 : 변하지 않는 일정한 값 , 변수 : 데이터를 기억해두는 장소로서 기억된 값이 변할 수도 있다 .

변수는 메모리의 특정한 번지에 위치한 일련의 바이트로 구성 구성되는 형태는 선언되는 데이터형에 따라 다르다 .

데이터형 종류와 크기에 따라 해당 변수의 데이터 표현 범위가 결정 변수의 용도에 따라 적절하게 데이터형을 선언

Page 36: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 36

c1_02_data

C 언어에서 제공하는 데이터형

Page 37: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 37

c1_02_data

bit 와 byte

1 byte = 8 bit, 1 bit 는 0 또는 1 로 표현 , off 또는 on 의 개념

0 과 1 로만 표현된 수를 이진수 라고 함

1 byte =

예 ) 0100 0100(2) = 64 + 4+ 1 = 69

b7 b6 b5 b4 b3 b2 b1 b0

27 =128

26 =64

25 =32

24 =16

23 =8

22 =4

21 =2

20 =1

0 1 0 0 0 1 0 0

0 26 =64

0 0 0 22 =4

0 20 =1

Page 38: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 38

c1_02_data

음수 표현 방법

0

+9

0 0 0 1 0 0 1 1

-9

0 0 0 1 0 0 1

부호비트만 바꾼다

0

| -9 | = +9

0 0 0 1 0 0 1 1

-9

1 1 1 0 1 1 0

각 비트를 1 의보수로 바꾼다

0 0 0 0 0 0 0 1

1 -91 1 1 0 1 1 1

1 1 1 1 0 1 1 0

+

부호절대치방법

1 의 보수방법

2 의 보수방법

Page 39: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 39

c1_02_data

문자 데이터형 (char)

문자 데이터형의 선언 및 사용 예 char ch = 'B'; /* 'B' -> 66(10 진수 ) */ char cnum1 = 66, cnum2 = 213; /* cnum2 -> overflow 발생

*/

음수 부분이 불필요할 때 unsigned 라는 키워드를 사용하여 문제를 해결 예 ) unsigned char x=213; /* 0 ~ 255 */

Page 40: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 40

c1_02_data

signed( 부호 있는 ) 수unsigned( 부호 없는 ) 수 (1)

char 과 unsigned char 의 데이터 표현 범위

Page 41: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 41

c1_02_data

signed( 부호 있는 ) 수unsigned( 부호 없는 ) 수 (2)

일반적으로 최상위 비트 (MSB) 는 부호 비트 (Sign Bit) 양수인 경우 0, 음수인 경우에는 1 로 표현

1 byte 의 크기를 할당 받은 변수인 경우 ( 부호 있는 수 ) -128 ∼ 127 의 데이터 표현 범위

음수 부분이 불필요할 때 unsigned 라는 키워드를 사용하여 문제를 해결 예 ) unsigned char x; /* 0 ~ 255 */

Page 42: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 42

c1_02_data

예 ) 문자 데이터형의 데이터 표현

#include <stdio.h>

main()

{

char ch1, ch2;

unsigned char ch3;

ch1 = 'A';

ch2 = 213;

ch3 = 213;

printf("ch1 = %d, ch2 = %d, ch3 = %d", ch1, ch2, ch3);

}

실행결과 ch1 = 65, ch2 = -43, ch3 =

213

Page 43: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 43

c1_02_data

정수 데이터형 (int)

소수점이 없는 수를 저장할 수 있는 데이터형 정수 데이터형의 종류에 따라 각각 다른 크기의 메모리가 할당 따라서 , 할당된 메모리 크기에 따라 데이터 범위가 결정 .

시스템에 따라 다를 수 있음 (int 는 기종에 따라 표준 길이가 할당된다 ).

Page 44: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 44

c1_02_data

정수 데이터 형 (int) 의 데이터 범위

현재 우리 시스템에서의 정수 데이터 형의 범위

부호 유 /무

데이터형 할당 바이트

데이터 범위

부호 있는 정수

short 2 -32,768 ~ 32,767

int 4 -2,147,483,648 ~ 2,147,483,647

long 4 -2,147,483,648 ~ 2,147,483,647

부호 없는 정수

Unsigned short

2 0 ~ 65,535

Unsigned int 4 0 ~ 4,294,967,295

Unsigned long

4 0 ~ 4,294,967,295

Page 45: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 45

c1_02_data

정수 데이터형 선언 및 사용 예

int num1 = -30, num2 = 3456; short value1 = 125, value2 = -12; unsigned int a = 63000, b = 4294967296; /* 4294967295

*/ /* b -> overflow 발생 ( 정수 4byte 시스템에서 ) */

long int x = 679001, y = 456;

시스템에 따라 short 와 int 또는 int 와 long 의 크기가 같을 수 있지만 일반적으로 적은 수일 경우 short 형이 , 보통일 경우는 int형이 , 큰 수일 경우는 long 이 사용된다 .

short int 와 long int 에서 int 를 생략하여 사용할 수 있다

Page 46: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 46

c1_02_data

예 ) 정수 데이터형의 데이터 범위

#include <stdio.h>

main()

{

int value1;

long value2;

unsigned long value3;

value1 = value2 = value3 = 2147483648; /* 2,147,483,647 */ ;

printf("value1 = %d", value1);

printf("value2 = %ld", value2);

printf("value3 = %ld", value3);

}

실행결과

value1 = 9464

value2 = 2147483648

value3 = 2147483648

Page 47: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 47

c1_02_data

실수 데이터형 (float, double)

실수 데이터형의 선언 예 float f = 3.14, k = -1.3456;

double a = 1.23456789, b = 0.14E-3; /* 0.14E-3 = 0,14*10-3 */

Page 48: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 48

c1_02_data

실수 데이터형의 구조

부호 비트 , 지수부 ( 정수부 ) 과 가수부 ( 소수부 ) 로 각 비트들이 구분 소수점은 별도로 표현하지 않으며 지수부와 가수부의 사이에 있는 것으로 간주 지수부는 64+지수 ( 바이어스 법 ) 로 양의 지수와 음의 지수를 표현한다 .

Page 49: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 49

c1_02_data

예 ) 실수 데이터형의 데이터 범위

#include <stdio.h>main(){ int a; float b, c; double d, e;

a = 3.14; b = 12.12345; c = 12.123456789; d = 12.123456789; e = 0.1212345e2;

printf("a = %d", a); printf("b = %f", b);

printf("c = %f", c);

printf("d = %e", d);

printf("e = %f", e);

printf("e = %g", e);

}

실행결과a = 3

b = 12.123450

c = 12.123457

d = 1.21235e+01

e = 12.123450

e = 12.1235

Page 50: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 50

c1_02_data

형 변환

자동 형 변환 : 데이터형이 다른 것들을 혼합해서 연산을 할 경우에 규칙에 따라 자동으로

변하는 형 변환

강제 형 변환 캐스트 (cast) 연산자를 이용하여 강제적으로 데이터형을 변환

Page 51: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 51

c1_02_data

자동 형 변환

연산과정에서의 자동 형 변환

데이터형이 다른 것들을 혼합해서 연산을 할 경우에 자동으로 형 변환 우선 순위가 낮은 데이터형이 우선 순위가 높은 데이터형으로 자동으로 형 변환이

되어 연산이 이루어지게 된다 .

데이터형의 우선 순위

char < short < int < long < unsigned < float < double

Page 52: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 52

c1_02_data

예 ) 자동 형 변환

자동 형 변환 예제 : 연산과정

10 / 3.0; /* 3.3333 */ 10 / 3; /* 3 : 형 변환 없음 */ 10 + 3.14; /* 13.14 */

실행결과 x + y = 2065

/* 예제 : 자동 형 변환 (1) */

#include <stdio.h>

main()

{

char x;

int y, z;

x = 'A';

y = 2000;

z = x + y;

printf("x + y = %d", z);

}

Page 53: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 53

c1_02_data

예 ) 자동 형 변환 (2)

#include <stdio.h>

main()

{

float x, y, z;

x = 10/3; /* 정수와 정수의 연산 */

y = 10/3.0; /* 정수와 부동소수점의 연산 */

z = 10.0/3.0; /* 부동소수점과 부동소수점의 연산 */

printf("x = %f", x);

printf("y = %f", y);

printf("z = %f", z);

}

실행결과

x = 3.000000

y = 3.333333

z = 3.333333

Page 54: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 54

c1_02_data

대입연산 (=) 에서의 자동 형 변환

대입연산을 할 때 자동 형 변환은 우측의 값이 좌측의 데이터형으로 변환 우측의 데이터형이 좌측보다 크다면 부득이하게 정보의 손실이 발생

double 형태이었던 변수가 float 형태의 변수로 형 변환이 이루어질 경우 float 에서 가능한 유효숫자의 뒷부분에 있는 double 형의 소수점 자리들은 손실

자동 형 변환이 이루어질 때 가장 주의해야 할 점은 대입연산을 사용하였을 때

자동 형 변환 예 : 대입연산 사용 시

int x; float f;

x = 3.14; f = 'A' + 340;

Page 55: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 55

c1_02_data

예 ) 자동 형 변환 (3)

#include <stdio.h>

main()

{

int x;

float y = 3.14;

double z = 1.23456789;

x = y;

printf("x = %d", x);

y = z;

printf("y = %f", y);

}

실행결과x = 3

y = 1.234568

/* 유효자릿수에서 반올림 */

Page 56: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 56

c1_02_data

예 ) 자동 형 변환 (4)

#include <stdio.h>

main()

{

int sum, x;

x = 10;

sum = x +10/3.0;

printf("x + 10/3.0 = %f", x+10/3.0);

printf("sum = %d", sum);

}

실행결과x + 10/3.0 = 13.333333

sum = 13

Page 57: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 57

c1_02_data

cast 연산자를 이용한 형 변환

강제적으로 형을 변환시킬 때 사용되는 연산자가 cast 연산자

cast 연산자의 형식

( 데이터형 ) 수식 , 또는 ( 데이터형 ) 변수 ;

예제

① float y; y = (int) 10.5 + (int) 3.14; /* y = 13.64 or 13 ? */

① int x =10; float a; a = (float) x / 3; /* 3.3333 or 3.0 ? */

Page 58: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 58

c1_02_data

예 ) cast 형 변환

#include <stdio.h>

main()

{

int x;

float a, b;

x = 30;

a = 3.14;

b = (int) a + x;

printf("b = %f", b);

}

실행결과b = 33.000000

Page 59: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 59

c1_02_data

확인학습 1

1. 상수와 변수의 차이에 대하여 설명하시오 .

2. 변수를 사용이전에 반드시 선언해야 하는 이유를 설명하시오 .

3. 문자 상수와 문자열 상수의 표기에 대하여 설명하시오 .

4. 다음은 상수를 표현한 것이다 . 각각의 차이에 대하여 설명하시오 .1) 3 2) ‘3’ 3) “3”

5. 변수명을 선언할 때의 규칙을 설명하시오 .

6. 예약어 또는 키워드란 무엇인가 ?

Page 60: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 60

c1_02_data

확인학습 2

7. 데이터 형이 의미하는 것은 무엇이며 , 그 종류에는 어떤 것이 있는가 ?

8. 각 데이터 형을 갖는 변수를 선언하였다 , 오류를 찾으시오 .1) char ch; 2) int a, b; 3) float for; 4) unsigned int ch;

9. 문자형 데이터의 할당 바이트와 데이터의 표현범위는 얼마인가 ?

10. int 와 unsigned int 의 차이와 데이터의 표현범위는 각각 얼마 ?

11. 형 변환에 대하여 설명하시오 .

12. 데이터 형 변환이 필요한 이유는 무엇인가 ?

13. 캐스트 연산자를 사용할 때 주의할 점은 ?

Page 61: 2장  데이터형

교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사 61

c1_02_data

실습

실습실에서 만납시다 .