Presentation is loading. Please wait.

Presentation is loading. Please wait.

제2장 데이터형과 표준 입출력문 문봉근.

Similar presentations


Presentation on theme: "제2장 데이터형과 표준 입출력문 문봉근."— Presentation transcript:

1 제2장 데이터형과 표준 입출력문 문봉근

2 제2장 데이터형과 표준 입출력문 2.1 상수의 표현 2.2 변수의 표현 2.3 수식과 대입문 2.4 데이터형
제2장 데이터형과 표준 입출력문 2.1 상수의 표현 2.2 변수의 표현 2.3 수식과 대입문 2.4 데이터형 2.5 데이터의 형 변환 2.6 표준 입출력 함수 2.7 키보드 입력함수

3 C 언어에서 데이터는 상수(constant)와 변수(variable)로 나눈다.
상수와 변수는 크게 문자형, 정수형과 실수형의 데이터형을 가진다. 일반적으로 상수는 프로그램이 실행되기 전에 데이터형과 값을 미리 선언한 후에 실행 중에 그 값이 바뀌어지지 않는다. 반면 변수는 프로그램이 수행되기 전에 데이터형을 미리 선언을 한 후에 프로그램 실행 중에 변수에 값을 대입하여 프로그램이 수행할 수 있도록 허용하는 것을 말한다.

4 2.1 상수의 표현 상수는 프로그램 중에 그 값이 명시되어 변하지 않는 것으로서 문자(character) 상수, 정수형 상수, 실수형 상수, 문자열(character string) 상수가 있다. 실수형 상수에는 십진형 표기와 지수형 표기가 있다. 문자 상수는 ‘A’와 같이 ‘’(작은따옴표)로 묶어서 문자를 표현한다. 문자열 상수는 “ ”(큰따옴표)로 나타내는데, “1234”는 숫자가 아니라 문자열로 다룬다. 변수와 상수는 프로그램 시작부분의 선언부에 선언한다.

5 2.1.1 문자 상수 문자상수는 아스키(ASCII)코드의 한 문자를 표현을 위해 작은 따옴표로 묶어 나타낸다.
문자 상수는 한 바이트로 표현된다. ① 작은 따옴표로 묶인 문자이다. (예) ‘a’ ② 코드 값을 직접 작은 따옴표로 묶어서 표현한다 (예) ‘\246’, ‘\x9B’ 여기서, ‘\x’, ‘\X’ 16진 표현이다.

6 ③ 아스키코드에서 특수문자, 제어문자 영역(0x00~0x19)은 문자상수 표현이 어려우므로 기능코드를 사용하여 문자 상수로 프로그램 중에 표현할 수 있다.
기능 코드들을 escape 문자라 하며 표 2.1과 같다.

7 표 2.1 escape 문자 escape 문자 기능 \a \b \f \n \r \t \v \' \" \\ \? \0dd \xhhh \0 Bell (alert) Backspace Formfeed New line Carriage return Horizontal tab Vertical tab Single quotation mark Double quotation mark Backslash Literal question mark ASCII character in octal notation ASCII character in hexadecimal notation Null character

8 2.1.2 정수 상수 ① 소수점이 없는 수치, 기본형은 signed int이다.
② 부호가 없는 정수 상수인 경우 수치 뒤에 ‘u’, ‘U’의 태그(tag)를 붙인다. ③ 수치의 크기가 int의 한계를 넘으면 자연히 long int로 인식한다. ④ 절대값이 작은 수치에 태그를 붙여 long int로 명시 가능하다. ⑤ unsigned long int형 상수에는 끝에 ‘ul’ 혹은 ‘UL’을 붙인다. ⑥ 정수표현에서 ‘0’은 8진 표현이고 ‘0x’이나 ‘0X’는 16진 표현이다.

9 표 2.2 정수 상수의 표현 표현법 사용 예 설명 10진 표현 123, 1024 숫자 0~9를 사용하고 0으로 시작할 수 없다. 8진 표현 016, 077 숫자 0~7를 사용하고 0으로 시작한다. 16진 표현 0x1A, 0XFF 숫자 0~7와 문자 A~F를 사용하고 0x으로 시작한다. unsigned 형 12U, 077u, 0XFFU ± 부호 없이 양수만 표현한다. 숫자 뒤에 u 또는 U를 붙인다.. 표현 범위는 2바이트(0~65535) 양수이다. long 형 077l, 0XFFL 숫자 뒤에 l 또는 L을 붙인다. 표현 범위는 4바이트이다.

10 2.1.3 실수 상수 ① 기본형은 double형이다. ② float형 상수는 ‘f’ 혹은 ‘F’의 태그를 사용한다.
③ long double형은 ‘l’나 ‘L’의 태그를 붙인다. ④ 십진형 표기와 지수형 표기가 있다.

11 10진수와 e(E)를 사용하여 표현한다. 3.14×10-3과 같다.
표 2.3 실수 상수의 표현 표현법 사용 예 설명 십진형 표현 12.345, .314, 소수점을 사용하여 표현한다. 지수형 표현 3.14E-3 10진수와 e(E)를 사용하여 표현한다. 3.14×10-3과 같다. 부동소수형 1.313f, 3.14E-3F 숫자 뒤에 f 또는 F을 붙인다. long double 형 1.313l, 3.14E-3L 숫자 뒤에 l 또는 L을 붙인다.

12 2.1.4 문자열 상수 문자열상수(character string constant)는 일련의 문자들의 모임을 말하며, 다음과 같이 표현된다. ① 문자열은 “ ”(큰따옴표)로 표현한다. ② 문자열은 아스키 문자들의 끝에 널(Null) 문자가 첨가된다. 예를 들어 “abc"는 3개의 문자와 문자열의 알리는 널 문자를 포함하므로 실제 크기는 4바이트이다. ③ “"는 문자열의 길이가 0인 널 스트링(null string)이다. 실제 문자열의 크기는 1바이트이다.

13 표 2.4 여러 가지 상수의 예 데이터 형 상수 예 char 'a', 'b', '\xb3', '\n' signed int
문자 상수 char 'a', 'b', '\xb3', '\n' 정수형 signed int signed long unsigned int unsigned long 132, -743, 0xf3c -74L, 2378l, , 0xFFFFL 74u, 2378u, 0274u 74ul, 2378ul, 0x2e4ul 실수형 float double long double 0.1f, -20.5f, 2.f, 13e1F, -3.57E-02f 0.1, -20.5, 2., 13e1, -3.57E-02 0.1l, -20.5L, 2.l, 13e1L, -3.57E-02L 문자열 상수 "abc", "0", " ", "423"

14 2.2 변수의 표현 2.2.1 변수의 선언 프로그램 상의 명령문이 실행됨에 따라 값이 바뀔 수 있는 것을 변수(variable)라 한다. 변수는 항상 프로그램의 본문이 실행되기 전에 정의를 한 후 사용해야 한다. 변수 선언은 변수를 위한 기억공간을 할당하고 변수명과 변수가 가질 데이터형을 지정하는 것을 말한다.

15 변수를 정의하는 방법 문법 변수 정의는 변수가 가질 데이터형과 변수명을 위한 식별자를 지정한다.
데이터형 변수명[=초기값], [ 변수명[=초기값] ...] ; 변수 정의는 변수가 가질 데이터형과 변수명을 위한 식별자를 지정한다. 변수에 초기값을 지정하려면 ‘=’ 다음에 초기값이나 수식을 쓴다. 데이터형이 같은 변수들을 연속적으로 한꺼번에 정의할 수 있다.

16 변수명이나 상수명, 함수명 등으로 사용하는 식별자를 지정하는 규칙
① 첫 문자는 영문자로 시작해야 된다. ② 변수명의 길이는 31자까지 유효하다. ③ 언더바(_)는 변수명의 일부로 사용할 수 있으며 첫 글자에도 올 수 있다. ④ 키워드(if, int, for, do....)는 변수명으로 사용할 수 없다. ⑤ 대문자와 소문자는 다른 문자로 구분한다.

17 올바른 변수의 예 잘못된 변수의 예 표 2.5 변수명의 바른 예와 틀린 예 avg_12 sum ptr1 ptr2 JUMSU
key_item if → 예약어 사용 for → 예약어 사용 67kk → 숫자로 시작 +hit → 특수문자(+)사용 ?pp → 특수문자(?)사용 jan-item → 중간에 – 사용

18 변수명을 붙일 때 신경쓰자 ① 좋지 않은 예 ② 좋은 예 ③ 함수 예
int i, j; //FORTRAN의 i, j, k, l ,m, n char a, b, c; char *n, *q, *r; float x, y z; ② 좋은 예 char *CurrentDirectory; int TotalFileNumber; ③ 함수 예 int Factorial(int n) { if( n==0) return 1; else return (Factorial(n-1)*n); }

19 변수명을 붙일 때 신경쓰자(계속) ④ 접두사 접두사와 접미사를 사용하는 것은 의미를 명확하게 하고 또한 프로그램의 일관성을 부여할 수 있다. PutImage, SetColor, GetCurrenFileName, .... ⑤ 기타 ■ 의미가 어렵거나 분명하지 않은 단어는 사용을 되도록 피하도록 한다. HandleCalculation, ProcessData, ... ■ 루틴이 하는 일을 모두 설명할 수 있어야 한다. 루틴 이름과 관련이 없는 연산들은 그 루틴에 포함되어서는 안된다.

20 변수명을 붙일 때 신경쓰자(계속) ■ 루틴명의 길이는 최적의 평균 길이는 9~15자이다. 그러나 평균적으로 현실적인 이름은 15~20자가 적당하다. ■ 이름짓기를 위한 규칙을 정한다. 특히 여러 사람이 프로그래밍 프로젝트에 참가할 경우 이름짓기에 관한 규칙을 제정해야 한다. => 프로그램의 표준화 및 일관성

21 2.2.2 변수의 초기화 선언한 변수는 프로그램 실행도중에 수식에 따라 값이 변할 수 있다.
처음에 변수를 미리 초기화하여 사용할 수도 있다.

22 예제 2.6 다음 프로그램은 문자 변수를 선언하고, 계산하는 프로그램이다. 실행 결과를 분석하시오.
#include <stdio.h> #include <conio.h> void main(void) { char c ='y'; int i, a=97; printf(" %c \n",c); printf(" %d \n",c); printf(" %d \n",'A'+'C'); printf(" %c %c \n",c,c+1); printf("%c\n",a); for(i=a;i<=122;i++) printf("%c",i); }

23 2.3 수식과 대입문 변수명에 값을 기억시키는 방법 변수 선언시 초기값을 지정하는 방법 대입문에 의한 방법 입력함수에 의한 방법 대입문에 의한 방법은 상수, 변수, 함수로 구성된 연산의 수식을 미리 지정한 변수에 대입하는 것을 말한다. 예) y=x+1; 변수 x가 갖고 있는 값에 1을 더해서 그 결과를 y에 대입하라는 의미이다. ‘=’은 대입연산자이다.

24 예제 2.8 다음은 대입문을 변형하여 프로그램 한 예이다. 프로그램을 분석하시오.
#include <stdio.h> #include <conio.h> void main(void) { int i, j, k; i=j=k=10; printf("i = %d, j = %d, k = %d\n",i, j, k); k = (i=20) + (j=40); /* 대입문 변형 */ }

25 2.4 데이터 형(data type) C언어에서 제공하는 기본데이터형
정수형 실수형(부동소수점형, 浮動小數点形) 문자형 각 데이터형은 그 표현 범위가 제한되어 있으며 컴파일러에 따라서 제한 범위가 다를 수도 있다.

26 2.4.1 정수 데이터형 정수는 2byte로 표현되는 signed int형을 기본으로 한다.
int 보다 큰 범위의 정수를 다루기 위한 signed long int형도 있다. long으로 간단히 표현할 수 있다. 음수가 사용되지 않는 카운터와 같은 데이터에서는 unsigned int형을 사용한다.

27 표 2.6 정수(int)형의 표현 범위(Visual C++ 기준) int형의 종류 Byte 수 표현 범위
signed int unsigned int short int signed short int unsigned short int long int signed long int unsigned long int 4 2

28 2.4.2 문자 데이터형 char 형의 종류 Byte 수 표현 범위 char signed char unsigned char 1

29 2.4.3 실수 데이터형 실수는 float, double, long double형이 있으며 기본형은 double형이다.
float형은 전체 32bit로 구성되어 있으며, 부호 1비트 지수 8비트, 가수 23비트의 3부분으로 구분된다. float형의 정확도는 10진수의 7.2자리로 표현하며 수치의 크기는 10+38까지 나타낸다. float형에서 지수부와 가수부를 확장한 double형과 long double형이 있다.

30 표 2.8 부동소수점(float)형의 표현 범위 (Visual C++ 기준)
IEEE 754에 정의된 float형의 내부표현 S 지수부 가수부 1 8 bit 23 bit 표 2.8 부동소수점(float)형의 표현 범위 (Visual C++ 기준) 데이터 형 Byte 수 표현 범위 float double long double 4 8 3.4E E+38 1.7E E+308

31 예제 2.9 컴파일러가 제공하는 변수의 크기를 알아보는 프로그램이다.
#include <stdio.h> void main() { int n; char c; long p; float f; double d; printf("%d \n", sizeof(char)); printf("%d \n", sizeof(int)); printf("%d \n", sizeof(long)); printf("%d \n", sizeof(float)); printf("%d \n", sizeof(double)); }

32 2.5 데이터 형 변환 데이터의 형 변환 자동 형 변환 강제 형 변환
대입 연산시 우측의 수식 결과값을 좌측의 데이터형으로 변환하여 배정할 때 발생 산술 연산시 두 오퍼랜드의 데이터의 형이 다른 경우에 발생 데이터형이 큰 쪽으로 변환 cast 변환 : (형) 수식; (형) 변수;

33 예제 2.11 자동 형 변환과 강제 형 변환 #include <stdio.h> void main(void) { char a='A'; int b=20, c, d=50, e=30; float f; c=a+b; /* 자동 형변환 */ f=(float)d+(float)e; /* 강제 형변환 */ printf("c=%d \n", c); printf("f=%f \n", f); }

34 2.6 표준 입출력 함수 입력 : 데이터를 컴퓨터 내부에 기억시키는 것
출력 : 내부에 기억된 내용을 컴퓨터 외부에 나타내는 것 C언어에서 표준 입출력 함수 : printf, scanf 표준 입출력 함수기 있는 헤더 파일 #include <stdio.h> 헤더 파일 : 함수의 프로토 타입을 정의해 두고, 인수의 개수와 형(type)을 검사하여 프로그램의 안정성을 보장한다.

35 2.6.1 printf printf 함수는 화면에 문자열이나 변수 값을 일정한 형식으로 출력하는 함수이다. 형식
예) printf("%5d", a);

36 표 2.9 printf 형식지정 문자열 형식 사용기능 %d, %I 기호 있는 10진 정수 %o
부호 없는 8진수(앞에 0이 붙지 않음) %x, %X 부호 없는 16진수(앞에 0이 붙지 않음) %u 부호 없는 10진 정수 %c 부호 없는 정수형으로 변환된 문자 %s char * : 문자열 s를 출력 %f double 형의 출력 %e, %E [-]m.dddddde±exx 또는 [-]m.ddddddE±Exx의 형식으로 출력 %p 포인터로 출력 %% %로 출력

37 표 2.10 printf 정리기호 문자 의미 - 왼쪽 끝을 맞추어 정렬 + 숫자 앞에 부호를 표시 Space
첫 문자가 -부호 또는 공백이 된다. 칸수에 맞게 앞에 0을 출력한다. # ∙0 : 첫 자리가 0 ∙x or X : 0x or 0X가 앞에 출력 ∙e, E, f, g or G : 소수점이 항상 출력 ∙g와 G의 경우 연속된 0을 없애지 않는다. 숫자 ∙출력될 최소 자리수 ∙자리수가 큰 경우 : 숫자 무시 ∙자리수가 작은 경우 : 오른쪽 정렬(왼쪽정렬로 지정된 경우는 왼    쪽 정렬) ∙나머지는 공백으로 되며, 0으로 지정된 경우는 0으로 채워짐. . 앞의 수는 전체 자리수, 뒤의 수는 소수이하 자리수 h short l long L long double

38 예제 2.12 printf 함수를 사용하여 여러 가지 출력 예
#include <stdio.h> void main() { int i=100, j; j = &i; //실행 결과 printf("%d\n",123); //123 printf("%5d\n",345); // 345 printf("%05d\n",345); //00345 printf("%13u\n", ); // printf("%0d\n",567); //567 printf("%05x\n",507); //001fb printf("%5x\n",507); // 1fb printf("%#5x\n",507); //0x1fb printf("%6o\n",507); // 773 printf("%#6o\n",507); // 0773 printf("%0x\n",507); //1fb printf("%-5d\n",678); //678 printf("%6.1f\n",789.38); // 789.4 printf("%10.1e\n",789.38); // 7.9e+002 printf("%7.1f\n",789.45); // printf("%p\n",&i); //0012FF7C printf("%20s\n","abcdefg789.45"); // }

39 2.6.2 scanf scanf 함수는 키보드로부터 데이터를 직접 입력하는 기능을 가진 함수 형식
예) scanf("%d", &a);

40 표 2.11 scanf 형식지정 문자열 문자열 의 미 %d 10진 정수 %i 정수 : 8진수 또는 16진수 일 수도 있다.
의 미 %d 10진 정수 %i 정수 : 8진수 또는 16진수 일 수도 있다. %o 8진수 정수(앞에 0이 없는 형) %u 부호 없는 10진 정수 %x 16진 정수(앞에 0이 붙을 수도 있음) %c 문자 : 정해진 길이가 될 때가지 문자를 읽어 들인다. \0이 붙지 않는다. 공백은 무시. %s 공백 없는 문자열, \0으로 끝나는 문자열의 포인터를 사용 %e,%f,%g 부동소수점 %p 포인터 값 %n 읽혀질 문자의 개수를 넘겨준다. […] [] 속에 있는 문자들과 일치하는 가장 긴 문자열 입력 [^…] [] 속에 있는 문자들과 일치하지 않는 가장 긴 문자열 입력 %% 입력에 %가 그냥 들어올 수 있다.

41 예제 2.13 scanf 함수로 입력하기 #include <stdio.h> void main( void ) {
int i, result; float fp; char c, s[81]; printf( "정수 실수 문자 문자열을 입력하시오\n"); result = scanf( "%d %f %c %s", &i, &fp, &c, s ); printf( "\n입력된 데이터의 개수 = %d\n",result); printf( "입력결과 : %d %f %c %s\n", i, fp, c, s); }

42 예제 2.14 printf로 scanf 입력에 대한 명시 예
#include <stdio.h> void main(void) { int a; float b; /* 정수, 실수, 문자형 선언 */ char c; printf(" input(integer)==>"); scanf("%d", &a); /* 정수입력 */ printf("\n input(float)==>"); scanf("%f", &b); /* 실수입력 */ printf(" a = %d, b = %f\n", a, b); /* 출력 */ }

43 예제 2.15 두 수(정수)를 입력받아 출력하는 프로그램을 작성하시오
#include <stdio.h> void main(void) { int a, b; printf(" input(integer)==>"); scanf("%d", &a); printf("\n input(float)==>"); scanf("%d", &b); printf(" a = %d, b = %d\n", a, b); }

44 예제 2.16 다음 프로그램의 실행 결과를 분석하시오 #include <stdio.h> void main(void)
{ printf(“%d \n”, 12345); printf(“%7d \n”, 12345); printf(“%07d \n”, 12345); printf(“%e \n”, ); printf(“%10.3e \n”, ); printf(“%4.2f \n”, ); printf(“%010.2f \n”, ); printf(“%d \n”, ); printf(“%ld \n”, ); }

45 예제 2.17 miles를 kilometers로 바꾸는 프로그램을 작성하시오 1 mile = 1.609 km
#include <stdio.h> #define KMS_PER_MILES 1.609 void main(void) { float miles, kms; printf(“\t\tinput(miles) ==> "); scanf("%f", &miles); kms = KMS_PER_MILES * miles; printf("\t\t %f mile = %f km\n“, miles, kms); }

46 예제 2.18 다음 프로그램을 분석하시오 #include <stdio.h> void main(void) {
int a = 123; float f = ; printf(“a = %d\t”, a); printf(“a = %10d\n”, a); /* 전체 10자리에서 오른쪽을 기준 */ printf(“a = %-10d\t”, a); /* 전체 10자리에서 왼쪽을 기준 */ printf(“a = %3d\n”, a); printf(“float f = %f\t”, f); printf(“float f = %12.5f\t”, f); }

47 2.7 키보드 입력 함수 키보드로부터 한 문자 또는 문자열을 입력 받고 이를 출력하는 함수들이다.
getchar()함수 : 한 문자를 입력 putchar()함수 : 한 문자를 출력 gets()와 puts()는 문자열을 입력 또는 출력

48 int getchar( ); int putchar( ); int *gets(char *str );
키보드로 하나의 문자를 입력하는 함수 리턴 값은 키보드의 읽은 문자 화일 종료시 EOF 반환 int putchar( ); 화면에 하나의 문자를 출력하는 함수 오류시 EOF 반환 int *gets(char *str ); 키보드로 1행을 읽어서 str에 저장 리턴 값 : str내용 반환 파일 종료나 오류시에 NULL 반환 int puts(char *str ); 화면에 한 행을 출력하고, 출력 행을 바꾼다. 정상 처리시 : 0이 아닌 값 반환 오류시 : EOF 반환

49 예제 2.20 getchar, putchar를 이용한 한 문자 입출력.
#include <stdio.h> void main(void) { char c; c = getchar(); /* 키보드에서 한 문자 입력 */ putchar(); /* 화면에 한 문자 출력 */ }

50 예제 2.21 gets, puts를 이용한 문자열 입출력.
#include <stdio.h> void main(void) { char c[100]; gets(c); /* 키보드에서 문자열 입력 */ puts(c); /* 화면에 문자열 출력 */ }

51 예제 2.23 소문자로 입력된 문자를 대문자로 출력하는 프로그램
#include <stdio.h> void main(void) { char c; printf("소문자 한 개를 입력하시오\n“); c=getchar(); c= c - 32; /* 소문자를 대문자로 변환 */ putchar(c); putchar('\n'); }


Download ppt "제2장 데이터형과 표준 입출력문 문봉근."

Similar presentations


Ads by Google