4장 자료형
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4장 자료형(Data Type) 4.1 자료형(Data Type) 4.2 숫자(Number) 4.3 문자(Character) 4.4 구조체(Structure) 4.5 공용체(Union) 4.6 비트 필드(Bit Field) 4.7 열거형(Enumerous) 4.8 사용자 정의(User-Defined)
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1 자료형 자료형에 따라 다음 사항들이 결정된다
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1 자료형 자료형의 종류
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1 자료형 자료형에 따른 값의 표현범위
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1.1 자료형 선언 선언형식
4.1.2 형변환 ( ) ?: 자료의 형을 변경하는 것 (1)자동 형변환 : 예) 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1.2 형변환 ( ) ?: 자료의 형을 변경하는 것 (1)자동 형변환 : 수식에 서로 다른 자료형이 섞여 있는 경우, 컴파일러에 의해 자료형이 자동으로 변경되는 경우 낮은 우선순위의 피연산자는 높은우선순위의 피연산자형으로 변경 자료형의 우선순위 예) i를 float형으로 형변환한다 계산된 결과는 float형이다
4.1.2 형변환 (2) ( ) 연산자를 이용한 형변환 프로그래머에 의해 강제적으로 형을 변환 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.1.2 형변환 (2) ( ) 연산자를 이용한 형변환 프로그래머에 의해 강제적으로 형을 변환 ( )안에 변경할 자료형을 기입 -->(자료형) 예) cast연산자의 형변환 #include <stdio.h> int main(){ int i,j; float a,b; i=1; j=3; a= (float)i/(float)j; b= i/j; printf("\na=%f, b=%f\n\n", a,b); return 0; }
4.2 숫자 정수(Integer) 실수(Real Number) 저장길이에 따라 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.2 숫자 정수(Integer) 저장길이에 따라 실수(Real Number)
( ) 연산자 자료형의 길이를 byte단위로 구해준다 형식:sizeof(자료형) 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 ( ) 연산자 자료형의 길이를 byte단위로 구해준다 형식:sizeof(자료형)
4.3 문자 1byte 문자로서의 char 1byte 정수로서의 char 1개 문자(1byte)를 나타내는 자료형 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.3 문자 1byte 문자로서의 char 1개 문자(1byte)를 나타내는 자료형 1byte 정수로서의 char char(signed char)로 선언: -128~127까지 표현 unsigned char로 선언: 0~256까지 표현 예) int main( ) { char cha = 'A'; printf("\n 문자 %c = 16진수 %x = 10진수 %d", cha, cha, cha); printf("\n 정수로 취급 cha+1= %d", cha + 1); return 0; }
4.4 구조체 ( ) ?: 하나이상의 기본 자료형 변수들을 묶어서 그룹화하는 자료형 구조체 선언 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.4 구조체 ( ) ?: 하나이상의 기본 자료형 변수들을 묶어서 그룹화하는 자료형 구조체 선언
4.4.1 구조체 변수 선언 struct point struct point { { int x; int x; int y; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.4.1 구조체 변수 선언 *구조체 선언과 변수 선언을 동시에 struct point { int x; int y; } p1, p2, p3; *구조체 선언과 변수 선언을 따로 struct point { int x; int y; }; struct point p1, p2, p3;
4.4.1 구조체 변수 선언(p96) struct srec struct srec { { int hak; int hak; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.4.1 구조체 변수 선언(p96) 예2) 구조체 선언과 변수 선언을 따로 struct srec { int hak; char name[10]; float jumsu; }; struct srec kim, park; 예1) 구조체 선언과 변수 선언을 동시에 struct srec { int hak; char name[10]; float jumsu; } kim, park;
4.4.2 구조체 필드(멤버변수) 지정 #include <stdio.h> 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.4.2 구조체 필드(멤버변수) 지정 #include <stdio.h> struct srec // 구조체 srec 선언 { int hak; float jumsu; }; int main(void) struct srec kim, park; // 구조체 변수 kim, park 선언 kim.hak =12345; // 구조체 변수 kim의 필드(멤버변수) hak에 접근 kim.jumsu =95.5 ; // 구조체 변수 kim 의 필드(멤버변수) jumsu에 접근 printf("Kim의 학번= %d \n", kim.hak); printf("Kim의 점수= %3.1f \n", kim.jumsu); return 0; }
4.4.3 구조체형 배열 배열의 원소가 구조체인 배열 예1) 예2) 배열원소의 멤버변수에 값 지정 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.4.3 구조체형 배열 배열의 원소가 구조체인 배열 예1) 예2) 배열원소의 멤버변수에 값 지정
예제-구조체에 값 저장(P99) #include <stdio.h> struct list{ char name; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제-구조체에 값 저장(P99) #include <stdio.h> struct list{ char name; char sex; int nai; }; int main( ){ struct list a, b; a.name = 'K'; a.sex = 'F'; a.nai = 40; b.name = 'S'; b.sex = 'M'; b.nai = 60; printf("No 이름 성별 나이\n"); printf("-----------------------------------------------\n"); printf("1 %c %c %d\n", a.name, a.sex, a.nai); printf("2 %c %c %d\n", b.name, b.sex, b.nai); return 0; }
예제-구조체의 초기화(p99) #include <stdio.h> struct list{ char *irum; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제-구조체의 초기화(p99) #include <stdio.h> struct list{ char *irum; char sex; int age; } a = {"KIM", 'M', 33}, b = {"PARK", 'F', 60}; int main( ) { printf("No 이름 성별 나이\n"); printf("---------------------------------------------------\n"); printf(" 1 %s %c %d\n", a.irum, a.sex, a.age); printf(" 2 %s %c %d\n", b.irum, b.sex, b.age); return 0; }
예제-구조체 배열변수의 선언과 초기화-(p100) 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제-구조체 배열변수의 선언과 초기화-(p100) #include <stdio.h> struct list { char *name; char sex; int nai; } man[5] = {{"KIM", 'M', 33}, {"PARK", 'F', 70}, {"LEE", 'M', 10}, {"LOVE", 'M', 50}, {"STACK", 'F', 60}};
예제-구조체를 포함한 구조체-(p101) #include <stdio.h> struct date{ int yy; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제-구조체를 포함한 구조체-(p101) #include <stdio.h> struct date{ int yy; int mm; int dd; }; struct person{ char name[10]; struct date birth; } saram; void main( ){ saram.birth.yy = 1980; saram.birth.mm = 6; saram.birth.dd = 1; scanf("%s", saram.name); printf("이름 : %s\n",saram.name); printf("생일 : %4d. %2d. %2d\n", saram.birth.yy, saram.birth.mm, saram.birth.dd); }
4.5 공용체(Union) 멤버 변수들이 메모리 공간을 공유해서 사용 선언형식 장점: 주기억 장소를 절약 union { 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.5 공용체(Union) 멤버 변수들이 메모리 공간을 공유해서 사용 장점: 주기억 장소를 절약 선언형식 공용체 멤버 변수의 선언: 구조체와 동일 공용체 변수의 선언: 구조체와 동일 멤버 변수 접근: 구조체와 동일 공용체의 시작을 알리는 키워드 union { char grade; int score; } ; mark 공용체 이름 멤버 변수 멤버 변수 m 공용체 변수
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.5 공용체(Union) 구조체(Struct)
수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.5 공용체(Union) 공용체(Union)
예제-구조체와 공용체의 크기 비교-(P103) #include <stdio.h> struct sb { char c; 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제-구조체와 공용체의 크기 비교-(P103) #include <stdio.h> struct sb { char c; int i; float f; } x1; union ub { } x2; int main( ) { int i, k; i = sizeof(struct sb); k = sizeof(union ub); printf("struct length == %d\n", i); printf("union length == %d\n", k); }
4.6 비트필드(bit field) 비트필드(Bit field) 선언 형식 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.6 비트필드(bit field) 비트필드(Bit field) 구조체나 공용체의 멤버를 바이트 단위가 아닌, 비트단위로 쪼개어 선언할수 있게 함으로써 기억공간을 알뜰하게 사용하게 함 선언 형식 각 멤버변수이름 다음에 이 멤버의 비트 크기를 적는다 자료형은 정수와 호환되는 모든 타입을 허용한다. (char, short, int등등) 멤버가 선언된 순서대로 하위 비트에서 순서대로 할당된다. struct { 자료형 멤버변수1 : bit수; 자료형 멤버변수2 : bit수; } ; 구조체 이름 구조체 변수
4.6 비트필드(bit field) 예1) 구조체 date의 선언-(P105) 기억장소에서의 표현상태 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.6 비트필드(bit field) 예1) 구조체 date의 선언-(P105) 기억장소에서의 표현상태
4.6 비트필드(bit field) 예2) 비트 필드 사용 예 #include <stdio.h> 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.6 비트필드(bit field) 예2) 비트 필드 사용 예 #include <stdio.h> struct samplebitfields { unsigned short a : 4; unsigned short b : 5; unsigned short c : 7; } test; int main( void ) test.a = 2; test.b = 31; test.c = 0; printf("\ntest의 기억상태(16진수)=%0x\n",test); }
4.7 열거형(enumerous) 열거형(enum) 선언형식 변수가 갖는 값에 의미를 부여 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.7 열거형(enumerous) 열거형(enum) 변수가 갖는 값에 의미를 부여 0,1,2,3,…값 대신 기호상수를 사용하여 변수값의 의미를 명확하게 알수 있음 함 선언형식 enum { } ; week sun, mon, tue, wed, fri, sat day 키워드 열거형이름 상수 이름 열거형변수
4.7 열거형(enumerous) 예1) 예2) ① sun, mon, ⋯, sat는 열거형 상수로, 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.7 열거형(enumerous) 예1) 예2) ① sun, mon, ⋯, sat는 열거형 상수로, 문자가 아니라 정수형을 가지며 ② sun부터 sat까지 각각 0, 1, 2, ⋯, 6이 된다. #include <stdio.h> void main( ) { enum week {sun, mon, tue=5, wed=2,thu, fri, sat } day; day = tue; printf("\nday=%d",day); day = sat; printf("\nday=%d\n",day); } ① sun=0, mon=1, tue=5가 되고 ② wed=2에 의해 이후는 하나씩 증가되어 tue=3, fri=4, sat=5가 된다.
#include <stdio.h> 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 #include <stdio.h> enum week {sun, mon, tue, wed, thu, fri, sat } ; int main( void ) { char *date[7]={"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday","Saturday"}; printf("%s\n", date[sun]); printf("%s\n", date[wed+2]); }
4.8 사용자 정의(user-defined) ( ) 를 이용한 자료형의 재정의 기존 자료형을 새로운 이름으로 변경 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 4.8 사용자 정의(user-defined) ( ) 를 이용한 자료형의 재정의 기존 자료형을 새로운 이름으로 변경 프로그램의 가독성을 높일 수 있음
예제- typedef의 활용-(P109) #include <stdio.h> 수원과학대학 컴퓨터정보과 1학년 1학기 2019-04-22 예제- typedef의 활용-(P109) #include <stdio.h> #define PROGRAM main( ) #define BEGIN { #define END } #define PRINT printf typedef int jungsu; typedef float real; PROGRAM BEGIN enum week {sun, mon, tue=5, wed=2,thu, fri, sat } day; jungsu i=0; real j = 1.0; day = tue; PRINT("\nday=%d\n",day); END