12.
This presentation is the property of its rightful owner.
Sponsored Links
1 / 56

라이브러리 함수를 소개하고 , 라이브러리 함수를 이용한 응용 프로그램에 대해서 설명 [ 학습할 내용 ] 12.1 출력 함수 printf() PowerPoint PPT Presentation


  • 125 Views
  • Uploaded on
  • Presentation posted in: General

12. 라이브러리 함수와 응용. 라이브러리 함수를 소개하고 , 라이브러리 함수를 이용한 응용 프로그램에 대해서 설명 [ 학습할 내용 ] 12.1 출력 함수 printf() 12.2 입력 함수 scanf() 12.3 문자와 문자열 관련 함수 12.4 수학 계산 함수 ( 헤더 파일 <math.h>) [ 추가 문법 ] 12.5 화면과 커서의 제어 12.6 날짜와 시간 관련 함수 ( 헤더 파일 <time.h>)

Download Presentation

라이브러리 함수를 소개하고 , 라이브러리 함수를 이용한 응용 프로그램에 대해서 설명 [ 학습할 내용 ] 12.1 출력 함수 printf()

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


12 1 printf

12. 라이브러리 함수와 응용

라이브러리 함수를 소개하고, 라이브러리 함수를 이용한 응용 프로그램에

대해서 설명

[학습할 내용]

12.1 출력 함수 printf()

12.2 입력 함수 scanf()

12.3 문자와 문자열 관련 함수

12.4 수학 계산 함수 (헤더 파일 <math.h>)

[추가 문법]

12.5 화면과 커서의 제어

12.6 날짜와 시간 관련 함수(헤더 파일 <time.h>)

12.7 임의의 숫자 난수(헤더 파일 <stdlib.h>)

[단원정리]


12 1 printf

라이브러리 함수란?

C 언어에는 프로그래머가 쉽게 이용할 수 있는 다양한 기능의 라이브러리(library) 함수들이 있다.

라이브러리 함수를 이용하기 위해서는 해당 함수의 원형과 함수 정의가 포함되어 있는 헤더 파일을 #include문을 사용하여 불러와야 한다.

예로 출력 함수 printf()나 입력 함수 scanf()를 사용하기 위해

#include <stdio.h>를 사용하는 것

그러므로 프로그래머는 이용하려는 라이브러리 함수의 정의가 어떤

헤더 파일에 포함되어 있는지를 확인하여 사용.


12 1 printf

12.1 출력 함수 printf()

함수 printf()는 출력을 담당하는 함수이며 확장 문자를 포함하여 숫자, 문자, 문자열 외에 주소(포인터)를 형식에 맞게 출력한다.

정수형과 실수형 데이터에 대한 형식 지정자 %d와 %f에 대해서는 6.8(출력될 데이터의 자릿수 맞추기)을 참고.


12 1 printf

문자열의 자릿수 맞추기

문자열을 출력할 때 형식 지정자 %s를 사용


12 1 printf

진법 및 포인터 주소의 출력


12 2 scanf

12.2 입력 함수 scanf()

데이터를 키보드로 입력 받을 경우에 사용하는 입력 함수인 scanf()

함수 scanf()는 printf()와는 달리 입력할 변수 앞에 주소 연산자인 '&'를 사용한다.

함수 printf()에서는 형식 지정자 외에 '\'를 함께 사용하는 확장 문자(예로 \n)를 사용할 수 있지만 scanf()는 형식 지정자 외에 다른 문자나 문자열을 사용할 수 없다.


12 1 printf

문자열 입력(문자형 배열)

입력할 문자열에 공백(white space)이 없어야 한다. (함수 gets()사용)

숫자를 입력 받을 때와는 달리 주소 연산자 '&'를 사용하지 않는다.

char형 배열의 크기는 입력할 문자 개수보다 1개 더 크게 잡아주어야 한다.

입력할 문자열이 한글이라면 char형 배열의 크기는 최소한 (한글개수×2)+1로 한다.


12 1 printf

입력할 문자열의 개수를 지정하여 입력 받는 프로그램


12 1 printf

[참고] 문자열 입력 함수 gets()

함수 gets()는 Enter키를 누르기 전까지 공백이 포함된 문자열을 입력 받을 수 있다.


12 1 printf

문자열 입력(문자형 포인터)

다음 예제에서 포인터 변수 str의 크기는 20이므로 최대 19자까지 입력 받을 수 있다.

함수 malloc() 은 변수에 동적으로 메모리를 할당하는 함수로서 헤더파일 <stdlib.h>를 필요로 하고, 동적으로 할당된 메모리를 해제하는 경우에는 함수 free() 를 사용한다(18.2.1).


Scanf

[참고] 함수 scanf()를 사용할 때 발생되는 예상외의 문제와 해결

문제 : scanf()를 여러 번 사용할 때 입력이 이루어지지 않는 경우가 발생

원인 : 함수 scanf()는 라인-버퍼형식으로 값을 입력 받기 때문에 데이터를 입력한 다음에는 반드시 Enter키를 쳐야 함. 그러나 이때 Enter키 역시 하나의 문자이므로 버퍼(buffer)에 남아있을 수 있으므로 위와 같은 현상이 나타날 수 있다.

해결 : 버퍼에 남아있는 내용을 비워주는 함수 fflush()를 사용.

사용방법 : 함수 scanf() 이전에 사용하거나 scanf() 사이에 사용.


12 1 printf

12.3 문자와 문자열 관련 함수

문자와 문자열을 처리하는 라이브러리 함수와 사용방법을 소개.

문자는 char형 변수에 저장할 수 있지만 문자열을 변수에 저장하려면 char형 배열이나 포인터를 이용한다.

문자열에 대한 자세한 내용은 13.5(배열과 문자열)와 14.3(포인터와 배열)에서 설명하고 이곳에서는 라이브러리 함수에 초점을 두고 설명


12 3 1 ctype h

12.3.1 문자 분류 함수 (헤더 파일 <ctype.h>)

각각의 함수들은 조건을 만족할 때(참) 1 또는 0이 아닌 값을 반환하고, 만족하지 않으면(거짓)에는 0을 반환한다. 조건식에서 0은 거짓(false)을, 0이 아닌 숫자는 참(ture)을 의미함. (다음 장 계속)


Ctype h

문자 분류 함수 (헤더 파일 <ctype.h>)

각각의 함수들은 조건을 만족할 때(참) 1 또는 0이 아닌 값을 반환하고, 만족하지 않으면(거짓)에는 0을 반환한다. 조건식에서 0은 거짓(false)을, 0이 아닌 숫자는 참(ture)을 의미함.


Isalpha isdigit

데이터가 문자인지 숫자인지를 판별하는 함수(isalpha, isdigit)


12 3 2 stdlib h

12.3.2 변환 함수(헤더파일 <stdlib.h>)

itoa() : inter to ascii,

ltoa() : long to ascii 의미

정수형 숫자를 2진수, 8진수, 10진수 또는 16진수의 문자열로 변환


2 16 itoa ltoa

숫자를 2진수 또는 16진수 문자열로 변환하는 함수(itoa, ltoa)


12 1 printf

문자열을 숫자로 변환하는 함수 I

앞의 경우와 반대로 문자열을 숫자로 변환. 변환할 숫자의 데이터 형은 실수형 또는 정수형으로 변환할 수 있다. atof()는 ascii to float를 의미


12 1 printf

문자열을 숫자로 변환하는 함수 II

다음의 함수들도 문자열을 숫자로 변환하는 함수이나 특정 진법으로 표현된 문자열을 정수로 변환한다. 즉, 앞에서의 itoa()와 반대의 기능을 하는 함수


12 3 3 string h

12.3.3 문자열 처리와 검색 함수(헤더 파일 <string.h>)

문자열 처리에 관련된 함수들은 문자열을 연결, 비교, 그리고 문자열 중에서 특정 문자나 문자열을 검색하는 기능을 한다.

문자열 처리 함수들의 이름 대부분은 str로 시작하며 이는 string의 약어로서 문자열을 의미한다.


12 1 printf

문자열을 비교하는 함수


12 1 printf

문자열을 복사하거나 문자열의 길이를 계산하는 함수


Strncpy

복사할 문자열의 길이만큼 정확히 복사(strncpy)


12 1 printf

문자나 문자열을 검색


Strstr strpbrk

문자열을 검색하는 함수(strstr, strpbrk)


Strspn strcspn

문자들이 연속하는 길이를 계산(strspn, strcspn)


12 4 math h

12.4 수학 계산 함수 (헤더 파일 <math.h>)

이들 함수들을 사용하려면 헤더파일 <math.h>를 필요로 한다. [표]의 함수 인자 중에서 n은 int형을, x와 y는double형을 의미한다.

다음 장 계속


12 4 math h1

12.4 수학 계산 함수 (헤더 파일 <math.h>)

이들 함수들을 사용하려면 헤더파일 <math.h>를 필요로 한다. [표 3]의 함수 인자 중에서 n은 int형을, x와 y는double형을 의미한다.


12 1 printf

정수형 변환 함수


12 1 printf

절댓값 변환 함수

정수와 실수 데이터에 대해 절댓값(absolute value)으로 변환


12 1 printf

지수, 로그 함수


12 1 printf

나눗셈, 나머지 함수


12 1 printf

삼각 함수


12 1 printf

라디안과 각도의 변환

삼각 함수의 인자들은 모두 라디안(radian)을 사용하므로 각도(degree)를 인자로 사용하고 싶다면 다음과 같은 변환 공식을 이용. 다음 공식에서 PI는 원주율 상수를 의미


Sin cos

sin()과 cos()


12 1 printf

[추가 문법] 12.5 화면과 커서의 제어

Visual C++나 Turbo C/C++에서 실행된 C 프로그램의 결과는 텍스트 방식의 화면에 출력된다. 따라서 출력할 내용들이 많다면 결과를 확인하기 위해 화면 스크롤을 이용해야 한다.

화면의 제어는 화면에 나타난 모든 내용들을 지우는 것을 말하고,

커서의 제어는 화면에서 커서의 위치를 조절하여 출력할 내용의 위치를 제어


12 5 1

12.5.1 화면 지우기


12 1 printf

구구단 전체 출력과 화면 제어


12 5 2

12.5.2 커서의 위치 제어

프로그램이 실행된 텍스트 화면의 크기는 대개 가로 80자, 세로 24자 정도의 크기로 나타난다. 이와 같은 화면 안에서 커서의 위치를 제어하면 출력할 내용의 위치를 조절할 수 있다. 커서의 위치를 제어하는 함수 gotoxy()의 원형은 다음과 같으며 void형이므로 반환 값은 없다.

그러나 함수 gotoxy() 는 Turbo C/C++에만 정의되어 있으므로 Visual C++ 의 경우에는 사용자 정의함수로 만들어 사용해야 한다.


Visual c

커서의 위치를 지정한 구구단 출력(Visual C++)


Turbo c c

커서의 위치를 지정한 구구단 출력(Turbo C/C++)


12 6 time h

12.6 날짜와 시간 관련 함수(헤더 파일 <time.h>)


12 6 1

12.6.1 현재의 날짜와 시간을 출력

시간과 날짜를 하나로 묶어서 문자열로 처리하는 방법


12 1 printf

날짜와 시간을 단위 요소별로 구분하여 출력하는 방법

함수 localtime()은 tm이라는 하는 구조체 포인터인데 구조체 tm은 헤더파일 <time.h>에 다음과 같이 정의되어 있다.

위의 구조체 멤버를 이용하면 날짜에 대해서는 년・월・일로 그리고 시간에 대해서는 시・분・초 단위로 구분할 수 있으므로 프로그래머가 원하는 형식대로 분리하여 사용할 수 있다.


12 6 2

12.6.2 시간 차이의 계산

시간 차이를 계산하는 방법은 프로그램에서 어떤 동작을 시작하기 직전에 현재의 시간을 저장(A)하고, 동작이 완료된 직후에 현재 시간을 저장(B)하여 다음과 같이 계산한다.

소요 시간 = 종료 시간(B) - 시작 시간(A)

시작 시간과 종료 시간을 확인하는데 있어서 사용할 수 있는 함수로는 time()과 clock()을 사용할 수 있다.


Time clock

함수 time()과 clock()의 비교

C 언어에서 시간을 나타내는 방법

달력 시간(calendar time) : 시계 개념으로 함수 time()을 사용

(단위 : 초)

프로세서 시간(processor time) : 함수 clock()을 사용하는데 어떤

프로세서가 작동하고 있는 동안에 얼마의 시간이

흘렀는지를 계산(단위 : 1/1000초)

함수 clock()이 프로세서 시간을 반환하는데 있어서 컴퓨터와

운영체제마다 달라지므로 clock tick 값으로 나누어주어야 하는데

이때 CLK_TCK(또는 CLOCKS_PER_SEC)라는 상수를 사용한다.


Time clock1

함수 time()과 clock()의 비교

함수 time()에 대한 시간 차이를 계산할 때 함수 difftime()을 사용한다.


12 6 3

12.6.3 시간을 지연시키는 함수

시간을 지연시키는 함수 : 함수 Sleep() 와 함수 delay() :

이들 함수의 인자로는 1/1000초 단위의 정수가 사용됩니다. 따라서 5초간 지연시키고자 한다면 Sleep(5000)또는 delay(5000)과 같이 사용.

함수 Sleep()은 Visual C++에서만 사용이 가능하며 헤더 파일 <windows.h>가 필요함. 함수 delay()는 Turbo C(Turbo C++제외)에서만 사용이 가능한 함수로써 헤더 파일 <dos.h>가 필요함.


Kbhit

함수 kbhit()과 연속적인 현재 시간 표시

시간을 처리하는 함수와는 다른 개념의 함수이지만 유용하게 사용할 수 있는 kbhit()라는 함수.

함수의 인자가 없으며, 키보드 상의 어떤 키를 누르면 0이 아닌 값을, 누르지 않은 상태라면 0값을 반환하는 함수로 헤더 파일 <conio.h>를 필요로 함.

프로그램의 실행 중에 아무 키를 누르기 전까지만 프로그램을 반복시키고자 한다면 반복문 while과 함께 다음과 같이 사용할 수 있습니다.

while(!kbhit())

{

반복할 프로그램

}


12 7 stdlib h

12.7 임의의 숫자 난수(헤더 파일 <stdlib.h>)

게임 프로그램에서는 임의의 경우나 상황을 만들기 위해 난수(random number)를 이용한다.

난수란 특정한 배열 순서나 규칙을 가지지 않는, 연속적인 임의의 수를 말한다. 난수는 주로 컴퓨터를 이용한 모의실험(simulation)에 사용되는데 컴퓨터가 생성한 난수는 엄밀한 의미에서 예측이 가능하고, 복사할 수 있기 때문에 모조(pseudo) 난수라 한다.

난수를 생성하는 라이브러리 함수 rand()


12 1 printf

정수 난수의 생성

함수 rand()를 이용하여 정수 난수를 생성한다고 할 때 0부터 32767사이의 난수를 생성하기 보다는 특정한 범위(구간)내의 난수를 생성

특정한 범위내의 정수 난수를 생성한다면 함수 rand()에 대해 다음과 같이 나머지 연산자 %와 덧셈 또는 뺄셈을 적절히 사용한다.


12 1 printf

실수 난수의 생성

함수 rand()는 int형 함수로서 0 이상의 정수 난수를 생성하는데 이용하지만 다음과 같이 나눗셈 연산을 이용하면 0에서 1사이의 실수 난수를 생성할 수 있다. 다음 식에서 max는 double형 변수로서 32767로 초기화되었다고 가정한다.

만약 0부터 1사이의 실수 난수를 생성하되 1을 포함하지 않는 다음과 같은 구간의 실수 난수를 생성한다면 double형 변수 max를 32768로 초기화하여 사용한다.


12 7 2

12.7.2 매 실행마다 다른 난수를 생성하는 방법(난수 초기화)

모의실험(simulation)에서는 경우에 따라 똑 같은 난수를 가지고 실험할 수도 있으며 매번 서로 다른 난수를 가지고 실험하는 경우도 있다. 함수 rand()에 대해 특별히 초기화를 하지 않는다면 앞에서와 같이 매 실행마다 같은 난수가 생성된다.

예를 들어 로또 번호와 같이 1부터 45사이의 임의의 난수 6개를 출력하는 프로그램을 다시 컴파일 하여 실행하더라도 이전과 동일한 6개의 난수가 출력된다.

매 실행마다 앞서 생성된 난수와 다른 난수가 생성되게 하려면 발생될 난수의 초기값을 제어하는 부분이 필요함. 이와 같은 기능을 하는 함수로 srand()가 있다.


12 7 3

12.7.3 중복되지 않는 난수의 생성

복원추출(sampling with replacement) : 같은 숫자가 생성될 수 있음

비복원 추출(sampling without replacement) : 같은 숫자가 생성될

수 없음

함수 rand()는 단지 임의의 숫자를 생성할 뿐 중복되지 않는 난수를 생성하는 기능은 없다. 따라서 1에서 10사이의 중복되지 않는 난수 5개를 생성하려면 새로 생성된 난수와 이전에 생성된 난수를 비교하여 같은 난수가 발생될 경우에는 다시 난수를 생성하도록 프로그램을 작성해야 한다.

다음 예제는 1에서 10사이의 5개의 난수를 중복되지 않게 생성하는 프로그램이전에 만들어진 난수와 새롭게 만든 난수를 비교하기 위해서는 이전에 만든 난수들을 저장해야 하므로 배열을 사용함.


12 1 printf

[단원정리] 1/2

출력 함수 printf()

printf()의 형식 지정자에 대해 기호 '+', '-' 또는 '0'을 함께 사용하여 출력방법을 조절할 수 있다.

입력 함수 scanf()

scanf()는 형식 지정자를 사용할 수는 있지만 확장 문자를 사용할 수 없다.


12 1 printf

[단원정리] 2/2

라이브러리 함수의 사용방법

라이브러리 함수를 사용하려면 해당 함수가 정의되어 있는 헤더 파일에 대해 #include 문을 사용하여 불러와야 한다.


  • Login