300 likes | 674 Views
내용. 기타 자료형 (data type) 상수 강제 데이터 형 변환 C 언어에서 함수의 사용 프로그램의 모듈화 함수 개념 함수 작성법 표준함수 ( 내장 함수 ) 사용법. 여러 가지 데이터 형. 기존 int, float, char 이외 다음과 같은 데이터 형이 있다 . --------------------------------------------------------- 자료형 설명 요구되는 메모리 범위
E N D
내용 • 기타 자료형(data type) • 상수 • 강제 데이터 형 변환 • C언어에서 함수의 사용 • 프로그램의 모듈화 • 함수 개념 • 함수 작성법 • 표준함수(내장 함수) 사용법 C Program-I Review
여러 가지 데이터 형 • 기존 int, float, char 이외 다음과 같은 데이터 형이 있다. --------------------------------------------------------- 자료형 설명 요구되는 메모리 범위 --------------------------------------------------------- int 정수 4 byte -2147483648 ~ 2147483647 또는 2byte -32,768 ~ 32,767 char 문자 1 byte -128 ~ 127 long 큰 정수 4 byte -2147483648 ~ 2147483647 float 실수 4 byte 3.4E-38 ~ 3.4E+38 double 배정도 실수 8 byte 1.7E-308 ~ 1.7E+308 ---------------------------------------------------------short 2byte 정수 unsigned 정수형(int, long, char) 에서 음수를 제외하여 양수의 범위를 2배로 늘인 데이터 형 C Program-I Review
데이터 형 및 변수 초기화 예제 • 변수 선언 예 unsigned int count; -> 0 ~ 4,294,967,295 범위의 정수 -> 또는 0 ~ 65,535 (16비트 운영체제) unsigned num; -> unsigned int 와 동일 short int a; -> 2byte형 정수 short b; -> short int와 동일 long c; -> 4byte 형 정수 unsigned long d; -> 4byte 양수형 정수(0 - 4,294,967,295) double f; -> 배정도 실수 • 변수 선언과 동시에 초기화도 가능 int a=0; long b=0, c=1; C Program-I Review
printf(), scanf()의 기타 데이터형 처리 • printf(), scanf()에서 사용되는 각종 변환자 • %c : character 형 • %d : 십진 정수형(int) • %ld: 십진 정수형(long) • %f : 부동 소수점(float) • %lf : 배정도실수(double) • %u : unsigned int 형, %lu : unsigned long 형 • %o : 8진 정수형(int) • %x : 16진 정수형(int), %X : 16진 정수(대문자) C Program-I Review
예제(2n구하기-> int, long, unsigned) #include <stdio.h> int main(void) { int num, result=1, i; printf(“\n Input num:”); scanf(“%d”, &num); for (i=1; i <= num; i++) result *= 2; printf(“\n Result = %d”, result); return 0; } #include <stdio.h> int main(void) { unsigned long num, result=1; int i; printf(“\n Input num:”); scanf(“%lu”, &num); for (i=1; i <= num; i++) result *= 2; printf(“\n Result = %lu”, result); return 0; } C Program-I Review
상수의 사용 • 프로그램 내에서 변하지 않는 값을 가짐 • 종류 : 정수 상수, 실수 상수, 문자 상수, 문자열 상수 • 정수상수(십진) 1 234 205 23955 999999 • 정수상수(8진) : 앞에 ‘0’를 붙인다. 01 0345 077777 • 정수상수(16진) : 앞에 ‘0X’또는 ‘0x’를 붙인다. 0X 0X1 0x78f 0x7AB 0Xabc C Program-I Review
상수의 사용(계속) • 정수상수(unsigned/long) : 숫자 뒤에 ‘L’또는 ‘U’를 붙인다. 5000U 123456789L 012345L 0xFFFFFFFUL • 실수상수 0. 1. 1.2 100.3 .1234 2E-2 0.004e-3 .1234e-4 • 문자상수 'a‘ 'b‘ 'c' • 문자열 상수 "a " "ab" "this is" "123456" C Program-I Review
기호 상수 • 숫자를 의미 있는 이름으로 대체 • 형식 : #define name 상수 • 사용은 일반 변수와 동일하게 사용 • 관례적으로 대문자로 많이 사용. • 예제 #define TAX_RATE 0.23 #define PI 3.141593 #define TRUE 1 #define FALSE 0 #define FRIEND "Kil-dong" C Program-I Review
예제(반지름 면적 구하기) #include <stdio.h> #define PI 3.14159 int main(void) { float rad, area; printf("Radius = ? "); scanf("%f", &rad ); area = PI * rad * rad; printf(“\n Area = %f", area); return 0; } C Program-I Review
데이터 형 변환 • Cast 연산자 • 강제로 데이터 형을 변환하는 일종의 연산자 • 형식: (데이터형) 변수 • 예제 float f; f=100.2; printf(“%d”, (int) f); /*강제로 실수형으로 변환 */ C Program-I Review
예제 #include <stdio.h> int main(void) { int i=1, num, sum=0; float ave; do { scanf("%d", &num ); sum += num; i++; } while(num !=0); ave = (float) sum/(i-1); printf(“\n Sum = %d Ave = %f”, sum, ave); return 0; } C Program-I Review
실습 예제(중첩 제어문) • 1부터 100 사이의 모든 소수(prime number)를 출력하는 프로그램 작성 • 구구단 1단에서 9단까지 전부를 출력하는 프로그램을 작성하시오. C Program-I Review
Module 1 Module 2 Module 3 Module 4 Module 5 Module 6 프로그램의 모듈화 • 수 천, 수 만 라인의 대규모 프로그램을 하나의 단위로 모두 구현하기는 불가능하다. • 즉 프로그램을 쉽게 다룰 수 있고 개별적으로 구현 가능한 단위(모듈)로 나누어 작성한다. • 프로그램 모듈화(조립식 설계) • 프로그램을 여러 개의 모듈들로 분리 • 어느 하나의 모듈이 작성되기 전에 전체 프로그램의 설계가 가능함 C Program-I Review
taxes( ) net_pay( ) gross_pay() output() C 언어의 모듈화 • 모듈화의 장점 • 코드의 재사용성이 높다. • 판독성이 높아진다. • 오류 수정이 쉽다. • 여러 프로그래머들의 협동작업이 가능하다. • C 언어에서는 각 모듈을 함수 형태로 구현한다. C Program-I Review
여러 개의 함수를 가진 프로그램 • 함수(Function)은 C 프로그램을 만드는 모듈이다. • 현재까지 프로그램 예제들은 오직 main() 함수만 포함하고 있었다.(main도 하나의 함수이다) • 일반적인 C 프로그램은 여러 개의 함수로 구성된다. • 예) int main(void) { … func1(); i = func2(); return 0; } void func1(void) { …….. } int func2(void) { …….. } C Program-I Review
함수의 호출 순서 • 하나의 프로그램에는 하나의 main() 함수가 존재한다. • 항상 main() 함수부터 시작하고, main()함수에서 끝난다. • 다른 함수를 호출하면 그 호출된 함수를 수행 • 호출된 함수의 수행이 끝나면, 다시 원래 함수(호출하였던)의 다음 문장으로 복귀 void func1(void) { printf(“like “); } void func2(void) { printf(“program“); func3(); } void func3(void) { printf(“ !!!!“); } #include <stdio.h> int main(void) { printf(“\n I “); func1(); printf(“ C “); func2(); return 0; } C Program-I Review
First Number Second Number a * b Result 함수의 인수(입력) 및 리턴 값(출력) • 함수의 인수 전달 및 리턴 값 • 호출하는 문장은 호출되는 함수에게 인수(함수의 입력)를 전달할 수 있다. • 호출되는 함수(피함수)는 자신을 호출한 문장에게 값을 리턴(함수의 출력)할 수 있다. -> 함수의 수행 결과가 이 리턴 값으로 치환된다. • 참고: 인수를 매개변수라고도 부른다. • 함수의 예 ……. num = mul(2,3); ……... int mul(int a, int b) { int c; c = a * b; return c; } C Program-I Review
함수의 구성 • 함수 선언문 • 변수 선언과 흡사하게 앞으로 이 함수를 사용할 것임을 알려주는 역할 • mul() 함수의 호출 • 함수의 인수(입력)로 i, j 값을 넘겨줌 • 함수의 리턴 값을 k에 대입 • 함수 몸체(정의) • a <- main()의 i 값(10) • b <- main()의 j 값(20) • c 값을 함수의 수행 결과로 리턴, 결국 main()의 k에는 200이 대입된다. #include <stdio.h> int mul(int , int ); int main(void) { int i=10, j=20, k; k = mul(i, j); printf(“\n k = %d”, k); return 0; } int mul(int a, int b) { int c; c = a * b; return c; } C Program-I Review
함수의 사용법(1) • 함수 선언문(함수 원형(prototype)) • 변수와 동일하게 앞으로 이런 함수를 사용할 것임을 알려줌 • int mul(int, int); • int mul(int a, int b); 라고 선언해도 됨(변수 명까지 써도 상관 없음) • void 라는 특수 데이터 형은 리턴 값이나 인수가 없음을 나타냄 • 예) void test1(int, int); -> 두개의 int형 인수를 전달 받으나, 리턴값은 없음 int test2(void) -> int형 값은 리턴하나, 인수는 없음. • 함수 리턴 값의 데이터 형(data type) • 함수의 이름(변수의 이름과 동일한 규칙으로 작성) • 첫번째 인수(입력)의 데이터 형 • 두번째 인수의 데이터 형 C Program-I Review
함수의 사용법(2) • 함수의 정의 부분(몸체) • main() 함수와 동일하게 변수 선언 및, 연산, 제어 등을 수행할 수 있다. • 참고: 하나의 함수 내에서 선언된 변수는 그 함수 내에서만 유효하다. • void 형이 아닌 함수의 경우에는 return 문을 사용하여 함수의 결과 값을 리턴 해야 한다. • return a; 또는 return(a); • C 언어에서는 오직 하나의 값만 리턴 할 수 있다. • main() 도 하나의 함수이다. • main() 함수는 운영체제(명령행 라인)로부터 인수를 넘겨 받을 수 있다. (나중에 배울 것임) • main() 함수의 리턴 형이 int로 선언되었으므로, main() 함수의 끝에 return 0; 수행한다.(이 값도 운영체제로 전달됨) C Program-I Review
함수 작성 예(두수의 평균값) #include <stdio.h> float ave(int a, int b); int main(void) { int i, j; float ret; scanf(“%d %d”, &i, &j); ret = ave(i, j); printf(“\n ret = %f”, ret); return 0; } float ave(int a, int b) { float c; c = a+b/2.0; return c; } C Program-I Review
함수 작성 예(소수 검사) #include <stdio.h> int is_prime(int a); int main(void) { int i; float ret; for(i=1; i<=100; i++) { if(is_prime(i)) printf(“ %d”, i); } return 0; } int is_prime(int a) { int isprime=1, b; for(b=2; b<a; b++) { if(a%b==0) isprime=0; } return isprime; } C Program-I Review
실습 예제 • 앞의 예와 같이 두개의 정수를 인수로 받아 그 중 큰 값을 리턴하는 int max(int a, int b) 함수를 작성하고, 그 결과(main() 함수에서 호출하여)를 보여라 • 앞의 예와 같이 두개의 정수를 인수로 받아 ab를 구하는 int power(int a, int b) 함수를 작성하고, 그 결과(main() 함수에서 호출하여)를 보여라 C Program-I Review
표준 함수 • 사용자 정의 함수 • 사용자가 필요에 의해 직접 작성하여 활용하는 함수 • 앞장에서 작성한 모든 함수들은 사용자 정의 함수이다. • 표준 함수 • 국제적으로 정해진 표준에 근거하여, C 컴파일러 제작회사에서 미리 만들어 제공하는 함수 • 내장 함수 또는 라이브러리(library) 함수라고도 한다. • C 언어에는 사용 빈도가 높은 함수들을 표준으로 정의하여 어떤 컴파일러 회사에서도 동일하게 제공한다. • 우리가 사용했던 scanf(), printf()도 표준함수에 해당된다. • 사용자는 표준함수의 기능이 어떻게 구현되어 있는지 알 필요 없이 함수 사용법(인수, 리턴 형)에 맞추어 사용하면 된다. C Program-I Review
표준 함수 사용법 • 사용하고자 하는 표준 함수의 원형(선언문)이 들어 있는 헤더 파일(xxx.h)을 #include 문을 사용하여 프로그램 내에 삽입한다. • 인수와 리턴 형에 맞게 그 표준 함수를 호출한다. • 예 #include <stdio.h> int main(void) { …….. …….. printf(“\Welcome to C world!!); } 헤더 파일 표준함수 호출 C Program-I Review
표준 함수 종류 • 자세한 함수 사용법은 TC, Visual-C 등의 도움말이나 C 관련 도서를 참조하기 바람. C Program-I Review
표준함수 사용 시 참조 사항 • 표준함수를 사용하기 위해서는 헤더파일(xxx.h)과 라이브러리 파일이 제대로 설정되어 있어야 한다. • TC의 경우 • TC에 설정된 include 디렉토리와 lib 디렉토리에 각각의 헤더파일과 라이브러리 파일이 존재해야 함. • include 디렉토리 : 모든 표준 헤더 파일(함수 선언문)이 존재 • lib 디렉토리 : 실제 각종 표준 함수의 코드(몸체)가 바이너리 형태로 존재 • Visual-C 등에서는 설치과정에서 디렉토리 등이 제대로 설정되어 있으므로 신경 쓸 필요없음. C Program-I Review
표준함수 사용 예 printf() 함수 호출 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i; srand((unsigned)time(0)); for( i=1; i<=10; i++) printf(“ %d”, rand()); for( i=1; i<=10; i++) printf(“ %d”, rand()%100); return 0; } rand (), srand () 함수 호출 time() 함수 호출 rand ()을 위한 초기화, 현재 시스템 시간을 이용하여 난수를 발생시킬때 마다 서로 다른 랜덤 패턴이 발생하도록 함. 0 ~ RAND_MAX(32767) 사이의 난수를 10개 발생 0 ~ 99 사이의 난수를 10개 발생 C Program-I Review
실습 예제 • 숫자 맞추기 게임 • 앞의 난수 발생 예를 참조하여 0~99 사이의 난수를 하나 발생시켜 사용자가 알아 맞추도록 하시오. • 사용자가 입력한 수가 틀릴 때 마다 난수로 발생시킨 값이 입력한 수보다 큰지 작은지 알려주시오. • 사용자가 맞추었을 경우, 총 몇 번 만에 맞추었는지 알려주시오. • 가위, 바위, 보 게임 • 1,2,3 중의 하나를 난수로 발생시켜 컴퓨터의 (1:가위 2:바위 3:보)를 하나 정하시오. • 사용자에게 (1:가위 2:바위 3:보) 중의 하나를 입력 받아 승패를 출력하시오. • 사용자가 0을 입력할 때까지 위의 과정을 되풀이 하시오. • 즉 (0:종료 1:가위 2:바위 3:보) 를 입력 받도록 구성할 것 • 총 승패 통계도 함께 출력하시오. C Program-I Review
함수의 장점(복습) • 코드의 재 사용성이 높아진다. • 기존의 작성했던 함수 등을 다시 가져와서 사용하거나, 조금 수정해서 사용할 수 있다. • 판독성이 높아진다. • main() 함수에 모든 코드를 넣지않고, 전체 코드를 여러 개의 함수로 분리함으로써 판독성이 높아짐. • 오류 수정이 쉬워진다. • 각 함수 별로 디버깅이 가능해짐 • 협동 작업이 가능해진다. • 전체 프로그램을 여러 개의 모듈(함수들)로 분리하여 각각의 프로그래머가 각 모듈을 구현할 수 있다. • 코드가 적어진다. • 매번 같은 내용의 코드가 빈번히 사용할 경우, 그 코드를 여러 번 작성할 필요 없이 함수로 구현하여, 필요할 때마다 호출함. C Program-I Review