1 / 46

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 13 장 : 표준 라이브러리 함수 도서출판 - 인터비젼. 13 장 표준 라이브러리 함수. 학습목표 1. 문자 관련 함수에 대해 알아본다 . 2. 자료 변환 관련 함수에 대해 알아본다 . 3. 시간 및 날짜 관련 함수에 대해 알아본다 . 4. 수학 관련 함수에 대해 알아본다 . 5. 기타 자주 사용되는 함수들에 대해 알아본다. 목차. 13 장 표준 라이브러리 함수 예습시간 표준 라이브러리 함수 수학 관련 함수

gaetan
Télécharger la présentation

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 최신 C프로그래밍 언어문제해결에서 프로그래밍까지 개정판 13장 : 표준 라이브러리 함수 도서출판 - 인터비젼

  2. 13장 표준 라이브러리 함수 • 학습목표 • 1. 문자 관련 함수에 대해 알아본다. • 2. 자료 변환 관련 함수에 대해 알아본다. • 3. 시간 및 날짜 관련 함수에 대해 알아본다. • 4. 수학 관련 함수에 대해 알아본다. • 5. 기타 자주 사용되는 함수들에 대해 알아본다.

  3. 목차 • 13장 표준 라이브러리 함수 • 예습시간 • 표준 라이브러리 함수 • 수학 관련 함수 • 실습시간 • 문자, 변환, 시간 관련 함수 활용 • 수학 관련 함수 활용 • 연습시간 • 표준 라이브러리 함수 응용

  4. 표준 라이브러리 함수 예습시간 – 1 교시

  5. 표준 라이브러리 함수 • 학습 개요 • 표준 라이브러리 파일들을 정리한다. • 문자, 자료 변환 함수에 대해 알아본다. • 시간 관련 함수들에 대해 알아본다.

  6. 표준 라이브러리 함수 • 표준 라이브러리 헤더파일들 • 헤더파일의 종류 ※ 뒷장 계속

  7. 표준 라이브러리 함수

  8. 표준 라이브러리 함수 • 문자 관련 함수 • ctype.h 파일에 정의된 함수 • 함수와 함수 원형 ※ 뒷장 계속

  9. 표준 라이브러리 함수 • 문자 관련 함수 (계속)

  10. 표준 라이브러리 함수 • 문자 관련 함수 사용 예 • 문자 데이터의 입력을 통해 영문자나 숫자인지 판단 • 영문자일 경우 • 소문자를 대문자로 , 대문자를 소문자로 변환 • 숫자일 경우 • 입력된 숫자 정보 출력

  11. 표준 라이브러리 함수 • 프로그램 코드내용 • PG:414 01 #include <stdio.h> 02 #include <ctype.h> 03 void main(){ 04     char char_data, result; 05     printf("영문자나 숫자를 입력하시오 : "); 06     do{ 07             char_data = getchar(); 08             if(!isalnum(char_data)){ 09                     printf("영문자나 숫자가 아닙니다. 다시 입력 :"); 10             } 11     }while(!isalnum(char_data)); 12     if(isalpha(char_data)){ 13             if(isupper(char_data)){ 14                     printf("영 대문자를 소문자로 변환 하였습니다.\n"); 15                     result = tolower(char_data); 16             }else if(islower(char_data)){ 17                     printf("영 소문자를 대문자로 변환 하였습니다. \n"); 18                     result = toupper(char_data); 19             } 20     }else if(isdigit(char_data)){ 21             printf("입력된 문자를 숫자 입니다. \n"); 22             result = char_data; 23     } 24     printf("입력 문자는 %c 이고 처리 후 결과는 %c 입니다.\n",char_data, result); 25 }

  12. 표준 라이브러리 함수 • 자료 변환 함수 • 특정 자료형을 다른 자료형으로 변환 • stdlib.h 파일에 정의 • 문자나 문자열의 값을 숫자 값으로 변환하기 위해 주로 사용 • 자료변환 함수 종류 (뒷장)

  13. 표준 라이브러리 함수 • 자료변환 함수들과 함수원형

  14. 표준 라이브러리 함수 • 자료변환 함수 사용 예 • 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

  15. 표준 라이브러리 함수 • 자료 변환 함수 사용 예 (문자숫자) 01 #include <stdio.h> 02 #include <stdlib.h> 03 void main(){ 04     char *str = "1078aThis is string"; // 숫자와 영문자를 가진 문자열 05     char *nstr; 06     long value; 07     // 실수 값 추출 08     value = strtol(str,&nstr,10); 09     printf("정수 값(base 10) : %d \n", value); 10     printf("추출 후 나머지 문자열 : %s \n", nstr); 11     value = strtol(str,&nstr,2); 12     printf("정수 값(base 2) : %d \n", value); 13     printf("추출 후 나머지 문자열 : %s \n", nstr); 14     value = strtol(str,&nstr,8); 15     printf("정수 값(base 8) : %d \n", value); 16     printf("추출 후 나머지 문자열 : %s \n", nstr); 17     value = strtol(str,&nstr,16); 18     printf("정수 값(base 16) : %d \n", value); 19     printf("추출 후 나머지 문자열 : %s \n", nstr); 20 } 출력 결과 : 정수 값(base 10) : 1078 추출 후 나머지 문자열 : aThis is string 정수 값(base 2) : 2 추출 후 나머지 문자열 : 78aThis is string 정수 값(base 8) : 71 추출 후 나머지 문자열 : 8aThis is string 정수 값(base 16) : 67466 추출 후 나머지 문자열 : This is string

  16. 표준 라이브러리 함수 • 시간 관련 함수 • 현재의 날짜나 시간 정보 계산 함수 • time.h파일에 정의 함수의 종류

  17. 표준 라이브러리 함수 • clock()함수 활용 예 • 01 #include <stdio.h> • 02 #include <time.h> • 03 void doanything(); • 04 void main(){ • 05     long start, end, result; • 06     int i; • 07     start = clock(); • 08     for(i=0; i< 1000000; i++){ • 09             doanything(); • 10     } • 11     end = clock(); • 12     result = end - start; • 13     result = (long) result / CLK_TCK; • 14     printf("경과 시간은 %d 초 입니다. \n", result); • 15 } • 16 void doanything(){ • 17     int i=0; • 18     while(i < 1000){ • 19             i++; • 20     } • 21 } • 특정 구간의 실행 시간 분석 프로그램 • 클럭 수를 이용한 경과된 초 계산 수식 • 경과된 초 = 클럭수 / CLK_TCK

  18. 표준 라이브러리 함수 • 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 }

  19. 표준 라이브러리 함수 • 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;   // 서머 타임 설정 여부 플러그 };

  20. 표준 라이브러리 함수 • localtime 함수 • struct tm *localtime(time_t t); • 지역 시간에 대한 struct tm 구조체 값 생성 • 사용형태는 gmtime과 동일 • asctime 함수 • struct tm 구조체 값을 이용해 시간에 대한 문자열 제공 • 반환된 문자열은 총 26자릿수로 구성 • 반환 문자열 구조

  21. 표준 라이브러리 함수 • gmtime, localtime 그리고 asctime 함수 사용 예 • 프로그램 실행 시의 현지 시간과 표준 시간 출력 프로그램 • 01 #include <stdio.h> • 02 #include <time.h> • 03 void main(){ • 04     time_t second; • 05     struct tm *local, *gt; • 06     second = time(NULL); • 07     local = localtime(&second); • 08     gt = gmtime(&second); • 09     printf(" 현지 시간 = %s \n", asctime(local)); • 10     printf(" 표준 시간 = %s \n", asctime(gt)); • 11 }

  22. 수학 관련 함수 예습시간 – 2 교시

  23. 수학 관련 함수 • 학습 개요 • 빈번하게 사용되는 수학 관련 함수들일 알아본다. • 삼각 함수 및 산술 관련 함수들에 대해 이해한다.

  24. 수학 관련 함수 • 수학 기초 함수 • stdlib.h 파일에 정의된 함수 • 절대값, 몫과 나머지 계산 그리고 임의 값 발생 함수 등 • 함수의 종류

  25. 수학 관련 함수 • div 함수 (ldiv 함수) • 몫과 나머지 계산 함수 • div_t 타입의 구조체 값 반환 • div_t 구조체 타입 형태 • div_t 구조체 타입 • typedef struct _div_t { •                 int quot;       // 몫 • int rem;        // 나머지 • } div_t; • ldiv_t 구조체 타입 • typedef struct _ldiv_t { •                 long quot;      // 몫 • long rem;      // 나머지 • } ldiv_t;

  26. 수학 관련 함수 • srand, rand 그리고 div 함수 활용 예 • rand함수를 이용해 임의의 정수 값 발생 후 div 함수를 통해 15로 나눈 몫과 나머지 계산 • 난수 발생 값을 초기화 하기 위해 srand 이용 01 #include <stdio.h> 02 #include <stdlib.h> 03 #include <time.h> 04 void main(){ 05     int i, x; 06     div_t d; 07     //rand 함수 seed 값 설정 08     srand(time(NULL)); 09     for(i=0;i<5;i++){ 10             x = rand(); 11             d= div(x,15); 12             printf(" %6d/15의 몫은%6d이고 나머지는%3d입니다.\n",x,d.quot,d.rem); 13     } 14 }

  27. 수학 관련 함수 • 산술 및 삼각 함수 • math.h 파일에 정의 • 주로 실수(double)형의 값을 다룸 • 지수, 삼각함수, 제곱근, N제곱과 같은 함수들로 구성 • 함수들의 종류

  28. 수학 관련 함수 계속

  29. 수학 관련 함수 • 수식관련 함수 사용 예 (ceil, floor, pow, sqrt, …) • 프로그램을 작성하고 어떤 결과가 나오는지 확인하자. 01 #include <stdio.h> 02 #include <math.h> 03 void main(){ 04     double x= 10.4, y= 3.2; 05     double z= -2.8, l= 8000.0; 06     double a,b; 07     //fmod와 fabs을 이용한 나머지와 절대값 얻기 08     printf("fmod(%.1f,%.1f)= %.2f, fabs(%.1f) = %.1f \n",x,y,fmod(x,y),z,fabs(z)); 09     // pow와 sqrt를 이용한 N제곱과 제곱근 얻기 10     printf("pow(%.1f,%.1f)= %.2f, sqrt(%.1f) = %.2f \n",x,y,pow(x,y),x,sqrt(x)); 11     //ceil과 floor을 이용한 실수 값 조정 12     printf("ceil(%.1f) = %.1f, floor(%.1f)= %.1f \n", y, ceil(y), z, floor(z)); 13     // modf함수를 이용한 정부수와 소수부 얻기 14     b = modf(z,&a); 15     printf("modf(%.1f,&b)= (정수부 : %.2f 소수부 : %.3f)\n",z, a, b); 16     // log와 log10함수를 이용한 자연로그와 상용로그값 얻기 17     printf("log(%.1f) = %.4f, log10(%.1f) = %.4f \n",l,log(l),l,log10(l)); 18 } PG:427

  30. 수학 관련 함수 • 삼각 함수 (sin,cos,tan) 사용 • 삼각함수는 라디안(radian)값을 이용해 값을 구함 • 각도와 라디안 값의 관계 • 1) 원주율(PI)을 180으로 나눈 값을 각도로 곱하면 라디안 값 • 2) 각도를 라디안으로 변환 : 각도 * (PI / 180) • 3) 라디안을 각도로 변환   : 라디안 * (180 / PI) 

  31. 수학 관련 함수 • 삼각함수 사용 예 • 30도의 각도에 대한 삼각함수(sin,cos,tan) 계산 • 프로그램을 작성하고 계산 결과를 확인하자. 01 #include <stdio.h> 02 #include <math.h> 03 void main(){ 04     double pi = 3.1415926535; 05     double degree =30.0; 06     double radian, result; 07 08     //degree --> radian 변환 09     radian = degree * (pi/180); 10     //sin 11     result = sin(radian); 12     printf("sin(%.4f) = %.4f \n", radian, sin(radian)); 13     //cos 14     result = cos(radian); 15     printf("cos(%.4f) = %.4f \n", radian, cos(radian)); 16     //tan 17     result = tan(radian); 18     printf("tan(%.4f) = %.4f \n", radian, tan(radian)); 19 }

  32. 문자, 변환, 시간 관련 함수 활용 실습시간 – 1 교시

  33. 문자, 변환, 시간 관련 함수 활용 • 학습개요 • 표준 라이브러리 함수의 다양한 활용성을 이해한다. • 문자, 변환, 시간 관련 함수를 사용하여 응용 프로그램 제작

  34. 문자, 변환, 시간 관련 함수 활용 • 토큰 분류 프로그램 • 문제 정의 • 수치정보를 전문적으로 취급하는 회사에게 수치 정보를 포함하는 문자열 처리 주문이 들어왔다. 그러나 이러한 수치 데이터는 노이즈 현상에 의해 수치 정보 사이에 잘못된 문자들이 섞여 있다. 이러한 수치 정보의 잘못된 문자들을 제거하여 순수 숫자만으로 형성된 문자열로 재구성하고 이들 문자열 수치 정보를 변환하여 그 수치 값들의 합을 구하는 프로그램을 작성해 보아라. 또한 이 프로그램의 시작에서 종료시점까지의 소요시간도 함께 확인할 수 있는 프로그램을 작성하여라.

  35. 문자, 변환, 시간 관련 함수 활용 • 입/출력 조건 • 입력 조건 • 노이즈가 포함된 숫자 형식의 문자열(구분 스페이스) • 예> a34.5 ba343vd2.3 dvd-24.3 340a 3w1.543 • 출력 조건 • 노이즈를 제거한 숫자형식의 문자열 • 예> 34.5 3432.3 -24.3 340 31.543 • 숫자형식의 문자열을 실수 값으로 변환 후 계산된 총합 • 이 프로그램의 총 수행 시간 • 관련 함수 및 식 • 사용되는 표준 함수 • 1) 표준 입출력 함수(stdio.h)     : getchar(), printf() • 2) 문자 관련 함수(ctype.h)      : isdigit(), isspace() • 3) 시간 관련 함수(time.h)       : time(), difftime() • 4)데이터 변환 함수(stdlib.h)     :strtod() 

  36. 문자, 변환, 시간 관련 함수 활용 • 알고리즘 (또는 플로우차트) • 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 시작과 종료 사이의 총 수행 시간을 출력한다.

  37. 문자, 변환, 시간 관련 함수 활용 • 프로그램 작성 • 1 단계 • 432 페이지의 프로그램을 위에서 분석된 자료를 기반으로 완성하자. • 프로그램 실행 과정을 분석한 다음 convert.c 파일로 저장하자. ①. time(NULL) ②. total = total + dv[i] ③. time(NULL) ④. difftime(end,start); ⑤. strtod(cursor,&next)

  38. 문자, 변환, 시간 관련 함수 활용 • 2 단계 • 프로그램의 정상적인 컴파일 후 아래의 조건에 대한 결과

  39. 수학 관련 함수 활용 실습시간 – 2 교시

  40. 수학 관련 함수 활용 • 학습개요 • 표준 라이브러리 함수(수학 관련)의 다양한 활용성을 이해한다. • 응용 프로그램에서 수학 관련 함수의 활용 방법을 익힌다.

  41. 수학 관련 함수 활용 • 공학용 계산기 프로그램 • 문제 정의 • 공학 프로그램을 개발하는 과정에 수식이 자주 이용된다. 이러한 수식을 계산할 수 있는 프로그램을 만들어 보자. 이 계산기가 가지는 기능은 두 실수 값에 대한 연산을 처리하고 그 결과를 반환한다. 처리할 연산은 N제곱, 제곱근, 각도에 대한 sin, cos, tan값 과 로그 값들이 처리된다. • 입/출력 조건 • 입력 조건 • 1. 계산을 위한 실수 값에 대한 문자열 • 2. N제곱(pow) 선택 시 N 값 • 3. 값들은 문자열로 입력되기 때문에 실수형(double)으로 변환 필요 • 4. 삼각 함수 값은 각도로 입력한다. (0 ~ 360도)           • 출력 조건 • 1. 각 연산에 대한 계산 결과

  42. 수학 관련 함수 활용 • 관련 함수 및 식 • 1. 문자열을 실수형으로 변환 함수 • double atof(char *buf); // <stdlib.h> • 2. 연산 처리를 위한 함수 • double pow(double x, double y); // <math.h> N제곱 계산 • double sqrt(double x) ;  // <math.h> 제곱근 계산 • double sin(double x);   // <math.h> • double cos(double x);  // <math.h> • double tan(double x);  // <math.h> • double log(double x);   // <math.h> 자연로그 계산 • double log10(double x); // <math.h> 상용로그 계산

  43. 수학 관련 함수 활용 • 알고리즘 (또는 플로우차트) • 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.2.1 sin 값 계산 • 4.3 cos 함수일 경우 • 4.3.1 cos 값 계산 • 4.4 tan 함수일 경우 • 4.4.1 tan 값 계산 • 5. 로그 연산일 경우 [6,7] • 5.1 자연로그 계산일 경우 • 5.1.1 자연로그 값 계산 • 5.2 상용로그 계산일 경우 • 5.2.1 상용로그 값 계산 • 6. 계산 결과 출력

  44. 수학 관련 함수 활용 • 프로그램 작성 • 1 단계 • 437 페이지의 프로그램을 위의 분석 자료를 이용해 빈 부분을 완성한 후 프로그램을 작성하고 advancecalc.c 파일로 저장하자. ①. atof(buf) ②. pow(value, y) ③. sin(value) ④. cos(value) ⑤. tan(value)

  45. 수학 관련 함수 활용 • 2 단계 • 프로그램이 정상적으로 동작하면 다음 입력에 대한 결과 작성

  46. The End. 표준 라이브러리 함수

More Related