610 likes | 852 Views
2장 데이터형. 변수와 상수 출력 함수 데이터 형 형 변환. 학습목표. 변수와 상수의 개념을 이해할 수 있다 . 데이터 형의 의미와 필요성을 이해할 수 있다 . C 가 제공하는 데이터 형의 종류와 그 특성을 알 수 있다 . printf() 사용법을 익히고 활용할 수 있다. 변수( Variable). 변수는 프로그램을 작성하는 과정에서 처리 해야 될 많은 데이터와 정보, 처리후의 결과 등을 저장 할 수 있는 공간 을 의미
E N D
2장 데이터형 • 변수와 상수 • 출력 함수 • 데이터 형 • 형 변환 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
학습목표 • 변수와 상수의 개념을 이해할 수 있다. • 데이터 형의 의미와 필요성을 이해할 수 있다. • C가 제공하는 데이터 형의 종류와 그 특성을 알 수 있다. • printf() 사용법을 익히고 활용할 수 있다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변수(Variable) • 변수는 프로그램을 작성하는 과정에서 처리 해야 될 많은 데이터와 정보, 처리후의 결과 등을 저장할 수 있는 공간을 의미 • 변수가 선언되면 컴퓨터 내부적으로 볼 때 일정 크기의 기억장소를 할당 받는다. • 할당 받는 메모리의 크기는 변수의 데이터형에 따라 다르다. • C 언어에서 변수를 선언할 때에는 저장될 데이터의 범위 및 상수의 종류에 따라 적절하게 데이터형을 결정해야 한다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변수의 선언 • 데이터형을 갖는 변수의 선언형식 • 데이터형 변수명A, 변수명B, ...; 예) int i, j, k; • 데이터형 변수명A; 예) int i; • 데이터형 변수명B=0; 예) int j=0; • 데이터형이 동일한 2개 이상의 변수를 선언할 때에는 콤마(,)로 구분하여 동시에 선언이 가능하며, • 개별적 선언도 가능하다. • 변수의 선언과 초기화는 같은 문장에서 이루어 질 수 있다. • 변수는 외부 변수를 제외하고 함수 안에서 명령문을 사용하기 전에 선언 한다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변수 선언의 예 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 실수형으로 선언 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변수의 초기화 /* 선언과 동시에 초기화 하는 경우 */ int count = 10; /* 선언만 하고 초기화 하지 않은 경우 */ float average; /* 문자열 포인터 변수의 선언과 동시에 초기화 */ char *user_name = “Hello, World!” ; /* count는 선언과 동시에 값을 할당하고 item_no는 선언만 */ int count=10, item_no; /* 선언 후 별도로 값을 할당하는 경우 */ average = 78.37; 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
예) 변수의 선언, 연산, 대입 #include <stdio.h> main() { int num1, num2; int sum; float div; num1 = 2; num2 = 3; sum = num1+num2; div = sum / 2.0; } 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변수명의 규칙 • 변수이름에 사용될 수 있는 문자는 알파벳문자, 숫자, 언더 스코어문자(_)이다. • 변수 이름은 반드시 영문자나 _로 시작해야 된다. • 대/소문자는 서로 다른 이름으로 취급되므로 구별해야 한다. • C 언어에서 사용되는 키워드(Keyword)는 변수 이름으로 사용할 수 없다. • 변수 이름을 정할 때는 위의 규칙에 따라 정하되, 변수가 사용되는 목적을 알 수 있는 단어로 선택하는 것이 바람직하다. • 변수선언의 예 • 잘못된 변수선언 : int 2number; float f&data; char case; • 올바른 변수선언 : int number; float f_data; char _ch; 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
키워드, 예약어 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
상수(constant) • 상수란 연산에 이용되는 데이터로서 그 값이 한번 정의되면 프로그램이 실행되는 도중에 그 값이 변화되지 않고 일정한 값을 유지하는 데이터를 의미 • 상수의 종류 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
정수형 상수 • 소수점을 포함하지 않는 수로서 부호 있는 수와 부호 없는 수로 구분 • C 언어에서 정수형 상수는 진법에 따른 수로 표현 가능하다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
정수형 상수의 표현 예 int a = 2002; /* 양의 정수형 상수 */ int b = -377; /* 음의 정수형 상수 */ int count2 = 012; /* 8진 상수*/ int c; c = 0xFF; /* 16진 상수 */ long int d; d = 1234L; /* long형 상수 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
실수형 상수 • 실수형 상수는 소수점이나 지수부를 가지고 있는 데이터 • 기억장소에 저장 될 때에는 부호, 지수부, 가수부로 구분하여 저장된다. • 실수형 상수의 표현 예 float f1; f1 = 3.14; /* 소수점 형태 */ float f2; f2 = -0.005; double e1; e1 = 0.14E-3; /* 지수 형태 */ double e2; e2 = 1.5E+2; 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
문자 상수 • 문자 상수는 한 개의 문자를 상수로 취급, 단일 인용부호(' ')를 붙여 표현 • 한 개의 문자는 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' */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
문자 상수와 ASCII 코드 • 컴퓨터는 문자를 숫자로 대신하여 인식하며 상호 연관을 위해 ASCII 코드를 사용 • 문자상수의 표현 예 • 문자 'A'의 ASCII 코드에 대응하는 0x41(16진수)의 수치로 변환되어 기억되며, • 3에 해당되는 ASCII 코드 값 0x33(16진수) 또는 51(10진수)이 기억. • 따라서, ASCII 코드 값을 직접 대입하여도 같은 결과를 얻을 수 있다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
문자열 상수 • 문자열 상수는 단일 문자가 하나 이상 연결되어 있는 문자열을 의미 • 인용부호(" ")를 붙여 표현, • 문자열 끝에는 널 문자(‘\0’)가 자동으로 추가되며 • 널 문자는 문자열이 끝나는 지점을 나타내는 역할을 한다. • 문자와 문자열 상수의 메모리크기 • 문자 상수 'A'인 경우 : 기억장소 1 byte가 필요 • 문자열 상수 "A"는 널(null) 문자를 포함해 2 byte가 필요 • 문자열 상수의 표현 예 • char ch[5]; ch = "abcd"; /* 문자열 상수, 널 문자 포함 */ • char ch[2]; ch = "A"; /* 문자열 상수, 널 문자 포함 */ • char ch; ch = 'A'; /* 문자 상수, 널 문자 없음 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
매크로 상수 • #define MAX 100 /* 매크로 상수의 정의 */ • #define COUNT 10 /* 매크로 상수의 정의 */ • for (i=0; i < COUNT; i++) { … } • COUNT = COUNT + 1; /* 오류 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
printf() : 출력 함수 • 화면에 형식화된 문자열을 출력하는 표준 라이브러리 함수이다. • 함수의 형식 • printf("출력 형식 지정 문자열", 인수1, 인수2, ...); • 출력 형식 지정 문자열 : • 어떻게 항목들을 출력할 것인가 하는 방식을 나타내 주는 문자열이 지정된다. • 문자열을 나타내는 " "의 형식을 갖추어야 한다. • 변환문자, 수정자, 플래그, 출력문자(열), 제어문자 들을 포함하게 된다. • 인수1, 인수2, ... : • 출력될 항목 가리키는 것으로 상수, 값이 출력되기 전에 계산되어야 할 계산식 등 • 인수들은 출력 형식 지정 문자열에 각 인수들과 대칭 되는 변환 문자가 있어야 함 • 인수들과 변환 문자는 생략 가능하다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
제어 및 변환문자 없이 출력하기 • printf()는 기본적으로 인용부호(" ")안의 모든 문자열을 화면에 출력 • printf()문의 사용 예 : 단순출력 • printf("Welcome"); /* welcome을 화면에 출력 */ • printf("computer language"); /* computer language을 화면에 출력 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
/* 단순 출력 (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 예제 프로그램 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
제어문자(Escape Sequence) 포함하여 출력하기 • 제어문자는 문자로 표현할 수 없는 ASCII 코드 문자들을 표현한 것 • 표현 방식은 역 슬래쉬(\)와 함께 사용하여 구성 • 제어문자는 문자형 변수에 단독으로 또는 문자열 속에 사용할 수 있다. • 제어문자들은 데이터를 출력할 때 출력 형식을 지정하는데 많이 사용된다. • 출력 형식 지정 문자열에 포함된 제어문자는 화면에 나타나지 않으며 제어문자에 해당되는 기능만을 수행한다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
제어문자의 종류 및 기능 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
printf()문의 사용 예 : 제어문자 이용 • printf("Welcome\n"); /* 문자열 출력 후, 줄 바꿈 */ • printf("\tcomputer language\n"); /* 다음 텝으로 이동하여 문자열 출력 후, 줄 바꿈 */ • printf(“\%%computer \tlanguage\n"); /* %computer 출력 후 다음 탭으로 이동, language 출력 후, 줄 바꿈 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
/* 제어문자 이용하여 출력하기 (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 예제 프로그램 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변환문자 이용하여 출력하기 • 출력 형식 지정 문자열에서 사용되는 변환문자는 printf()문 내의 지정된 인수의 값을 받아들이는 데이터형을 나타낸다. • 인수들의 값은 변환문자 데이터 형태로 변환되어 출력 형식 문자열에 저장된 후 인용부호(" ") 안의 모든 내용이 출력된다. • 변환 문자들에 해당하는 인수(변수)는 반드시 같은 순서대로 지정해 주어야 함 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
변환 문자의 종류 및 기능 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
printf()문의 사용 예 : 변환문자 이용 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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 변환문자 이용하여 출력(1) 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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 제어문자 이용하여 출력(2) 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
수정자(Modifier) 이용하여 출력 • 수정자는 기본 변환문자와 같이 사용하여 기본 서식의 출력형식을 다양하게 변형시킬 수 있다. • 주의할 점은 수정자는 기본 변환 문자와 결합되어 출력형식을 변형시키는 것으로 새로운 서식을 의미하지 않는다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
수정자의 종류 및 기능 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
수정자(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자리인 소수점형 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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); } 실행결과 1234 1234 1234 001234 1234 12.345679 12.346 12.345679 수정자 이용하여 출력(1) 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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("=========================="); } 실행결과 ========================== ABCD A B C D A B C D A B C D ========================== 수정자 이용하여 출력(2) 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
데이터 형 • 프로그램에서 데이터를 표현하는 방법 : 상수와 변수의 두 가지 형태 • 상수 : 변하지 않는 일정한 값, • 변수 : 데이터를 기억해두는 장소로서 기억된 값이 변할 수도 있다. • 변수는 메모리의 특정한 번지에 위치한 일련의 바이트로 구성 • 구성되는 형태는 선언되는 데이터형에 따라 다르다. • 데이터형 • 종류와 크기에 따라 해당 변수의 데이터 표현 범위가 결정 • 변수의 용도에 따라 적절하게 데이터형을 선언 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
C 언어에서 제공하는 데이터형 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
bit와 byte • 1 byte = 8 bit, 1 bit는 0 또는 1로 표현, off 또는 on의 개념 • 0과 1로만 표현된 수를 이진수 라고 함 • 1 byte = • 예) 0100 0100(2) = 64 + 4+ 1 = 69 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
2의 보수방법 부호절대치방법 1의 보수방법 각 비트를 1의보수로 바꾼다 부호비트만 바꾼다 | -9 | = +9 +9 -9 -9 1 1 1 1 0 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 -9 1 1 1 1 0 1 1 1 음수 표현 방법 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
문자 데이터형 (char) • 문자 데이터형의 선언 및 사용 예 char ch = 'B'; /* 'B' -> 66(10진수) */ char cnum1 = 66, cnum2 = 213; /* cnum2 -> overflow 발생 */ • 음수 부분이 불필요할 때 • unsigned 라는 키워드를 사용하여 문제를 해결 • 예) unsigned char x=213; /* 0 ~ 255 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
signed(부호 있는) 수unsigned(부호 없는) 수(1) • char 과 unsigned char의 데이터 표현 범위 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
signed(부호 있는) 수unsigned(부호 없는) 수(2) • 일반적으로 최상위 비트(MSB)는 부호 비트(Sign Bit) • 양수인 경우 0, 음수인 경우에는 1로 표현 • 1 byte의 크기를 할당 받은 변수인 경우(부호 있는 수) • -128 ∼ 127 의 데이터 표현 범위 • 음수 부분이 불필요할 때 • unsigned 라는 키워드를 사용하여 문제를 해결 • 예) unsigned char x; /* 0 ~ 255 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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 예) 문자 데이터형의 데이터 표현 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
정수 데이터형 (int) • 소수점이 없는 수를 저장할 수 있는 데이터형 • 정수 데이터형의 종류에 따라 각각 다른 크기의 메모리가 할당 • 따라서, 할당된 메모리 크기에 따라 데이터 범위가 결정. • 시스템에 따라 다를 수 있음 (int는 기종에 따라 표준 길이가 할당된다). 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
정수 데이터 형(int)의 데이터 범위 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
정수 데이터형 선언 및 사용 예 • 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를 생략하여 사용할 수 있다 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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 예) 정수 데이터형의 데이터 범위 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
실수 데이터형(float, double) • 실수 데이터형의 선언 예 float f = 3.14, k = -1.3456; double a = 1.23456789, b = 0.14E-3; /* 0.14E-3 = 0,14*10-3 */ 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
실수 데이터형의 구조 • 부호 비트, 지수부(정수부)과 가수부(소수부)로 각 비트들이 구분 • 소수점은 별도로 표현하지 않으며 지수부와 가수부의 사이에 있는 것으로 간주 • 지수부는 64+지수(바이어스 법)로 양의 지수와 음의 지수를 표현한다. 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
#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 예) 실수 데이터형의 데이터 범위 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사
형 변환 • 자동 형 변환 : • 데이터형이 다른 것들을 혼합해서 연산을 할 경우에 규칙에 따라 자동으로 변하는 형 변환 • 강제 형 변환 • 캐스트(cast) 연산자를 이용하여 강제적으로 데이터형을 변환 교재 : "C 프로그래밍 실습", 양은샘/김대극공저, 내하출판사