최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지 수학 관련 함수

Download Report

Transcript 최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지 수학 관련 함수

최신 C 프로그래밍 언어
문제해결에서 프로그래밍까지
개정판
13장 : 표준 라이브러리 함수
도서출판 - 인터비젼
1
13장 표준 라이브러리 함수

학습목표





1.
2.
3.
4.
5.
문자
자료
시간
수학
기타
관련 함수에 대해 알아본다.
변환 관련 함수에 대해 알아본다.
및 날짜 관련 함수에 대해 알아본다.
관련 함수에 대해 알아본다.
자주 사용되는 함수들에 대해 알아본다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
목차

13장 표준 라이브러리 함수
 예습시간
– 표준 라이브러리 함수
– 수학 관련 함수
 실습시간
– 문자, 변환, 시간 관련 함수 활용
– 수학 관련 함수 활용
 연습시간
– 표준 라이브러리 함수 응용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
3
예습시간 – 1 교시
표준 라이브러리 함수
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4
표준 라이브러리 함수

학습 개요
 표준 라이브러리 파일들을 정리한다.
 문자, 자료 변환 함수에 대해 알아본다.
 시간 관련 함수들에 대해 알아본다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
5
표준 라이브러리 함수

표준 라이브러리 헤더파일들
 헤더파일의 종류
헤더파일 이름
설명
포함된 함수 종류
입출력 공통 함수
형식화된 입출력 함수
stdio.h
표준입출력
함수
문자 입출력 함수
문자열 입출력 함수
파일 입출력 함수
파일 제어 함수
fopen, fclose, feof, ferror, clearerr
printf, fprintf, sprintf, scanf, fscanf,
sscanf
fgetc, fputc, getc,
putchar, ungetc
getchar,
putc,
gets, puts, fgets, fputs
fread, fwrite, fseek, ftell, rewind
remove, rename, tmpfile, tmpnam
※ 뒷장 계속
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
6
표준 라이브러리 함수
헤더파일 이름
설명
포함된 함수 종류
수학 관련 함수
stdlib.h
string.h
공통
함수
문자열 함
수
메모리 관리 함수
abs, div, labs, ldiv, rand, srand
calloc, free, malloc, realloc
제어 함수
exit, abort, atexit, system
변환 함수
atof, atoi, atol, strtod, strtol, strtoul
문자열 복사
관련 함수
strcpy, strncpy, strcat, strncat, memcpy,
memmove
문자열 비교 함수
strcmp, strncmp, strstr, strpbrk, strchr, strrchr,
memchr, memcmp
문자열 길이 관련 함수
strlen, strspn, strcspn
ctype.h
문자 관련
함수
isalnum, isalpha, iscntrl isdigit, isgraph, islower, isprint, ispunct, isspace,
isupper, isxdigit, tolower, toupper
math.h
수학 관련
함수
ceil, exp, fabs, floor, fmod, frexp, ldexp, log, log10, modf, pow, sqrt, sin
sinh, asin, cos, cosh, acos, tan, tanh, atan, atan2
time.h
시간 관련
함수
clock, time, ctime, asctime, gmtime, localtime, difftime, mktime
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
7
표준 라이브러리 함수

문자 관련 함수
 ctype.h 파일에 정의된 함수
 함수와 함수 원형
함수이름
함수 원형
설명/결과
isalnum
int isalnum(int char_data);
문자가 영문자이거나 숫자인지 검사 참 인 경우
0이 아닌 값을 거짓인 경우 0 값 반환
isalpha
int isalpha(int char_data);
문자가 영문자인가 검사 참일 경우 0이 아닌 값
거짓인 경우 0 값 반환
iscntrl
int iscntrl(int char_data);
문자가 제어문자인가를 검사 참일 경우 0이 아닌
값 거짓인 경우 0값 반환
isdigit
int isdigit(int char_data);
문자가 숫자인지를 검사 참일 경우 0이 아닌 값
을 거짓인 경우 0값 반환
isgraph
int isgraph(int char_data);
공백을 제외한 프린트 가능 문자인지 검사 참일
경우 0이 아닌 값 거짓인 경우 0값 반환
islower
int islower(int char_data);
문자가 소문자 인지를 검사 참일 경우 0이 아닌
값 거짓인 경우 0값 반환
※ 뒷장 계속
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
8
표준 라이브러리 함수

문자 관련 함수 (계속)
함수이름
함수 원형
설명/결과
int isprint(int char_data);
공백을 포함한 프린트 가능 문자인지를 검시 참
일 경우 0이 아닌 값 거짓인 경우 0값 반환
int ispunct(int char_data);
스페이스나 영문자 그리고 숫자가 아닌 프린트
가능 문자인지 검사 참일 경우 0이 아닌 값 거짓
인 경우 0값 반환
isspace
int isspace(int char_data);
스페이스 문자인지를 검사 참인 경우 0이 아닌값
을 거짓인 경우 0값 반환
스 페 이 스 문 자 : 스 페 이 스 (' '), form-feed
('\f'), 뉴 라인 ('\n'), 캐리지 리턴 ('\r'), 수평
탭 ('\t'), 그리고 수직 탭 ('\v') 등을 포함 한다.
isupper
int isupper(int char_data);
문자가 대문자 인지를 검사 참일 경우 0이 아닌
값을 거짓인 경우 0값 반환
isxdigit
int isxdigit(int char_data);
16진수 인지를 검사 참일 경우 0이 아닌 값 거짓
인 경우 0 (16진수: 0~9,A~F)
tolower
int tolower(int char_data);
문자를 소문자로 변환한다. 반환이 가능하지 않
을 경우 입력된 값을 다시 반환
toupper
int toupper(int char_data);
문자를 대문자로 변환한다. 반환이 가능하지 않
을 경우 입력된 값을 다시 반환
isprint
ispunct
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
9
표준 라이브러리 함수

문자 관련 함수 사용 예
 문자 데이터의 입력을 통해 영문자나 숫자인지 판단
 영문자일 경우
– 소문자를 대문자로 , 대문자를 소문자로 변환
 숫자일 경우
– 입력된 숫자 정보 출력
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
10
표준 라이브러리 함수

프로그
램
코드내
용

PG:414
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <ctype.h>
void main(){
char char_data, result;
printf("영문자나 숫자를 입력하시오 : ");
do{
char_data = getchar();
if(!isalnum(char_data)){
printf("영문자나 숫자가 아닙니다. 다시 입력 :");
}
}while(!isalnum(char_data));
if(isalpha(char_data)){
if(isupper(char_data)){
printf("영 대문자를 소문자로 변환 하였습니다.\n");
result = tolower(char_data);
}else if(islower(char_data)){
printf("영 소문자를 대문자로 변환 하였습니다. \n");
result = toupper(char_data);
}
}else if(isdigit(char_data)){
printf("입력된 문자를 숫자 입니다. \n");
result = char_data;
}
printf("입력 문자는 %c 이고 처리 후 결과는 %c 입니다.\n",char_data, result);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
11
표준 라이브러리 함수

자료 변환 함수
 특정 자료형을 다른 자료형으로 변환
 stdlib.h 파일에 정의
 문자나 문자열의 값을 숫자 값으로 변환하기 위해 주로
사용
 자료변환 함수 종류 (뒷장)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
12
표준 라이브러리 함수

자료변환 함수들과 함수원형
함수이름
함수 원형
설명/결과
atoi
int atoi(char *char_num);
문자열 값을 정수(int) 값으로 변환
atol
long atol(char *char_num);
문자열 값을 정수(long) 값으로 변환
atof
double atof(char *char_num);
문자열 값을 실수(double) 값으로 변환
double strtod(char *str, char **next_str)
문자열 입력 받아 실수(double)값으로 변환
str : 입력 문자열
반환 : 입력 문자열에서 첫 번째 실수 값
next_str : 반환 이후 나머지 문자열의 주소
또는 에러 발생시 입력 문자열에서 에러 발생
위치
strtol
long strtol(char *str, char **next_str, int base)
문자열을 입력 받아 정수(long)값으로 변환
str : 입력 문자열
반환 : 입력 문자열의 첫 번째 정수 값
next_str : 정수 값을 제외한 나머지 문자열의
주소 또는 에러 발생시 문자열에서 에러 발생
위치
base : 진법 형식 (2, 8, 10, 16진법)
strtoul
unsigned long strtoul(char *str,
char **next_str, int base)
문자열 입력받아 양의 정수(unsigned long)
값으로 변환. 입력 형식은 strtol과 동일
strtod
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
13
표준 라이브러리 함수

자료변환 함수 사용 예
 01 #include <stdio.h>
 02 #include <stdlib.h>
03 void main(){
 04
char *str = "123.40This is string"; // 숫자와 영문자를 가진 문자열
 05
char *nstr;
 06
double dvalue;
 07
// 실수 값 추출
 08
dvalue = strtod(str,&nstr); // dvalue = atof(str);
 09
printf("실수 값 : %.2lf \n", dvalue);
 10
printf("추출 후 나머지 문자열 : %s \n", nstr);
 }

출력 결과 :


실수 값 : 123.40
추출 후 나머지 문자열 : This is string
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
14
표준 라이브러리 함수

자료 변환 함수 사용 예 (문자숫자)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
void main(){
char *str = "1078aThis is string"; // 숫자와 영문자를 가진 문자열
char *nstr;
long value;
// 실수 값 추출
value = strtol(str,&nstr,10);
printf("정수 값(base 10) : %d \n", value); 출력 결과 :
printf("추출 후 나머지 문자열 : %s \n", nstr);
value = strtol(str,&nstr,2);
정수 값(base 10) : 1078
printf("정수 값(base 2) : %d \n", value);
추출 후 나머지 문자열 : aThis is string
printf("추출 후 나머지 문자열 : %s \n", nstr); 정수 값(base 2) : 2
추출 후 나머지 문자열 : 78aThis is string
value = strtol(str,&nstr,8);
정수 값(base 8) : 71
printf("정수 값(base 8) : %d \n", value);
printf("추출 후 나머지 문자열 : %s \n", nstr); 추출 후 나머지 문자열 : 8aThis is string
정수 값(base 16) : 67466
value = strtol(str,&nstr,16);
추출 후 나머지 문자열 : This is string
printf("정수 값(base 16) : %d \n", value);
printf("추출 후 나머지 문자열 : %s \n", nstr);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
15
표준 라이브러리 함수

시간 관련 함수
 현재의 날짜나 시간 정보 계산 함수
 time.h파일에 정의
함수이름
함수 원형
함수의 종류
설명/결과
clock
clock_t clock(void);
프로그램이 시작 후 경과한 Clock의 수를 반환
time
time_t time(time_t *t);
현재 시간을 조사하여 1970년 1월 1일 자정 이후 경과된
초를 반환 한다.
ctime
char *ctime(time_t *t);
time_t 값 이용해 현재 시간을 문자열로 반환
gmtime
struct tm *gmtime(time_t *t);
time_t 값 이용해 그리니치 표준 시간에 대한 구조체 타입
(struct tm)을 반환한다.
localtime
struct tm *localtime(time_t *t);
time_t 값 이용해 지역 시간에 대한 구조체 타입(struct tm)
을 반환한다.
asctime
char *asctime(struct tm *t);
시간 구조체 타입을 이용해 시간에 대한 문자열 반환
difftime
double difftime(time_t et, time_t st);
두 time_t 값의 차를 초단위로 반환 한다.
et : 종료 시간, st : 시작시간 (반환 : et-st)
mktime
time_t mktime(struct tm *t)
struct tm 구조체 값을 이용해 time_t 값을 반환 한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
16
표준 라이브러리 함수

clock()함수 활용 예





















01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <time.h>
특정 구간의 실행 시간 분석 프로그램
void doanything();
void main(){
long start, end, result;
int i;
start = clock();
클럭 수를 이용한 경과된 초 계산 수식
for(i=0; i< 1000000; i++){
• 경과된 초 = 클럭수 / CLK_TCK
doanything();
}
end = clock();
result = end - start;
result = (long) result / CLK_TCK;
printf("경과 시간은 %d 초 입니다. \n", result);
}
void doanything(){
int i=0;
while(i < 1000){
i++;
}
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
17
표준 라이브러리 함수

time 과 ctime 함수 활용 예
 time 함수
– 시스템의 현재 시간을 얻어옴
– time_t 값 반환 : 1970년 1월 1일 자정 이후 경과된 초
 ctime 함수
– time_t 값을 이용해 현재 시간을 문자열로 변환
 사용 예>
–
–
–
–
–
–
–
01 #include <stdio.h>
02 #include <time.h>
03 void main(){
04
time_t second;
05
second = time(&second); // 또는 second = time(NULL); 가능
06
printf(" time = %ld \n", second);
07
printf(" strtime = %s \n", ctime(&second));
– 08 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
18
표준 라이브러리 함수

gmtime, localtime 그리고 asctime 함수 사용
 gmtime 함수
– struct tm *gmtime(time_t t);
– time_t의 시간 값을 이용해 그리니치 표준 시간에 대한 struct
tm의 구조체 형태의 값 제공
– struct tm 구조체 형식
struct tm {
int tm_sec;
// 초 - [0,59]
int tm_min;
// 분 - [0,59]
int tm_hour;
// 시 - [0,23]
int tm_mday; // 일자 - [1,31]
int tm_mon;
// 1월에서 12월 - [0,11]
int tm_year;
// 1900년 이후부터 경과한 년 (예: 1994년일 경우 94)
int tm_wday; // 일요일에서 토요일 - [0,6]
int tm_yday; // 1월 1일부터 경과된 날짜 - [0,365]
int tm_isdst; // 서머 타임 설정 여부 플러그
};
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
19
표준 라이브러리 함수
 localtime 함수
– struct tm *localtime(time_t t);
– 지역 시간에 대한 struct tm 구조체 값 생성
– 사용형태는 gmtime과 동일
 asctime 함수
– struct tm 구조체 값을 이용해 시간에 대한 문자열 제공
– 반환된 문자열은 총 26자릿수로 구성
– 반환 문자열 구조
D
D
요일
D
M
M
달
M
d
d
날
h
h
시
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
:
m
m
분
:
s
s
초
Y
Y
Y
Y
\n
\0
년도
20
표준 라이브러리 함수

gmtime, localtime 그리고 asctime 함수 사용 예
 프로그램 실행 시의 현지 시간과 표준 시간 출력
프로그램
–
–
–
–
–
–
–
–
–
–
–
01
02
03
04
05
06
07
08
09
10
11
#include <stdio.h>
#include <time.h>
void main(){
time_t second;
struct tm *local, *gt;
second = time(NULL);
local = localtime(&second);
gt = gmtime(&second);
printf(" 현지 시간 = %s \n", asctime(local));
printf(" 표준 시간 = %s \n", asctime(gt));
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
21
예습시간 – 2 교시
수학 관련 함수
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
22
수학 관련 함수

학습 개요
 빈번하게 사용되는 수학 관련 함수들일 알아본다.
 삼각 함수 및 산술 관련 함수들에 대해 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
23
수학 관련 함수

수학 기초 함수
 stdlib.h 파일에 정의된 함수
 절대값, 몫과 나머지 계산 그리고 임의 값 발생 함수 등
 함수의 종류
함수이름
함수 원형
설명/결과
abs
int abs(int x);
입력 x에 대한 절대 값 반환 (int 값 대상)
div
div_t div(int x, int y);
x를 y로 나눈 몫과 나머지를 div_t 타입으로 반환 (int 값
대상)
labs
long labs(long x);
입력 x에 대한 절대 값 반환 (long 값 대상)
ldiv
ldiv_t ldiv(int x , int y);
x를 y로 나눈 몫과 나머지를 div_t 타입으로 반환 (long 값
대상)
rand
int rand(void)
0 에 서 RAND_MAX 사 이 의 임 의 의 정 수 값 반 환
(RAND_MAX = 32756 )
srand
void srand(unsigned seed);
rand함수의 난수발생 시작 값(seed) 설정
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
24
수학 관련 함수

div 함수 (ldiv 함수)
 몫과 나머지 계산 함수
 div_t 타입의 구조체 값 반환
 div_t 구조체 타입 형태
• div_t 구조체 타입
• ldiv_t 구조체 타입
typedef struct _div_t {
typedef struct _ldiv_t {
int quot;
// 몫
long quot;
// 몫
int rem;
// 나머지
long rem;
// 나머지
} div_t;
} ldiv_t;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
25
수학 관련 함수

srand, rand 그리고 div 함수 활용 예
 rand함수를 이용해 임의의 정수 값 발생 후 div 함수를
통해 15로 나눈 몫과 나머지 계산
 난수 발생 값을 초기화 하기 위해 srand 이용
01
02
03
04
05
06
07
08
09
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int i, x;
div_t d;
//rand 함수 seed 값 설정
srand(time(NULL));
for(i=0;i<5;i++){
x = rand();
d= div(x,15);
printf(" %6d/15의 몫은%6d이고 나머지는%3d입니다.\n",x,d.quot,d.rem);
}
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
26
수학 관련 함수

산술 및 삼각 함수




math.h 파일에 정의
주로 실수(double)형의 값을 다룸
지수, 삼각함수, 제곱근, N제곱과 같은 함수들로 구성
함수들의 종류
함수이름
함수 원형
설명/결과
ceil
double ceil (double x);
x 보다 작지 않은 가장 작은 정수 값 double형으로 반환
(예:x=3.2 결과 = 4.0)
exp
double exp(double x);
베이스가 자연 로그인 e인 x 제곱 값을 반환
fabs
double fabs(double x);
실수 값에 대한 절대 값 반환
floor
double floor(double x);
x보다 크지 않은 가장 큰 정수 값을 double형으로 반환
(예:x=3.7 결과 = 3.0)
fmod
double fmod(double x, double y);
x을 y로 나눈 실수 형 나머지를 반환
frexp
double frexp(double x, int *eptr);
실수 값에 대한 가수와 지수 값을 반환
ldexp
double ldexp(double x, int exp);
가수와 지수로부터 실수 값을 반환
double log(double x);
x의 자연 로그를 반환
log
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
27
수학 관련 함수
계속
log10
double log10(double x);
베이스가 10인 x의 로그(상용로그) 값을 반환
modf
double modf(double x, double *y);
실수를 소수점을 기준으로 둘로 나눈 결과 반환. x: 처리대상 실수, y:
처리 후 반환된 정수부, 반환: 소수부
pow
double pow(double x, double y);
x의 y 승 값을 반환
sqrt
double sqrt(double x);
x의 0이 아닌 제곱근()반환. 만일 x가 음수면 에러 발생
sin
double sin(double x);
x의 사인 값을 반환하며, x는 라디안으로 주어진 값이다.
sinh
double sinh(double x);
x의 쌍곡선 사인 값을 반환, (exp(x) - exp(-x)) / 2 의미
asin
double asin(double x);
x의 아크 사인 값을 계산. x 의 범위가 -1에서 1사이 를 벗어나면 에러
발생
cos
double cos(double x);
x의 코사인 값을 반환, x는 라디안으로 주어진 값이다.
cosh
double cosh(double x);
x의 쌍곡선 코사인 값을 반환하며, (exp(x) + exp(-x)) / 2의미
acos
double acos(double x);
코사인의 역함수로 x의 아크 코사인 값을 반환. x값이 범위 (-1부터 1
까지)를 벗어나면 에러 발생
tan
double tan(double x);
x의 탄젠트 값을 반환, x는 라디안으로 주어진 값이다.
tanh
double tanh(double x);
x의 쌍곡선 탄젠트 값 반환, 수학적으로 sinh(x) / cosh(x)
atan
double atan(double x);
x의 아크 탄젠트 값을 계산
atan2
double atan2(double y, double x);
x와 y라는 두 변수의 아크 탄젠트 값 반환
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
28
수학 관련 함수

수식관련 함수 사용 예 (ceil, floor, pow, sqrt, …)
 프로그램을 작성하고 어떤 결과가 나오는지 확인하자.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
void main(){
double x= 10.4, y= 3.2;
PG:427
double z= -2.8, l= 8000.0;
double a,b;
//fmod와 fabs을 이용한 나머지와 절대값 얻기
printf("fmod(%.1f,%.1f)= %.2f, fabs(%.1f) = %.1f \n",x,y,fmod(x,y),z,fabs(z));
// pow와 sqrt를 이용한 N제곱과 제곱근 얻기
printf("pow(%.1f,%.1f)= %.2f, sqrt(%.1f) = %.2f \n",x,y,pow(x,y),x,sqrt(x));
//ceil과 floor을 이용한 실수 값 조정
printf("ceil(%.1f) = %.1f, floor(%.1f)= %.1f \n", y, ceil(y), z, floor(z));
// modf함수를 이용한 정부수와 소수부 얻기
b = modf(z,&a);
printf("modf(%.1f,&b)= (정수부 : %.2f 소수부 : %.3f)\n",z, a, b);
// log와 log10함수를 이용한 자연로그와 상용로그값 얻기
printf("log(%.1f) = %.4f, log10(%.1f) = %.4f \n",l,log(l),l,log10(l));
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
29
수학 관련 함수

삼각 함수 (sin,cos,tan) 사용
 삼각함수는 라디안(radian)값을 이용해 값을 구함
 각도와 라디안 값의 관계
– 1) 원주율(PI)을 180으로 나눈 값을 각도로 곱하면 라디안 값
– 2) 각도를 라디안으로 변환 : 각도 * (PI / 180)
– 3) 라디안을 각도로 변환 : 라디안 * (180 / PI)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
30
수학 관련 함수

삼각함수 사용 예
 30도의 각도에 대한 삼각함수(sin,cos,tan) 계산
 프로그램을 작성하고 계산 결과를 확인하자.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
void main(){
double pi = 3.1415926535;
double degree =30.0;
double radian, result;
//degree --> radian 변환
radian = degree * (pi/180);
//sin
result = sin(radian);
printf("sin(%.4f) = %.4f \n", radian, sin(radian));
//cos
result = cos(radian);
printf("cos(%.4f) = %.4f \n", radian, cos(radian));
//tan
result = tan(radian);
printf("tan(%.4f) = %.4f \n", radian, tan(radian));
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
31
실습시간 – 1 교시
문자, 변환, 시간 관련 함수 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
32
문자, 변환, 시간 관련 함수 활용

학습개요
 표준 라이브러리 함수의 다양한 활용성을 이해한다.
 문자, 변환, 시간 관련 함수를 사용하여 응용 프로그램
제작
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
33
문자, 변환, 시간 관련 함수 활용

토큰 분류 프로그램
 문제 정의
– 수치정보를 전문적으로 취급하는 회사에게 수치 정보를
포함하는 문자열 처리 주문이 들어왔다. 그러나 이러한 수치
데이터는 노이즈 현상에 의해 수치 정보 사이에 잘못된 문자들이
섞여 있다. 이러한 수치 정보의 잘못된 문자들을 제거하여 순수
숫자만으로 형성된 문자열로 재구성하고 이들 문자열 수치
정보를 변환하여 그 수치 값들의 합을 구하는 프로그램을 작성해
보아라. 또한 이 프로그램의 시작에서 종료시점까지의
소요시간도 함께 확인할 수 있는 프로그램을 작성하여라.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
34
문자, 변환, 시간 관련 함수 활용
 입/출력 조건
– 입력 조건
» 노이즈가 포함된 숫자 형식의 문자열(구분 스페이스)
» 예> a34.5 ba343vd2.3 dvd-24.3 340a 3w1.543
– 출력 조건
»
»
»
»
노이즈를 제거한 숫자형식의 문자열
예> 34.5 3432.3 -24.3 340 31.543
숫자형식의 문자열을 실수 값으로 변환 후 계산된 총합
이 프로그램의 총 수행 시간
 관련 함수 및 식
– 사용되는 표준 함수
»
»
»
»
1) 표준 입출력 함수(stdio.h)
2) 문자 관련 함수(ctype.h)
3) 시간 관련 함수(time.h)
4)데이터 변환 함수(stdlib.h)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
: getchar(), printf()
: isdigit(), isspace()
: time(), difftime()
:strtod()
35
문자, 변환, 시간 관련 함수 활용
 알고리즘 (또는 플로우차트)
– 1. 노이즈를 포함한 문자열 입력
» 1.1 프로그램 시작 시간을 설정
» 1.2 노이즈가 포함된 수치 정보 입력
» (각 수치 정보는 스페이스로 구분되고 실수 값으로 존재한다.)




1.2.1
1.2.2
1.2.3
1.2.4
각 문자를 입력 받는다.
문자가 숫자, '.', '-' 이거나 스페이스 인지 판단
위의 조건을 만족한 문자들에 대해서만 저장
문자열이 종료될 때까지 1.2.1부터 반복
» 1.3 노이즈 제거한 수치 리스트 출력
– 2. 수치 문자열을 실수형 배열로 변환
– 3. 총합 계산
– 4. 총합 및 소요시간 출력
» 4.1 총합을 출력한다.
» 4.2 종료 시간을 설정한다.
» 4.3 시작과 종료 사이의 총 수행 시간을 출력한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
36
문자, 변환, 시간 관련 함수 활용

프로그램 작성
 1 단계
– 432 페이지의 프로그램을 위에서 분석된 자료를 기반으로
완성하자.
– 프로그램 실행 과정을 분석한 다음 convert.c 파일로 저장하자.
①. time(NULL)
②. total = total + dv[i]
③. time(NULL)
④. difftime(end,start);
⑤. strtod(cursor,&next)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
37
문자, 변환, 시간 관련 함수 활용
 2 단계
– 프로그램의 정상적인 컴파일 후 아래의 조건에 대한 결과
입력 조건
출력 결과
초기 입력 문자열 :
a34.5 ba343vd2.3 dvd-24.3
340a 3w1.543
초기 입력 문자열 :
a-234.5 v3a1.3v d2.3 dv24.3 56.40a -3w2.43 s254.1
345
초기 입력 문자열 :
495 343.2as bdw-2a.2b 43.1 231.ac32
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
38
실습시간 – 2 교시
수학 관련 함수 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
39
수학 관련 함수 활용

학습개요
 표준 라이브러리 함수(수학 관련)의 다양한 활용성을
이해한다.
 응용 프로그램에서 수학 관련 함수의 활용 방법을 익힌다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
40
수학 관련 함수 활용

공학용 계산기 프로그램
 문제 정의
– 공학 프로그램을 개발하는 과정에 수식이 자주 이용된다. 이러한 수식을
계산할 수 있는 프로그램을 만들어 보자. 이 계산기가 가지는 기능은 두
실수 값에 대한 연산을 처리하고 그 결과를 반환한다. 처리할 연산은
N제곱, 제곱근, 각도에 대한 sin, cos, tan값 과 로그 값들이 처리된다.
 입/출력 조건
– 입력 조건
» 1. 계산을 위한 실수 값에 대한 문자열
» 2. N제곱(pow) 선택 시 N 값
» 3. 값들은 문자열로 입력되기 때문에 실수형(double)으로 변환
필요
» 4. 삼각 함수 값은 각도로 입력한다. (0 ~ 360도)
– 출력 조건
» 1. 각 연산에 대한 계산 결과
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
41
수학 관련 함수 활용
 관련 함수 및 식
– 1. 문자열을 실수형으로 변환 함수
» double atof(char *buf); // <stdlib.h>
– 2. 연산 처리를 위한 함수
»
»
»
»
»
»
»
double
double
double
double
double
double
double
pow(double x, double y); // <math.h> N제곱 계산
sqrt(double x) ; // <math.h> 제곱근 계산
sin(double x); // <math.h>
cos(double x); // <math.h>
tan(double x); // <math.h>
log(double x); // <math.h> 자연로그 계산
log10(double x); // <math.h> 상용로그 계산
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
42
수학 관련 함수 활용
 알고리즘 (또는 플로우차트)
– 1. 계산 값 입력
» 1.1 계산 값 실수 문자열로 입력( 삼각함수: 계산용 각도 입력)
» 1.2 실수 형으로 문자열 변환
» 1.3 값이 정확하지 않을 경우 1.1부터 반복
– 2. 연산자 선택[1:pow,2:sqrt,3:sin,4:cos,5:tan,6:log,7:log10]
– 3. 산술 연산일 경우 [1,2]
» 3.1 pow 연산일 경우
 3.1.1 N제곱의 N값 입력
 3.1.2 pow 계산
» 3.2 sqrt 연산일 경우
 3.2.1 입력 값 음수 인지 판단
 3.2.2 음수일 경우 에러 메시지
 3.2.3 음수 아닐 경우 제곱근 계산
– 4. 삼각함수 연산일 경우 [3,4,5]
» 4.1 각도를 라디안 값으로 변환
» 4.2 sin 함수일 경우
» 4.4 tan 함수일 경우
 4.4.1 tan 값 계산
– 5. 로그 연산일 경우 [6,7]
» 5.1 자연로그 계산일 경우
 5.1.1 자연로그 값 계산
» 5.2 상용로그 계산일 경우
 5.2.1 상용로그 값 계산
– 6. 계산 결과 출력
 4.2.1 sin 값 계산
» 4.3 cos 함수일 경우
 4.3.1 cos 값 계산
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
43
수학 관련 함수 활용

프로그램 작성
 1 단계
– 437 페이지의 프로그램을 위의 분석 자료를 이용해 빈 부분을
완성한 후 프로그램을 작성하고 advancecalc.c 파일로 저장하자.
①. atof(buf)
②. pow(value, y)
③. sin(value)
④. cos(value)
⑤. tan(value)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
44
수학 관련 함수 활용
 2 단계
– 프로그램이 정상적으로 동작하면 다음 입력에 대한 결과 작성
입력 조건
출력 결과
입력 내용
값 : 5.2
오퍼레이션 : 1 (pow)
N 값 : 6.4
입력 내용
값 : 45.7
오퍼레이션 : 2 (sqrt)
입력 내용
값 : 75
오퍼레이션 : 3 (sin)
입력 내용
값 : 56
오퍼레이션 : 5 (tan)
입력 내용
값 : 93000
오퍼레이션 : 7 (log10)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
45
표준 라이브러리 함수
The End.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
46