11 장 표준 라이브러리 (Standard Library)

54
1 11 11 장 장장 장장장장장 장 장장 장장장장장 (Standard Library) (Standard Library)

description

11 장 표준 라이브러리 (Standard Library). 11 장 내용. 11-1 문자 처리 함수 11-2 문자열 처리 함수 11-3 기억장치 관리 함수 11-4 자료 변환 처리 함수 11-5 기타 함수. 표준 라이브러리 역할 및 종류. 표준 라이브러리 역할 프로그래머에게 편리하게 사용할 수 있는 다양한 종류의 함수를 제공 표준 라이브러리 종류 입출력함수 , 문자 및 문자열 함수 , 수치함수 , 시스템 함수 연관된 표준 헤더 파일 - PowerPoint PPT Presentation

Transcript of 11 장 표준 라이브러리 (Standard Library)

Page 1: 11 장 표준 라이브러리  (Standard Library)

1

1111 장 표준 라이브러리 장 표준 라이브러리 (Standard Library)(Standard Library)

Page 2: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 2

11 장 내용 11-1 문자 처리 함수 11-2 문자열 처리 함수 11-3 기억장치 관리 함수 11-4 자료 변환 처리 함수 11-5 기타 함수

Page 3: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 3

표준 라이브러리 역할 및 종류 표준 라이브러리 역할

프로그래머에게 편리하게 사용할 수 있는 다양한 종류의 함수를 제공

표준 라이브러리 종류 입출력함수 , 문자 및 문자열 함수 , 수치함수 , 시스템 함수

연관된 표준 헤더 파일 함수원형 , 매크로 정의 , 자주 사용하는 자료형 , 구조체 ,

상수 등을 포함

Page 4: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 4

문자 처리 함수 문자 처리 함수 역할

하나의 문자를 변환 또는 검사하며 , 문자나 숫자를 입력받아 판별한 결과를 반환

함수 결과가 참인 경우에는 0 아닌 숫자 , 그렇지 않으면 0 을 반환

문자 처리 함수 종류 문자 검사 함수

isalnum( ), isalpha( ), isascii( ), iscntrl( ), isdigit( ), islower( ), isprint( ), ispunct( ), isspace( ), isupper( ) 등

문자 변환 함수 tolower( ), toupper( ) 등

필요한 헤더 파일 <ctype.h>

Page 5: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 5

문자 처리 관련 함수들

헤더 파일 기능 관련함수

stdio.h 표준 입출력 printf( ), scanf( ), getchar( ), fopen( ), fseek( ), ...

string.h 메모리와 문자열의 처리 strcat( ), strcmp( ), strcpy( ), strlen( ), ...

ctype.h 문자 검사 및 변환 isalnum( ), isalpha( ), isgrpah( ), tolower( ), ...

math.h삼각함수 , 지수 , 절대값 함수 등의

수학sin( ), cos( ), tan( ), log( ), exp( ),

fmod( ), sqrt( ), abs( ), ...

stdlib.h 메모리 동적 할당 , 가상 난수 발생 , 문자열 변환

malloc( ), rand( ), strtod( ), atlf( ), ...

alloc.h 메모리 할당에 관련된 함수 calloc( ), free( ), malloc( ), ...

time.h 날짜와 시간 그리고 내부 클락 clock( ), ctime( ), asctime( ), ftime( ), time( ), getdata( ), ...

graphics.

h선 , 박스 그리기 등의 그래픽 initgraph( ), putpixel( ), linerel( ),

rectangle( ), ...

Page 6: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 6

문자 처리 함수들의 기능

함수명 기능 반환 값isalnum(int

c) 문자 c가 영문자 또는 숫자인가를 판별 영문자 또는 숫자이면 0아닌 숫자

isalpha(int c) 문자 c가 영문자인가를 판별 영문자이면 0아닌 숫자

isascii(int c) 문자 c가 아스키문자인가를 판별 아스키이면 0아닌 숫자

iscntrl(int c) 문자 c가 제어문자인지를 판정 제어문자이면 0아닌 숫자

isdigit(int c) 문자 c가 숫자인지를 판정 숫자이면 0아닌 숫자

islower(int c) 문자 c가 소문자인지를 판정 소문자이면 0아닌 숫자

isprint(int c)

문자 c가 공백 이외의 인쇄 가능 문자인지를 판정 인쇄 가능 문자이면 0아닌 숫자

ispunct(int c) 문자 c가 구두점 (. , " ...)인지를 판정 구두점이면 0아닌 숫자

isspace(int c)

문자 c가 공백문자 (탭 , 공백 )인지를 판정 공백문자이면 0아닌 숫자

isupper(int c) 문자 c가 대문자이면 참 대문자이면 0아닌 숫자

tolower(int c) 문자 c를 소문자로 변환 문자 c의 소문자

toupper(int c) 문자 c를 대문자로 변환 문자 c의 대문자

Page 7: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 7

문자 처리 함수 예제 11.1

자판으로부터 입력되는 문자가 숫자인지를 판별하는 프로그램을 작성하시오 .

프로그램 결과

#include <ctype.h> /* 헤드파일 */#include <stdio.h>main(){

char ch; /* 변수 선언 */ch=getchar();if(isdigit(ch)) printf("%c is a number\n", ch);else printf("%c is not a number\n", ch);

}

1111 is a numberaa is not a number

Page 8: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 8

문자 처리 함수 예제 11.2

자판으로부터 입력되는 문자가 영문자인가를 판별하는 프로그램을 작성하시오 .

프로그램 결과

#include <ctype.h>#include <stdio.h> /* 헤드파일 */main(){

char ch; /* 변수 선언 */printf(" 문자나 숫자를 입력하시오 \n");ch=getchar(); /* 문자 입력 함수 */if(isalpha(ch)) /* 영문자 판별 함수 */

printf("%c is alpha character\n", ch);else

printf("%c is not alpha character\n", ch);}

aa is alpha character55 is not alpha character

Page 9: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 9

문자 처리 함수 예제 11.3

자판으로부터 입력되는 문자가 소문자인지를 판별하는 프로그램을 작성하시오 .

프로그램 결과

#include <ctype.h>#include <stdio.h> /* 헤드파일 */main(){ char ch; printf(" 문자를 입력하시오 \n"); ch=getchar(); /* 문자 입력 함수 */ if(islower(ch)) /* 소문자 판별 함수 */

printf("%c is lower alpha character\n", ch); else

printf("%c is not lower alpha character\n", ch);}

qQ is lower alpha characterQQ is not lower alpha character

Page 10: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 10

문자 처리 함수 예제 11.4 자판으로부터 입력되는 소문자를 대문자로 ,

대문자를 소문자로 변환하는 프로그램을 작성하시오 . 프로그램 결과

#include <ctype.h>#include <stdio.h>main(){

char ch,ch1,ch2; /* 변수 선언 */printf(" 문자를 입력하시오 \n");ch=getchar(); /* 문자 입력 함수 */if(isupper(ch)) /* 대문자 판별 함수 */{ printf("%c is a uppercase\n", ch); ch1=tolower(ch); /* 대문자를 소문자로 변환 함수 */ printf("%c is a lowercase\n", ch1);}else if(islower(ch)) /* 소문자 판별 함수 */{ printf("%c is a lowercase\n", ch); ch2=toupper(ch); /* 소문자를 대문자로 변환 함수 *

/ printf("%c is a uppercase\n", ch2);}else printf("%c is not alpha character\n", ch);

}

AA is a uppercasea is a lowercasekk is a lowercaseK is a uppercase77 is not alpha character

Page 11: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 11

문자열 처리 함수 문자열 처리 함수 역할

문자열을 조작하거나 복사 , 연결 , 비교 , 검출하는 기능을 제공

문자열 처리 함수 종류 strlen( ) 함수 : 문자열의 수를 보여줌 strcpy( ) 함수 : 문자열을 복사함 strcmp() : 두 문자열을 비교함 기타

문자 처리 함수 종류 <string.h>

Page 12: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 12

문자열 처리 함수들함수명 형식 기능

strlen() unsigned strlen(const char *str) str 의 문자열 길이를 반환

strcat() char *strcat(char *str1, const char *str2)

str1 의 문자열에 str2 의 문자열을 연결

strncat() char *strncat(char *str1, const char *str2, unsigned c)

str1 의 문자열에 str2 문자열의 선두 c 개의 문자를 연결

strcmp() char *strcmp(char *str1, const char *str2)

str1 의 문자열과 str2 를 서로 부호없는 비교str1>str2 이면 양수값 반환str1<str2 이면 음수값 반환str1=str2 이면 0 을 반환strncmp() char *strcpy(char *str1, const char *s

tr2, unsigned c)str1 문자열의 선두 c 개의 문자와 str2 의 문자열을 비교

strcpy() char *strcpy(char *str1, const char *str2, unsigned c)

str1 의 문자열에 str2 의 문자열을 복사

strncpy() char *strncpy(char *str1, const char *str2, unsigned c)

str1 의 문자열에 str2 문자열의 선두 c 개의 문자를 복사

strstr() char *strrstr(const char *str1 const char *str2)

str1 의 문자열에서 str2 의 문자열을 출력

strerror() char *strerror(int num) 오류번호 num 를 받아 해당하는 오류메시지를 반환

strpbrk() char *strpbrk(char *str1, const char *str2)

지정한 str1 의 문자열에서 str2 의 문자열에 포함된 어떤 문자를 찾고 위치의 포인터를 반환

strrchr() char *strrchr(const char *str, int c) 문자열 str 의 끝 문자부터 시작하여 전방으로 진행하면서 문자 c 를 찾아 그 위치의 포인터를 반환

Page 13: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 13

문자열 처리 함수들 ( 계속 )

함수명 형식 기능

strcspn() char *strcspn(char *str1, const char *str2)

str1 의 문자열에서 str2 의 문자열에 포함된 문자가 첫 번째 나타날 때까지의 문자수

strspn() char *strspn(char *str1, const char *str2)

str1 의 문 자 열 에 서 str2 의 문 자 열 에 포 함 되 지 않 은 문 자 가 첫 번 째 나 타 날 때까지의 문자수

strtok() char *strtok(char *str1, const char *str2)

분리 기호로 의미하는 str2 의 각 문자를 이용하여 str1 의 문자열를 의미있는 단위로 분리

strupr() char *strupr(char *str) 지정한 str 의 문자열 중 소문자를 대문자로 변환

Page 14: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 14

문자열 처리 함수 예제 11.5

문자열 “ UNIVERSITY“ 을 복사하고 , 길이를 구하는 프로그램을 작성하시오 .

프로그램 결과

#include <stdio.h> /* 헤드파일 */#include <string.h> main( ) /* 함수이름 */{

int len; /* 변수 선언 */char s[20]; /* 배열 선언 */strcpy(s, "CHEONAN UNIVERSITY");/* 문자열복사함수 */printf("%s\n\n", s);/* 출력함수 */len = strlen(s);printf("%d\n\n", len);/* 문자열길이함수 */

}

CHEONAN UNIVERSITY 18

Page 15: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 15

문자열 처리 함수 예제 11.6

자판으로부터 입력되는 두 문자열을 연결하는 프로그램을 작성하시오 .

프로그램 결과

#include <string.h> /* 헤드파일 */#include <stdio.h>main() /* 함수이름 */{

char str1[20], str2[20];/* 배열 선언 */printf("Enter two strings :\n ");scanf("%s",str1);/* 문자열 입력함수 */scanf("%s",str2);/* 문자열 입력함수 */strcat(str1, str2);/* 문자열 연결함수 */printf("%s\n",str1);

}

Enter two string : CheonanUniversityCheonanUniversity

Page 16: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 16

문자열 처리 함수 예제 11.7 문자열“ this is a test sentence” 에서 문자열 “ sen

tence“ 만 화면에 출력하는 프로그램을 strstr() 함수를 이용하여 작성하시오 .

프로그램 결과

#include <string.h>#include <stdio.h> main(){

char *p, *str1="This is a test sentence";char *str2 ="se";p=strstr(str1, str2);/* str1 의 문자열에서 str2 의 문자열을 출력 */printf("%s\n",p);

}

sentence

Page 17: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 17

문자열 처리 함수 예제 11.8 자판으로부터 입력되는 문자열이 "login" 이면

“ success” 를 , 다른 문자열일 경우에는 “ failure” 를 화면에 출력하는 프로그램을 작성하시오 .

프로그램 결과#include <string.h>#include <stdio.h>main(){

char pass[20];/* 배열 선언 */printf("Enter password : \n");scanf("%s", pass);if(strcmp(pass,"login")) /* 문자열 비교함수 */

printf("Failure\n");else

printf("Success\n");}

Enter password : testFailureloginSuccess

Page 18: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 18

문자열 처리 함수 예제 11.9 문자열 “ March. 30, 2002” 에서 문자 '.', ',' 가 포함되어 있는

지를 확인하고 , 어느 하나라도 찾게 될 경우 첫 번째 문자의 위치를 가리키는 포인터 값을 구하는 프로그램을 strpbprk() 함수를 이용하여 작성하시오 .

프로그램 결과

#include <stdio.h>#include <string.h> main(){

char *ptr;char *str1 ="March. 30, 2002";char *str2 = ".,";ptr=strpbrk(str1, str2); /* 지정한 str1 의 문자열에서 str2 의 문자열에 포함된

어 떤 문자를 찾고 위치의 포인터 반환 함수 */printf("point = %d \n", ptr);printf("char = %c \n", *ptr);

}

point = 4325421char = .

Page 19: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 19

문자열 처리 함수 예제 11.10 문자열“ March. 30, 2002” 에서 끝 문자부터 시작하여

전방으로 진행하면서 문자 ‘ .’ 를 찾아 첫 번째 나타나는 위치 포인터 값을 구하는 프로그램을 strrchr() 함수를 이용하여 작성하시오 .

프로그램 결과#include <stdio.h>#include <string.h> main(){

char *ptr;char *str1 ="March. 30, 2002";char ch1 = '.';ptr=strrchr(str1, ch1);/* 지정한 str1 의 문자열에서 ch1 의 문자를 찾아 그

위치 의 포인터 반환 함수 */printf("point = %d \n", ptr);printf("char = %c \n", *ptr);

}

point = 4325441char = .

Page 20: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 20

문자열 처리 함수 예제 11.11 문자열“ March.30, 2002” 에서 문자 ‘ .’ 가 첫 번째 나타날

때까지의 문자수를 화면에 출력하는 프로그램을 strcspn() 함수를 이용하여 작성하시오 .

프로그램 결과

#include <stdio.h>#include <string.h> main(){

int len;char *str1 ="March. 30, 2002";char *str2 = ".";len=strcspn(str1, str2);

/*str1 의 문자열에서 str2 의 문자열에 포함된 문자가 첫 번째 나타날 때까지의 문자수 출력 함수 */

printf("length = %d \n", len); }

length = 5

Page 21: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 21

기억장치 관리 함수

기억장치 함수 역할 컴퓨터의 기억공간을 할당 , 해제 , 주소값을 반환하는 기능을 수행

동적 메모리 할당 (Dynamic Memory Allocation) 프로그램을 진행하는 도중에 필요에 따라서 메모리를 할당하는 것 포인터와 연계하여 사용

기억장치 함수 종류 malloc( ) 와 calloc( )

지정한 기억 공간의 메모리의 크기만큼을 할당하여 반환 free( )

가능한 재생을 위해 미리 할당된 기억 공간을 해제하며 , 그 공간은 힙으로 반송 malloc(size)

size 바이트의 기억공간 블록을 할당하고 , 성공적으로 호출할 경우에는 기억공간의 주소를 반환

calloc( n, size) n 개인 배열을 위해 연속된 기억공간을 할당 malloc() 과 차이점 : 할당하고 난 후 메모리를 0 으로 초기화

필요한 헤더 파일 <stdlib.h> 와 <alloc.h>

Page 22: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 22

기억 장치 관리 함수의 형식과 기능

함수명 형식 기능

calloc() void *malloc(unsigned n, unsigned size)

size 바이트 크기의 n 개 기억공간을 확보한 후 그 내용을 0 으로 초기화

malloc() void *malloc(unsigned size) size 만 큼 의 바 이 트 에 해 당 하 는 기 억 공 간 을 할 당 하 고 , 그 것 에 대 한 포인터를 반환

free() void *free(void *ptr) ptr 로 지정된 기억공간을 사용할 수 있도록 해제

realloc() void *realloc(void *ptr, unsigned size)

ptr 로 지정된 기억공간을 size 크기로 다시 변경

Page 23: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 23

기억장치 관리 함수 예제 11.12 10 바이트의 기억 공간을 확보하여 "Hello" 문자열에 할당하고

출력하는 프로그램을 작성하시오 . 프로그램 결과#include <stdio.h>#include <string.h>#include <malloc.h>#include <process.h>int main(void){

char *str;if ((str = (char *) malloc(10)) == NULL) /* 문자열에 메모리 할당 */{

printf(" 메모리 할당 실패 \n");exit(1);

/* 메모리가 부족한 경우 프로그램 밖으로 */}

strcpy(str, "Hello");/* "Hello" 문자열을 str 에 복사 함수 */printf("String is %s\n", str); /* 출력 함수 */free(str); /* 메모리 사용 해제 함수

*/return 0;

}

String is Hello

Page 24: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 24

기억장치 관리함수 예제 11.13 5 개의 변수에 대해 128 바이트 기억 공간을 확보하고 , 만약

기억 공간을 할당받지 못할 경우 “메모리 할당 실패” 메시지와 함께 프로그램에서 빠져나오고 , 할당받을 경우에는 한 문자열을 자판을 통해 입력할 수 있는 프로그램을 작성하시오 .

프로그램 결과

#include <stdlib.h>#include <stdio.h> int main(void){

char *str[5];int i;for(i=0; i<5; i++){ if((str[i] = malloc(128))==NULL)

{ printf(" 메모리 할당 실패 \n"); exit(0);}

printf(" 메모리 할당 성공 , 문자열 [%d] 을 입력하시오 . \n", i+1);gets(str[i]);} for (i=0; i<5; i++)free(str[i]);

}

메모리 할당 성공 , 문자열 [1] 을 입력하시오 .cheonan메모리 할당 성공 , 문자열 [2] 을 입력하시오 .university메모리 할당 성공 , 문자열 [3] 을 입력하시오 .information메모리 할당 성공 , 문자열 [4] 을 입력하시오 .communication메모리 할당 성공 , 문자열 [5] 을 입력하시오 .engineering

Page 25: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 25

자료 변환 처리 함수 자료 변환 처리 함수 역할

문자열을 변환 문자를 사용하여 편집하거나 , 수치 자료로 변환하는 기능을 제공

함수 결과가 참인 경우에는 0 아닌 숫자 , 그렇지 않으면 0 을 반환

자료 변환 처리 함수 종류 문자 검사 함수

isalnum( ), isalpha( ), isascii( ), iscntrl( ), isdigit( ), islower( ), isprint( ), ispunct( ), isspace( ), isupper( ) 등

문자 변환 함수 tolower( ), toupper( ) 등

필요한 헤더 파일 <stdlib.h>

Page 26: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 26

자료 변환 처리 함수의 형식과 기능함수명 형식 기능

atoi() int atoi(const char *str) str 의 문자열을 int 형 정수로 변환

atol() int atol(const char *str) str 의 문자열을 long 형 정수로 변환

atof() double atof(const char *str) str 의 문자열을 double 형 실수로 변환

itoa() char *itoa(const int val, char *str, int rad)

정수 val 를 문자열로 변환하여 str에 저장

qsort() void qsort(void *base, unsigned num, unsigned size, int(*compare)(const void

*, const void*))

quick sort 방식으로 compare가 가리키는 비교 함수를 이용하여

데이터를 정렬

bsearch() void *bsearch(const void *key,const void *base, unsigned num, unsigned size, int(*compare)(const void *, const void

*))

정렬된 base 의 size 개의 원소 중에서 key 로 지정한 원소를 이진

검색 방법으로 검색

Page 27: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 27

자료변환 처리 함수 예제 11.14

자판으로부터 두 문자열을 입력받고 , 이것을 double 형 실수로 변환하여 합하는 프로그램을 작성하시오 .

프로그램 결과

#include <stdlib.h>#include <stdio.h>main(){

char num1[80], num2[80];

printf("Enter first: \n");gets(num1); /* 문자열을 입력 함수 */printf("Enter second: \n");gets(num2);printf("The sum is : %f\n", atof(num1)+atof(num2));

/* num1 과 num2 의 문자열을 double 형 실 수로 변환하는 함수 */}

Enter first: 23Enter second:35The sum is : 58.000000

Page 28: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 28

자료변환 처리 함수 예제 11.15

자판으로부터 두 문자열을 입력받고 , 이것을 int형 정수로 변환하여 합하는 프로그램을 작성하시오 .

프로그램 결과

#include <stdlib.h>#include <stdio.h> int main(void){

char num1[80], num2[80];

printf("Enter first: \n");gets(num1);printf("Enter second: \n");gets(num2);printf("The sum is : %d \n", atoi(num1)+atoi(num2));

/* num1 과 num2 의 문자열을 정수로 변환하는 함수 */}

Enter first: 23Enter second:35The sum is : 58

Page 29: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 29

자료변환 처리 함수 예제 11.16

자판으로부터 두 문자열을 입력받고 , 이것을 long형 정수로 변환하여 합하는 프로그램을 작성하시오 .

프로그램 결과

#include <stdlib.h>#include <stdio.h> int main(void){

char num1[80], num2[80];

printf("Enter first: \n");gets(num1);printf("Enter second: \n");gets(num2);printf("The sum is : %d \n", atol(num1)+atol(num2));

/* num1 과 num2 의 문자열을 long 형 정수 로 변환하는 함수 */}

Enter first: 2300000Enter second:3500000 The sum is : 5800000

Page 30: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 30

산술 ( 수학 ) 함수 산술 함수 역할

계산 프로그램을 할 때 사용할 수 있도록 지원 산술 함수 종류

문자 검사 함수 isalnum( ), isalpha( ), isascii( ), iscntrl( ), isdigit( ), islower(

), isprint( ), ispunct( ), isspace( ), isupper( ) 등 문자 변환 함수

tolower( ), toupper( ) 등 필요한 헤더 파일

<math.h>

Page 31: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 31

산술 함수함수명 형식 기능

sin(x) double sin(double x) sine 함수 제공

cos(x) double cos(double x) cosine 함수 제공

tan(x) double tan(double x) tangent 함수 제공

fmod(x) double fmod(double x, double y)

double 형 부동소수점수를 x/y 한 나머지

log(x) double log(double x) 자연대수 log x 제공

1og10(x) double log10(double x)

상용대수 log10 x 제공

exp(x) double exp(double x) 지수함수 제공

asin(x) double asin(double x) arch sine 함수 제공

acos(x) double acos(double x) arch cosine 함수 제공

atan(x) double atan(double x) arch tangent 함수 제공

pow(x,y) double pow(double x, double y)

x 를 y 승

sqrt(x) double sqrt(double x) 양의 제곱근 SQRT { x}

Page 32: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 32

산술 함수 ( 계속 )

함수명 형식 기능

abs(x) int abs(int x) x 의 절대값 제공

floor double floor(double x, double y)

부동 소수점 x 의 소수점 이하를 전달하여 버린 수

ceil double ceil(double x) 부동 소수점 x 의소수점 이하를 올림한 수를 구함 .

rand() int rand() 0 에서 32767 사이의 연속적인 난수 제공

srand() void srand(unsigned seed) 난수 발생 함수의 난수 발생 시작 값 seed 을 변경하여

설정

Page 33: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 33

산술 함수 예제 11.17

자판으로부터 입력하는 정수 (x) 의 제곱근을 구하는 프로그램을 작성하시오 .

프로그램 결과

#include <math.h>#include <stdio.h>main(){

int x;double y;

printf("Input data : \n");scanf("%d",&x);

y = sqrt(x);printf(" Square root of x = %f",y);

}

Input data :16Square root of x = 4

Page 34: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 34

산술 함수 예제 11.18 1 에 서 1 까 지 값 에 대 한 sine, cosine,

tangent 값 을 출 력 하 는 프 로 그 램 을 작성하시오 .

프로그램 결과#include <math.h>#include <stdio.h> main(){

double val = -1.0;do { printf("sine of %f is %f\n", val, sin(val));

/* sine 함수 */ printf("cosine of %f is %f\n", val, cos(val));

/* cosine 함수 */ printf("tangent of %f is %f\n", val, tan(val));

/* tangent 함수 */ val += 1;} while(val <= 1.0);return 0;

}

sine of -1.000000 is -0.841471cosine of -1.000000 is 0.540302tangent of -1.000000 is -1.557408sine of -0.000000 is -0.000000cosine of -0.000000 is 1.000000tangent of -0.000000 is -0.000000sine of 1.000000 is 0.841471cosine of 1.000000 is 0.540302tangent of 1.000000 is 1.557408

Page 35: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 35

산술 함수 예제 11.19 1 에 서 1 까 지 값 에 대 한 arc sine,

cosine, tangent 값 을 출 력 하 는 프로그램을 작성하시오 .

프로그램 결과#include <math.h>#include <stdio.h> main( ){ double val=1.0; do { printf("value[%f] arc sine[%f] \n", val, asin(val));

/* arch sine 함수 */printf(" arc cosine[%f] \n", acos(val));

/* arch cosine 함수 */printf(" arc tangent[%f]\n", atan(val));

/* arch tangent 함수 */ val-= 1; } while(val>=-1.0);}

value[1.000000] arc sine[1.570796] arc cosine[0.000000] arc tangent[0.785398]value[0.000000] arc sine[0.000000] arc cosine[1.570796] arc tangent[0.000000]value[-1.000000] arc sine[-1.570796] arc cosine[3.141593] arc tangent[-0.785398]

Page 36: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 36

산술 함수 예제 11.20 1 에서 1 까지 값에 대한 log x 의 자연 대수와

log10 의 상 용 대 수 를 구 하 는 프 로 그 램 을 작성하시오 .

프로그램 결과#include <math.h>#include <stdio.h> main( ){

double val=1.0;

do{ printf(" value[%f] log[%f]", val, log(val)); printf(" log10[%f]\n", log10(val)); val++;}while (val<11.0);

}

value[1.000000] log[0.000000] log10[0.000000] value[2.000000] log[0.693147] log10[0.301030] value[3.000000] log[1.098612] log10[0.477121] value[4.000000] log[1.386294] log10[0.602060] value[5.000000] log[1.609438] log10[0.698970] value[6.000000] log[1.791759] log10[0.778151] value[7.000000] log[1.945910] log10[0.845098] value[8.000000] log[2.079442] log10[0.903090] value[9.000000] log[2.197225] log10[0.954243] value[10.000000] log[2.302585] log10[1.000000]

Page 37: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 37

산술 함수 예제 11.21

자 판 에 서 입 력 된 수 를 절 대 값 을 구 하 는 프로그램을 작성하시오 .

프로그램 결과

#include <math.h>#include <stdio.h> main( ){

int a, b;printf(" 숫자를 입력하시오 .\n");scanf("%d",&a);b=abs(a);printf("|%d| = %d\n",a,b);

}

숫자를 입력하시오 .-31|-31| = 31

Page 38: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 38

산술 함수 예제 11.22

자 판 에 서 입 력 된 수 를 seed 값 으 로 하 여 난수를 구하는 프로그램을 작성하시오 .

프로그램 결과#include <stdio.h>#include <stdlib.h> void main( ){

int i,a;scanf("%d",&a);srand(a); /* 난수 발생 함수의 난수 발생 시작 값

seed 을 설정하는 함수 */

for(i=1;i<=5;i++)printf("%d\n",rand());

/* 0 에서 32767 사이의 연속 적인 난수 제공하는 함수 */}

351522346523892254539417

Page 39: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 39

시간 관련 함수

시간 함수 역할 시스템의 시간이나 그리니치 표준 시간 ,

날짜 등을 얻고자 할 경우 사용되는 함수 시간 함수 종류

localtime(), gmtime(), ctime(), difftime( ), ftime()

필요한 헤더 파일 <time.h>

Page 40: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 40

시간 관련 함수함수명 형식 기능

localtime() struct tm *localtime(const time_t *t)

time() 함수에 의해 구한 시간을 시스템의 현재 시간으로 저장

gmtime() struct tm *gmtime(const time_t *t)

time() 함수에 의해 구한 시간을 그리니치 표준시간으로 저장

ctime() char *ctime(const time_t *t)

time() 함수를 이용하여 구한 시스템 시간 t 를 현재 시간으로 표시할 수 있는 문자열로 변환

difftime( ) double difftime(time_t t1, time_t t2)

time() 함수에 의해 구한 시간 t1 과 t2 간의 시간 차이를 초로 계산

ftime void ftime(struct timeb *buf)

tzset() 함수를 호출하여 현재 시간을 buf 에 의해 지정된 구조체 timeb 의 각 필드에 저장

Page 41: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 41

시간 관련 함수 예제 11.23

ctime() 함 수 를 이 용 하 여 현재 시 간 을 문자열로 출력하는 프로그램을 작성하시오 .

프로그램 결과

#include <time.h>#include <stdio.h> void main( ){

time_t t;t=time(NULL);printf("Today's data and time : %s\n",ctime(&t));

}

Today's data and time : Tue Jan 14 15:58:25 2003

Page 42: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 42

시간 관련 함수 예제 11.24 localtime() 함수를 이용하여 시스템의 현재 시간을

출력하는 프로그램을 작성하시오 . 프로그램 결과

#include <time.h>#include <stdio.h> int main(void){

struct tm *ptr;time_t lt;

lt = time(NULL);ptr = localtime(&lt);printf(asctime(ptr));

}

Tue Jan 14 15:59:02 2003

Page 43: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 43

시간 관련 함수 예제 11.25 localtime() 와 gmtime() 함 수 를 이 용 하 여 현지

시간과 그리니치 표준시간을 출력하는 프로그램을 작성하시오 .

프로그램 결과#include <time.h>#include <stdio.h> int main(void){ struct tm *local, *gm; time_t t;

t = time(NULL); local = localtime(&t); printf("Local time and data: %s", asctime(local)); gm = gmtime(&t); printf("Greenwich mean time and data: %s", asctime(gm)); }

Local time and data: Tue Jan 14 15:59:49 2003Greenwich mean time and data: Tue Jan 14 06:59:49 2003

Page 44: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 44

실습 문제 1 isalpha() 함수를 이용하여 알파벳 대 / 소문자를 ,

isdigit() 와 ispunct( ) 함수를 이용하여 숫자와 특수 문자를 출력하는 프로그램을 작성하시오 .

프로그램 결과

#include <stdio.h>#include <ctype.h>main() {

int c; printf("\n isalpha : \n"); for(c=0;c<127;c++)

if(isalpha(c))putchar(c); printf("\n isdigit :\n"); for(c=0;c<127;c++) if(isdigit(c))putchar(c); printf("\n ispunct :\n"); for(c=0;c<127;c++) if(ispunct(c))putchar(c);

}

isalpha :ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz isdigit :0123456789 ispunct :!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~Press any key to continue

Page 45: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 45

실습 문제 2 너 의 이 름 과 암 호 를 입 력 할 때 만 약 틀 린 경 우 “ invalid

password” 메시지를 , 성공하면 “ success" 메시지를 출력하는 프로그램을 작성하시오 .

프로그램 결과#include <stdio.h>#include <string.h>main(){ char a[30],b[30],pass[10],s1[15],s2[15]; printf("/* strcat() = string1 + string 2 */\n\n"); printf("Your first name :"); gets(a); printf("Your last name:"); gets(b); printf("\n\n Your name = first name + last name =%s \n",strcat(a,b)); printf("\n\n/* strcmp() = compare string1 with string2 */ \n"); printf("\n\nif your password is....lee123 \n"); do{ printf("Your Password : "); gets(pass); if(strcmp(pass,"lee123")) printf("invalid password\n"); else break; } while(1); printf("\n success"); printf("\n /* strcpy(s1,s2) = Copy s2 to s1 */ \n"); printf("input memo :"); gets(s2); strcpy(s1,s2); printf("s1 = %s\n",s1);}

/* strcat() = string1 + string 2 */ Your first name: lee Your last name: sunsin sYour name = first name + last name = leesunsin /* strcmp() = compare string1 with string2 */ if your password is....h6614 Your Password : kjhjkhk invalid password Your Password : lee123 success /* strcpy(s1,s2) = Copy s2 to s1 */ input string s2 : I'm a student ! s1 = I'm a student !

Page 46: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 46

실습 문제 3

산 술 함 수 를 이 용 하 여 0, 15, 30, 45, 60, 75, 90 에 대 한 sine, cosine, tangent 값을 구하고 , 자판으로 입력된 값에 대해 제곱근 , 자승 , log 값을 구하는 프로그램을 작성하시오 .

Page 47: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 47

#include <stdio.h>#include <conio.h>#include <math.h>#define Pi 3.141592void main(){ int a,b; float x,y,p,lo; clrscr(); printf(" x \t sin(x) cos(x) tan(y)\n"); for(x=0;x<=90;x=x+15){ y = x*Pi/180; printf("%6.2f %12.5f %12.5f %12.5f \n",x,sin(y),

cos(y),tan(y)) } printf("\t Press any key......."); getch(); printf("\n *** Root ***\n"); printf("input(x) : "); scanf("%f",&p); printf("sqrt( %f ) = %f\n\n",p,sqrt(p)); printf(" *** a^b *** \n"); printf("input( a , b) :"); scanf("%d %d",&a,&b); printf(" %d ^ %d = %f\n\n",a,b,pow(a,b)); printf(" *** log10(x) *** \n"); printf("input(x) :"); scanf("%f",&lo); printf("log10(%f) = %f\n",lo,log10(lo)); printf("\t Press any key......."); getch(); }

x sin(x) cos(x) tan(y) 0.00 0.00000 1.00000 0.00000 15.00 0.25882 0.96593 0.26795 30.00 0.50000 0.86603 0.57735 45.00 0.70711 0.70711 1.00000 60.00 0.86603 0.50000 1.73205 75.00 0.96593 0.25882 3.73205 90.00 1.00000 0.00000 3185560.70806 Press any key....... *** Root *** input(x) : 16 sqrt( 16.000000 ) = 4.000000 *** a^b *** input( a , b) : 2 5 2 ^ 5 = 32.000000 *** log10(x) *** input(x) : 100 log10(100.000000) = 2.000000 Press any key.......

•프로그램 결과

Page 48: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 48

실습 문제 3

2 차 방정식 ax2 + bx + c = 0 에서 a, b, c 를 입력받아 그 근을 구하는 함수 root() 를 작성하시오 . 이때 무한루프를 이용하고 ‘ q' 를 치면 루프를 빠져나가도록 작성하시오 .

m = b * b - 4 * a * c if m < 0 허근 m = 0 중근 m > 0 서로 다른 두 근

Page 49: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 49

#include <stdio.h>#include <conio.h>#include <math.h> root(int a, int b, int c) { int m;

float y,y1,y2; m = b*b - 4*a*c;

printf("a=%d b=%d c=%d m=%d\n",a,b,c,m); if(m < 0)

printf(" root is non\n"); else if(m == 0)

{ y = (-b + sqrt(m) )/(2*a);printf(" y = %f \n",y);}else{ y1 = (-b + sqrt(m) )/(2*a); y2 = (-b - sqrt(m) )/(2*a); printf(" y1 = %f \n",y1); printf(" y2 = %f \n",y2);}

} void main() {

int a,b,c,z; printf("2 차 방정식 근 구하기 \n");

do{ printf("\ninput(a,b,c) :"); scanf("%d%d%d",&a,&b,&c); root(a,b,c); printf("press any key...or 'q' to exit"); c=getchar(); c=getchar(); }while(c != 'q');

}

2 차 방정식 근 구하기 input(a,b,c) : 2 5 3 a=2 b=5 c=3 m=1 y1 = -1.000000 y2 = -1.500000 press any key...or 'q' to exit input(a,b,c) : 1 -4 4a=1 b=-4 c=4 m=0y = 2.000000 press any key...or 'q' to exit input(a,b,c) : 2 3 4a=2 b=3 c=4 m=-23 root is nonpress any key...or 'q' to exit input(a,b,c) : 1 5 6 a=1 b=5 c=6 m=1 y1 = -2.000000 y2 = -3.000000 press any key...or 'q' to exit q

•프로그램 결과

Page 50: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 50

실습 문제 3

bioskey() 함수를 이용한 프로그램이다 . 키보드에서 키를 입력하면 그 키를 출력해주고 Ctrl + 키 , Alt + 키 , Shift + 키 를 입 력 하 여 도 이 를 인 식하 여 출력하는 프로그램을 작성하시오 .

Page 51: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 51

#include <stdio.h> #include <bios.h> #include <ctype.h> #define RIGHT 0x01 #define LEFT 0x02 #define CTRL 0x04 #define ALT 0x08 int main(void) {

int key, modifiers;/* function 1 returns 0 until a key is pressed */ while (bioskey(1) == 0);/* function 0 returns the key that is waiting */ key = bioskey(0);

/* use function 2 to determine if shift keys were used */ modifiers = bioskey(2); if (modifiers) {

printf("[");if (modifiers & RIGHT) printf("RIGHT");if (modifiers & LEFT) printf("LEFT");if (modifiers & CTRL) printf("CTRL");if (modifiers & ALT) printf("ALT");printf("]");

} /* print out the character read */ if (isalnum(key & 0xFF))

printf("'%c'\n", key); else

printf("%#02x\n", key); return 0;

}

• 프로그램

Page 52: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 52

연습 문제 I

1. 문자열 “ information” 과 “ communication” 을 두 개의 포인터 변수에 각 각 저 장 하 고 , 두 문 자 열 을 합하 는 출 력 하 는 프 로 그 램 을 작성하시오 .

2. 자판으로부터 입력되는 대문자와 소문자를 판별하여 대문자인

경우에는 “ uppercase", 소문자일 때에는 ” lowercase" 를 출력하는 프로그램을 작성하시오 .

3. 문자열“ The first snow fell in november” 에서 끝 문자부터 시작하여

전방으로 진행하면서 문자 ‘ v’ 가 첫 번째 나타나는 위치 포인터 값을 구하는 프로그램을 작성하시오 .

4. "They live in peace with a person" 문자열을 위한 기억 공간을

확보하여 할당하고 출력하는 프로그램을 작성하시오 . 5. 1 에서 10 까지 로그 , 제곱근 , 지수 , 멱 (power) 를 계산하는

프로그램을 작성하시오 .

Page 53: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 53

연습 문제 II

6. 현재 시간과 날짜를 구하는 프로그램을 작성하시오 .

7. difftime(), localtime() 와 gmtime() 함수를 이용하여 현지 시간과 그리니치 표준시간의 차를 출력하는 프로그램을 작성하시오 .

8. 자판으로부터 자신의 식별자 (ID) 와 암호를 입력할 때 만약 식별자가

틀린 경우 “ invalid ID”, 암호가 잘못된 경우에는 “ invalid password” 메시지를 , 성공하면 “ success" 메시지를 출력하는 프로그램을 작성하시오 .

9. 자판으로부터 소문자 / 대문자로 구성된 문자열을 입력하여 모두

대문자로 변환하거나 소문자로 변환하는 프로그램을 작성하시오 .

Page 54: 11 장 표준 라이브러리  (Standard Library)

YES C 제 11 장 표준라이브러리 54

연습 문제 III

10. 문자열 “ the beautiful mind" 에서 단어의 첫 문자만 대문자로 변환하여 출력하는 프로그램을 작성하시오 .

11. 2 차 방정식 ax2 + bx + c = 0 에서 a, b, c 를 입력받아 그 근을

구하는 함수 root() 를 작성하시오 . 이때 무한루프를 이용하고 ‘ q' 를 치면 루프를 빠져나가도록 작성하시오 .

12. 3 명의 주위 학생들의 이름 (3 자까지 허용 ) 을 한글로 입력받아

가나다 순으로 정렬하여 출력하는 프로그램을 작성하시오 . ( 힌트 strcmp( ) 를 이용할 것 )