460 likes | 780 Views
제 2 장 데이터형과 표준 입출력문. 2.1 상수의 표현 2.2 변수의 표현 2.3 수식과 대입문 2.4 데이터형 2.5 데이터의 형 변환 2.6 표준 입출력 함수 2.7 키보드 입력함수. C 언어에서 데이터는 상수 (constant) 와 변수 (variable) 로 나눈다 . 상수와 변수는 크게 문자형 , 정수형과 실수형의 데이터형을 가진다 . 일반적으로 상수는 프로그램이 실행되기 전에 데이터형과 값을 미리 선언한 후에 실행 중에 그 값이 바뀌어지지 않는다 .
E N D
제2장 데이터형과 표준 입출력문 2.1 상수의 표현 2.2 변수의 표현 2.3 수식과 대입문 2.4 데이터형 2.5 데이터의 형 변환 2.6 표준 입출력 함수 2.7 키보드 입력함수
C 언어에서 데이터는 상수(constant)와 변수(variable)로 나눈다. • 상수와 변수는 크게 문자형, 정수형과 실수형의 데이터형을 가진다. • 일반적으로 상수는 프로그램이 실행되기 전에 데이터형과 값을 미리 선언한 후에 실행 중에 그 값이 바뀌어지지 않는다. • 반면 변수는 프로그램이 수행되기 전에 데이터형을 미리 선언을 한 후에 프로그램 실행 중에 변수에 값을 대입하여 프로그램이 수행할 수 있도록 허용하는 것을 말한다.
2.1 상수의 표현 • 상수는 프로그램 중에 그 값이 명시되어 변하지 않는 것으로서 문자(character) 상수, 정수형 상수, 실수형 상수, 문자열(character string) 상수가 있다. • 실수형 상수에는 십진형 표기와 지수형 표기가 있다. • 문자 상수는 ‘A’와 같이 ‘’(작은따옴표)로 묶어서 문자를 표현한다. • 문자열 상수는 “ ”(큰따옴표)로 나타내는데, “1234”는 숫자가 아니라 문자열로 다룬다. • 변수와 상수는 프로그램 시작부분의 선언부에 선언한다.
2.1.1 문자 상수 • 문자상수는 아스키(ASCII)코드의 한 문자를 표현을 위해 작은 따옴표로 묶어 나타낸다. • 문자 상수는 한 바이트로 표현된다. • ① 작은 따옴표로 묶인 문자이다. • (예) ‘a’ • ② 코드 값을 직접 작은 따옴표로 묶어서 표현한다 • (예) ‘\246’, ‘\x9B’ • 여기서, ‘\x’, ‘\X’ 16진 표현이다.
③ 아스키코드에서 특수문자, 제어문자 영역(0x00~0x19)은 문자상수 표현이 어려우므로 기능코드를 사용하여 문자 상수로 프로그램 중에 표현할 수 있다. • 기능 코드들을 escape 문자라 하며 표 2.1과 같다.
2.1.2 정수 상수 ① 소수점이 없는 수치, 기본형은 signed int이다. ② 부호가 없는 정수 상수인 경우 수치 뒤에 ‘u’, ‘U’의 태그(tag)를 붙인다. ③ 수치의 크기가 int의 한계를 넘으면 자연히 long int로 인식한다. ④ 절대값이 작은 수치에 태그를 붙여 long int로 명시 가능하다. ⑤ unsigned long int형 상수에는 끝에 ‘ul’혹은 ‘UL’을 붙인다. ⑥ 정수표현에서 ‘0’은 8진 표현이고 ‘0x’이나 ‘0X’는 16진 표현이다.
2.1.3 실수 상수 ① 기본형은 double형이다. ② float형 상수는 ‘f’혹은 ‘F’의 태그를 사용한다. ③ long double형은 ‘l’나 ‘L’의 태그를 붙인다. ④ 십진형 표기와 지수형 표기가 있다.
2.1.4 문자열 상수 문자열상수(character string constant)는 일련의 문자들의 모임을 말하며, 다음과 같이 표현된다. ① 문자열은 “”(큰따옴표)로 표현한다. ② 문자열은 아스키 문자들의 끝에 널(Null) 문자가 첨가된다. 예를 들어 “abc"는 3개의 문자와 문자열의 알리는 널 문자를 포함하므로 실제 크기는 4바이트이다. ③ “"는 문자열의 길이가 0인 널 스트링(null string)이다. 실제 문자열의 크기는 1바이트이다.
2.2 변수의 표현 2.2.1 변수의 선언 • 프로그램 상의 명령문이 실행됨에 따라 값이 바뀔 수 있는 것을 변수(variable)라 한다. • 변수는 항상 프로그램의 본문이 실행되기 전에 정의를 한 후 사용해야 한다. • 변수 선언은 변수를 위한 기억공간을 할당하고 변수명과 변수가 가질 데이터형을 지정하는 것을 말한다.
변수를 정의하는 방법 • 문법 • 데이터형 변수명[=초기값], [ 변수명[=초기값] ...] ; • 변수 정의는 변수가 가질 데이터형과 변수명을 위한 식별자를 지정한다. • 변수에 초기값을 지정하려면 ‘=’다음에 초기값이나 수식을 쓴다. • 데이터형이 같은 변수들을 연속적으로 한꺼번에 정의할 수 있다.
변수명이나 상수명, 함수명 등으로 사용하는 식별자를 지정하는 규칙 ① 첫 문자는 영문자로 시작해야 된다. ② 변수명의 길이는 31자까지 유효하다. ③ 언더바(_)는 변수명의 일부로 사용할 수 있으며 첫 글자에도 올 수 있다. ④ 키워드(if, int, for, do....)는 변수명으로 사용할 수 없다. ⑤ 대문자와 소문자는 다른 문자로 구분한다.
변수명을 붙일 때 신경쓰자 ① 좋지 않은 예 int i, j; 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); }
변수명을 붙일 때 신경쓰자(계속) ④ 접두사 접두사와 접미사를 사용하는 것은 의미를 명확하게 하고 또한 프로그램의 일관성을 부여할 수 있다. PutImage, SetColor, GetCurrenFileName, .... ⑤ 기타 ■ 의미가 어렵거나 분명하지 않은 단어는 사용을 되도록 피하도록 한다. HandleCalculation, ProcessData, ... ■ 루틴이 하는 일을 모두 설명할 수 있어야 한다. 루틴 이름과 관련이 없는 연산들은 그 루틴에 포함되어서는 안된다.
변수명을 붙일 때 신경쓰자(계속) ■ 루틴명의 길이는 최적의 평균 길이는 9~15자이다. 그러나 평균적으로 현실적인 이름은 15~20자가 적당하다. ■ 이름짓기를 위한 규칙을 정한다. 특히 여러 사람이 프로그래밍 프로젝트에 참가할 경우 이름짓기에 관한 규칙을 제정해야 한다. => 프로그램의 표준화 및 일관성
2.2.2 변수의 초기화 • 선언한 변수는 프로그램 실행도중에 수식에 따라 값이 변할 수 있다. • 처음에 변수를 미리 초기화하여 사용할 수도 있다.
예제 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); }
2.3 수식과 대입문 • 변수명에 값을 기억시키는 방법 • 변수 선언시 초기값을 지정하는 방법 • 대입문에 의한 방법 • 입력함수에 의한 방법 • 대입문에 의한 방법은 상수, 변수, 함수로 구성된 연산의 수식을 미리 지정한 변수에 대입하는 것을 말한다. • 예) • y=x+1; • 변수 x가 갖고 있는 값에 1을 더해서 그 결과를 y에 대입하라는 의미이다. • ‘=’은 대입연산자이다.
예제 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); /* 대입문 변형 */ printf("i = %d, j = %d, k = %d\n",i, j, k); }
2.4 데이터 형(data type) • C언어에서 제공하는 기본데이터형 • 정수형 • 실수형(부동소수점형, 浮動小數点形) • 문자형 • 각 데이터형은 그 표현 범위가 제한되어 있으며 컴파일러에 따라서 제한 범위가 다를 수도 있다.
2.4.1 정수 데이터형 • 정수는 2byte로 표현되는 signed int형을 기본으로 한다. • int 보다 큰 범위의 정수를 다루기 위한 signed long int형도 있다. • long으로 간단히 표현할 수 있다. • 음수가 사용되지 않는 카운터와 같은 데이터에서는 unsigned int형을 사용한다.
2.4.3 실수 데이터형 • 실수는 float, double, long double형이 있으며 기본형은 double형이다. • float형은 전체 32bit로 구성되어 있으며, 부호 1비트 지수 8비트, 가수 23비트의 3부분으로 구분된다. • float형의 정확도는 10진수의 7.2자리로 표현하며 수치의 크기는 10+38까지 나타낸다. • float형에서 지수부와 가수부를 확장한 double형과 long double형이 있다.
IEEE 754에 정의된 float형의 내부표현 표 2.8 부동소수점(float)형의 표현 범위
예제 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)); }
2.5 데이터 형 변환 • 데이터의 형 변환 • 자동 형 변환 • 강제 형 변환 • 자동 형 변환 • 대입 연산시 우측의 수식 결과값을 좌측의 데이터형으로 변환하여 배정할 때 발생 • 산술 연산시 두 오퍼랜드의 데이터의 형이 다른 경우에 발생 • 데이터형이 큰 쪽으로 변환 • 강제 형 변환 • cast 변환 : • (형) 수식; • (형) 변수;
예제 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); }
2.6 표준 입출력 함수 • 입력 : 데이터를 컴퓨터 내부에 기억시키는 것 • 출력 : 내부에 기억된 내용을 컴퓨터 외부에 나타내는 것 • C언어에서 표준 입출력 함수 : printf, scanf • 표준 입출력 함수기 있는 헤더 파일 • #include <stdio.h> • 헤더 파일 : 함수의 프로토 타입을 정의해 두고, 인수의 개수와 형(type)을 검사하여 프로그램의 안정성을 보장한다.
2.6.1 printf • printf 함수는 화면에 문자열이나 변수 값을 일정한 형식으로 출력하는 함수이다. • 형식 • printf("형식지정 문자열", 변수1, 변수2, 변수3,...); • 예) • printf("%5d", a);
예제 2.12 printf예 #include <stdio.h> void main() { int i=100, j; j = &i; printf("%d\n",123); printf("%5d\n",345); printf("%05d\n",345); printf("%13u\n",4239109949); printf("%0d\n",567); printf("%05x\n",507); printf("%5x\n",507); printf("%#5x\n",507); printf("%6o\n",507); printf("%#6o\n",507); printf("%0x\n",507); printf("%-5d\n",678); printf("%6.1f\n",789.38); printf("%10.1e\n",789.38); printf("%7.1f\n",789.45); printf("%p\n",&i); printf("%20s\n","abcdefg789.45"); }
2.6.2 scanf • scanf 함수는 키보드로부터 데이터를 직접 입력하는 기능을 가진 함수 • 형식 • scanf("형식지정 문자열", 변수1, 변수2, 변수3,........); • 예) • scanf("%d", &a);
예제 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); }
예제 2.14 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); /* 출력 */ }
2.7 키보드 입력 함수 • 키보드로부터 한 문자 또는 문자열을 입력받고 이를 출력하는 함수들이다. • getchar()함수 : 한 문자를 입력 • putchar()함수 : 한 문자를 출력 • gets()와 puts()는 문자열을 입력 또는 출력
int getchar( ); • 키보드로 하나의 문자를 입력하는 함수 • 리턴값은 키보드의 읽은 문자 • 화일 종료시 EOF 반환 • int putchar( ); • 화면에 하나의 문자를 출력하는 함수 • 오류시 EOF 반환 • int *gets(char *str ); • 키보드로 1행을 읽어서 str에 저장 • 리턴값 : str내용 반환 • 파일 종료나 오류시에 NULL 반환 • int puts(char *str ); • 화면에 한 행을 출력하고, 출력 행을 바꾼다. • 정상 처리시 : 0이 아닌 값 반환 • 오류시 : EOF 반환
예제 2.20 getchar, putchar를 이용한 한 문자 입출력. #include <stdio.h> void main(void) { char c; c = getchar(); /* 키보드에서 한 문자 입력 */ putchar(); /* 화면에 한 문자 출력 */ }
예제 2.21 gets, puts를 이용한 문자열 입출력. #include <stdio.h> void main(void) { char c[100]; gets(c); /* 키보드에서 문자열 입력 */ puts(c); /* 화면에 문자열 출력 */ }
예제 2.23 소문자로 입력된 문자를 대문자로 출력하는 프로그램 #include <stdio.h> void main(void) { char c; printf("소문자 한 개를 입력하시오\n“); c=getchar(); c= c - 32; /* 소문자를 대문자로 변환 */ putchar(c); putchar('\n'); }