04 전처리와 입출력
description
Transcript of 04 전처리와 입출력
![Page 1: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/1.jpg)
1
04 전처리와 입출력
2007 1 학기
![Page 2: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/2.jpg)
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)…
![Page 3: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/3.jpg)
Perfect C3
시스템 , 사용자 헤더파일 사용자 헤더 파일
사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우
헤더파일의 큰 따옴표는 헤더파일이 기술된 폴더와 시스템 인클루드
폴더를 차례로 검색 시스템 헤더 파일은 대부분 개발도구가 설치된 폴더에서 하부 [include]
라는 이름의 폴더에 존재 시스템 헤더 파일
#include <stdio.h>#include “myheader.h”
![Page 4: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/4.jpg)
Perfect C4
사용자 헤더파일 myheader.c 와 myheader.h 로 나누어 처리
헤더 파일 myheader.h 는 소스 myheader.c 와 동일한 폴더에 저장 Visual C++ 에서의 헤더 파일
Visual C++ 에서는 개발 도구 환경에서 사용자가 직접 만든 헤더 파일만을 구분할 수 있는 창을 제공
![Page 5: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/5.jpg)
Perfect C5
기호상수 정의 #define
전처리기 지시자인 #define 은 소스에서 지정된 기호상수를 정의된 치환문자열로 대체 ( 치환 ) 하는 역할 수행
장점 지시자 #define 은 시스템에 따라 변할 수 있는 상수를 한번에 수정할 수
있고 , 수정되는 한 부분만 검사하면 되므로 이식성과 신뢰성이 증대
예제 4-3
![Page 6: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/6.jpg)
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); 로 치환
![Page 7: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/7.jpg)
Perfect C7
인자의 이용 인자가 있는 매크로의 치환
![Page 8: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/8.jpg)
Perfect C8
주의 사항 괄호의 이용
공백에 의한 오류
예제 4-4 : #define CUBE(x) ( (x) * (x) * (x) ) 예제 4-5 : #define PHI 3.14 #define ROUND(r) (2 * PHI * (r) )
![Page 9: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/9.jpg)
Perfect C9
자료형의 재정의 typedef
키워드 typedef 를 이용하여 이미 정해진 자료 유형을 다른 이름으로 재정의 typedef unsinged long u_long;
자료 재정의 필요성 터보 C++ 에서 자료 유형 int 는 저장공간의 크기가 2 바이트이나 비쥬얼 C++ 는 4
바이트 개발도구가 변하면 자료 유형이 맞지 않아 오류가 발생함 int 형이 2 바이트인 개발 환경에서는 typedef 문만 변경하면 나머지 프로그램
수정하지 않아도 됨으로 편리 ( 예 ) typedef long myint;
![Page 10: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/10.jpg)
Perfect C10
예제 소스 typedef.c
![Page 11: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/11.jpg)
Perfect C11
표준입력 함수 scanf()
간단한 정수의 입력 & 은 주소를 의미하는 연산자
![Page 12: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/12.jpg)
Perfect C12
변환 명세 함수 scanf() 에서
임의의 갯수의 입력을 받을 수 있고 , 이런 경우 적절히 변환 명세를 이용하여 입력 값을 지정
scanf(“%d %f”, &age, &weight);
![Page 13: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/13.jpg)
Perfect C13
예제 소스
![Page 14: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/14.jpg)
Perfect C14
예제 소스 mydata.c
키보드로부터 키 , 8 진수 , 16 진수 , 몸무게 , 혈액형을 입력 받아 저장 , 출력하는 프로그램
각각의 입력 값을 저장할 자료형을 고려하여 변수를 선언한 후 함수 scanf() 를 이용하여 입력 값을 저장
문자 입력 155 쪽 소스 24 라인을 주의
• 함수 scanf() 를 호출하는 인자가 “ \n%c”
만일 여러분이 무심코 24 라인을 scanf(“%c”) 로 코딩하였다면 프로그램 실행에서 원하는 결과가 나오지 않음
몸무게를 입력한 후 Enter 키를 누른 값이 \n 으로 입력되고 , 이 후 입력하는 문자가 변수 blood 에 저장되게 하기 위함
![Page 15: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/15.jpg)
Perfect C15
출력 함수 함수 printf()
모든 종류의 자료형을 출력하는 함수 제어문자열과 표현식을 이용하여 출력하는데 , 제어문자열 (control
string) 에는 출력하려는 표현식 값에 따라 변환명세 (conversion specification) 를 차례로 기술
• 변환명세는 변환문자열이라고도 표현 제어문자열 내부의 변환명세는 표현식의 수와 값의 종류에 따라
서로 순서대로 일치 ( scanf 의 변환 명세와 동일한 명세 사용 )
printf (“ … %d … %f …“, 정수표현식 , 실수표현식 );
![Page 16: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/16.jpg)
Perfect C16
정수 값의 필드 폭 출력하려는 정수 값의 필드 폭 (width) 지정
%d 사이에 폭을 나타내는 정수를 기술
![Page 17: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/17.jpg)
Perfect C17
실수의 필드 폭 부동소수형을 출력하는 경우
변환명세에서 필드 폭 (width) 을 지정하려면 %f 사이에 폭을 기술
![Page 18: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/18.jpg)
Perfect C18
출력 제어 문자의 이용 출력제어문자 (escape sequences)
탈출 기법을 이용한 문자를 함수 printf() 에서 제어문자열이나 표현식에서 이용이 가능
![Page 19: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/19.jpg)
Perfect C19
예제 소스 printescape.c
![Page 20: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/20.jpg)
Perfect C20
예제 소스 fieldwidth.c
다음과 같은 출력이 나오도록 함수 printf() 의 제어문자열과 변환명세를 고려하여 프로그램을 작성
![Page 21: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/21.jpg)
Perfect C21
문자 입출력 문자 하나
문자 하나를 입력하고 출력하기 위한 함수가 getchar() 와 putchar()
• 이 함수를 이용하려면 헤더 파일 stdio.h 파일을 첨가• 함수 getchar() 를 이용하여 문자를 하나 입력 받으려면 인자가 없는
getchar() 를 이용• 입력 받은 문자를 저장하려면 자료형 char 나 정수형으로 선언된
변수를 이용하여 저장
• 문자의 출력은 함수 putchar() 의 인자에 출력하려는 문자를 기술하여 출력
char c;c = getchar();
putchar(c);
![Page 22: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/22.jpg)
Perfect C22
이해점검 C 언어에서 헤더파일을 첨가하는 지시자는 (#include ) 이다 . 사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우 ,
( “” ) 를 이용하여 헤더파일을 기술한다 . 전처리기 지시자인 ( ) 은 소스에서 지정된 기호상수 (symbolic constant)
를 정의된 치환문자열로 대체한다 . 함수 printf() 에서 출력 값의 정렬은 기본적으로 ( 오른쪽 ) 정렬이다 . 함수 printf() 에서 출력 값의 정렬을 왼쪽으로 지정하려면 문자 ( - ) 를 %
다음에 기술하여 이용한다 . 표준 출력으로 함수 printf() 를 이용하듯이 , 표준 입력으로는 함수
( scanf() ) 를 이용한다 . 함수 scanf() 에서 표준입력으로 값을 입력 받아 변수에 저장하려면 일반
변수 앞에는 반드시 주소를 의미하는 문자 ( & ) 가 앞에 와야 한다 . 함수 scanf() 에서 double 자료형을 소수 형태로 입력 받으려면
변환명세를 (%lf ) 라 기술한다 . 문장 ( typedef ) 는 C 언어의 일반 문장으로 이미 사용되는 자료형을
새로운 자료형으로 정의할 수 있는 기능이다 . 문자 하나를 입력하는데 이용하는 함수는 ( getchar ) 이다 .
![Page 23: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/23.jpg)
Perfect C23
프로그래밍 실습
프로그램 목적 자료형 double 인 원의 반지름을 입력 받아 , 원의 둘레와 원의 면적을
구하는 프로그램을 작성
헤더 파일과 매크로를 작성 헤더파일 circle.h
• 원주율 3.14 를 PHI 정의• 매크로 CIRCUM(x) 은 인자 x 가 반지름인 원에서 원의 둘레를 구하는
매크로를 정의• 매크로 AREA(x) 는 인자 x 가 반지름인 원에서 원의 면적을 구하는 매크로를
정의
![Page 24: 04 전처리와 입출력](https://reader030.fdocuments.net/reader030/viewer/2022033018/568134a0550346895d9b9a5b/html5/thumbnails/24.jpg)
24
노력 없이 이룰 수 있는 것 아무것도 없다 .