04 전처리와 입출력

Preview:

DESCRIPTION

2007 1 학기. 04 전처리와 입출력. 헤더파일. 텍스트 파일 헤더파일 (header file) 은 확장자가 * .h 로 전처리기 지시자인 #include, #define 등과 자료형의 재정의 , 함수의 원형 (prototype) 을 포함하는 텍스트 파일 다음은 함수 main() 위에 항상 끼워 넣은 헤더 파일 stdio.h 의 일부 위 헤더파일은 시스템 헤더파일로 개발도구에서 제공하는 헤더파일  . … typedef unsigned int size_t; … - PowerPoint PPT Presentation

Citation preview

1

04 전처리와 입출력

2007 1 학기

Perfect C2

헤더파일 텍스트 파일

헤더파일 (header file) 은 확장자가 *.h 로 • 전처리기 지시자인 #include, #define 등과 자료형의 재정의 , 함수의 원형

(prototype) 을 포함하는 텍스트 파일 다음은 함수 main() 위에 항상 끼워 넣은 헤더 파일 stdio.h 의 일부

위 헤더파일은 시스템 헤더파일로 개발도구에서 제공하는 헤더파일

…typedef unsigned int size_t;…#define EOF (-1)…_CRTIMP int __cdecl printf(const char *, ...);…#define getchar() getc(stdin)#define putchar(_c) putc((_c),stdout)…

Perfect C3

시스템 , 사용자 헤더파일 사용자 헤더 파일

사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우

  헤더파일의 큰 따옴표는 헤더파일이 기술된 폴더와 시스템 인클루드

폴더를 차례로 검색 시스템 헤더 파일은 대부분 개발도구가 설치된 폴더에서 하부 [include]

라는 이름의 폴더에 존재 시스템 헤더 파일

#include <stdio.h>#include “myheader.h”

Perfect C4

사용자 헤더파일 myheader.c 와 myheader.h 로 나누어 처리

헤더 파일 myheader.h 는 소스 myheader.c 와 동일한 폴더에 저장 Visual C++ 에서의 헤더 파일

Visual C++ 에서는 개발 도구 환경에서 사용자가 직접 만든 헤더 파일만을 구분할 수 있는 창을 제공

Perfect C5

기호상수 정의 #define

전처리기 지시자인 #define 은 소스에서 지정된 기호상수를 정의된 치환문자열로 대체 ( 치환 ) 하는 역할 수행

장점 지시자 #define 은 시스템에 따라 변할 수 있는 상수를 한번에 수정할 수

있고 , 수정되는 한 부분만 검사하면 되므로 이식성과 신뢰성이 증대

예제 4-3

Perfect C6

#define#include <stdio.h>#define PRTLINE printf(“\n”);int main(void){

PRTLINE // 전처리기가 printf(“\n”); 로 치환함return 0;

}-------------------------------------------------#define SQUARE2 2 * 2#define SQUARE3 3 * 3 ….printf(“%d, %d”, SQUARE2, SQUARE3);// 전처리가 printf(“%d, %d”, 2 * 2, 3 * 3); 로 치환

Perfect C7

인자의 이용 인자가 있는 매크로의 치환

Perfect C8

주의 사항 괄호의 이용

공백에 의한 오류

예제 4-4 : #define CUBE(x) ( (x) * (x) * (x) ) 예제 4-5 : #define PHI 3.14 #define ROUND(r) (2 * PHI * (r) )

Perfect C9

자료형의 재정의 typedef

키워드 typedef 를 이용하여 이미 정해진 자료 유형을 다른 이름으로 재정의 typedef unsinged long u_long;

자료 재정의 필요성 터보 C++ 에서 자료 유형 int 는 저장공간의 크기가 2 바이트이나 비쥬얼 C++ 는 4

바이트 개발도구가 변하면 자료 유형이 맞지 않아 오류가 발생함 int 형이 2 바이트인 개발 환경에서는 typedef 문만 변경하면 나머지 프로그램

수정하지 않아도 됨으로 편리 ( 예 ) typedef long myint;

Perfect C10

예제 소스 typedef.c

Perfect C11

표준입력 함수 scanf()

간단한 정수의 입력 & 은 주소를 의미하는 연산자

Perfect C12

변환 명세 함수 scanf() 에서

임의의 갯수의 입력을 받을 수 있고 , 이런 경우 적절히 변환 명세를 이용하여 입력 값을 지정

scanf(“%d %f”, &age, &weight);

Perfect C13

예제 소스

Perfect C14

예제 소스 mydata.c

키보드로부터 키 , 8 진수 , 16 진수 , 몸무게 , 혈액형을 입력 받아 저장 , 출력하는 프로그램

각각의 입력 값을 저장할 자료형을 고려하여 변수를 선언한 후 함수 scanf() 를 이용하여 입력 값을 저장

문자 입력 155 쪽 소스 24 라인을 주의

• 함수 scanf() 를 호출하는 인자가 “ \n%c”

만일 여러분이 무심코 24 라인을 scanf(“%c”) 로 코딩하였다면 프로그램 실행에서 원하는 결과가 나오지 않음

몸무게를 입력한 후 Enter 키를 누른 값이 \n 으로 입력되고 , 이 후 입력하는 문자가 변수 blood 에 저장되게 하기 위함

Perfect C15

출력 함수 함수 printf()

모든 종류의 자료형을 출력하는 함수 제어문자열과 표현식을 이용하여 출력하는데 , 제어문자열 (control

string) 에는 출력하려는 표현식 값에 따라 변환명세 (conversion specification) 를 차례로 기술

• 변환명세는 변환문자열이라고도 표현 제어문자열 내부의 변환명세는 표현식의 수와 값의 종류에 따라

서로 순서대로 일치 ( scanf 의 변환 명세와 동일한 명세 사용 )

printf (“ … %d … %f …“, 정수표현식 , 실수표현식 );

Perfect C16

정수 값의 필드 폭 출력하려는 정수 값의 필드 폭 (width) 지정

%d 사이에 폭을 나타내는 정수를 기술

Perfect C17

실수의 필드 폭 부동소수형을 출력하는 경우

변환명세에서 필드 폭 (width) 을 지정하려면 %f 사이에 폭을 기술

Perfect C18

출력 제어 문자의 이용 출력제어문자 (escape sequences)

탈출 기법을 이용한 문자를 함수 printf() 에서 제어문자열이나 표현식에서 이용이 가능

Perfect C19

예제 소스 printescape.c

Perfect C20

예제 소스 fieldwidth.c

다음과 같은 출력이 나오도록 함수 printf() 의 제어문자열과 변환명세를 고려하여 프로그램을 작성

Perfect C21

문자 입출력 문자 하나

문자 하나를 입력하고 출력하기 위한 함수가 getchar() 와 putchar()

• 이 함수를 이용하려면 헤더 파일 stdio.h 파일을 첨가• 함수 getchar() 를 이용하여 문자를 하나 입력 받으려면 인자가 없는

getchar() 를 이용• 입력 받은 문자를 저장하려면 자료형 char 나 정수형으로 선언된

변수를 이용하여 저장

• 문자의 출력은 함수 putchar() 의 인자에 출력하려는 문자를 기술하여 출력

char c;c = getchar();

putchar(c);

Perfect C22

이해점검 C 언어에서 헤더파일을 첨가하는 지시자는 (#include ) 이다 . 사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우 ,

( “” ) 를 이용하여 헤더파일을 기술한다 . 전처리기 지시자인 ( ) 은 소스에서 지정된 기호상수 (symbolic constant)

를 정의된 치환문자열로 대체한다 . 함수 printf() 에서 출력 값의 정렬은 기본적으로 ( 오른쪽 ) 정렬이다 . 함수 printf() 에서 출력 값의 정렬을 왼쪽으로 지정하려면 문자 ( - ) 를 %

다음에 기술하여 이용한다 . 표준 출력으로 함수 printf() 를 이용하듯이 , 표준 입력으로는 함수

( scanf() ) 를 이용한다 . 함수 scanf() 에서 표준입력으로 값을 입력 받아 변수에 저장하려면 일반

변수 앞에는 반드시 주소를 의미하는 문자 ( & ) 가 앞에 와야 한다 . 함수 scanf() 에서 double 자료형을 소수 형태로 입력 받으려면

변환명세를 (%lf ) 라 기술한다 . 문장 ( typedef ) 는 C 언어의 일반 문장으로 이미 사용되는 자료형을

새로운 자료형으로 정의할 수 있는 기능이다 . 문자 하나를 입력하는데 이용하는 함수는 ( getchar ) 이다 .

Perfect C23

프로그래밍 실습

프로그램 목적 자료형 double 인 원의 반지름을 입력 받아 , 원의 둘레와 원의 면적을

구하는 프로그램을 작성

헤더 파일과 매크로를 작성 헤더파일 circle.h

• 원주율 3.14 를 PHI 정의• 매크로 CIRCUM(x) 은 인자 x 가 반지름인 원에서 원의 둘레를 구하는

매크로를 정의• 매크로 AREA(x) 는 인자 x 가 반지름인 원에서 원의 면적을 구하는 매크로를

정의

24

노력 없이 이룰 수 있는 것 아무것도 없다 .

Recommended