Microsoft PowerPoint - ch04 - 함수 pm0130

Similar documents
쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

Microsoft PowerPoint - chap-09.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter8.pptx

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - chap10-함수의활용.pptx

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint 프레젠테이션

untitled

C 프로그래밊 개요

untitled

untitled

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

금오공대 컴퓨터공학전공 강의자료

중간고사

11장 포인터

OCW_C언어 기초

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap12-고급기능.pptx

설계란 무엇인가?

Microsoft PowerPoint - chap06-5 [호환 모드]

슬라이드 1

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap03-변수와데이터형.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

컴파일러

PowerPoint Template

11장 포인터

Microsoft PowerPoint - [2009] 02.pptx

歯9장.PDF

untitled

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

PowerPoint Template

Microsoft PowerPoint - chap06-2pointer.ppt

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - 04_C_Language_Function

PowerPoint 프레젠테이션

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

설계란 무엇인가?

C 프로그래밊 개요

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2


02장.배열과 클래스

K&R2 Reference Manual 번역본

chap x: G입력

Microsoft PowerPoint - chap-11.pptx

Microsoft Word - FunctionCall

슬라이드 1

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

<4D F736F F F696E74202D20C1A632B0AD20BAAFBCF6BFCD20C0DAB7E12C20C0FCC3B3B8AEBFCD20C0D4C3E2B7C2>

Microsoft PowerPoint - chap04-연산자.pptx

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Microsoft PowerPoint - 05장(함수) [호환 모드]

OCW_C언어 기초

Microsoft PowerPoint - chap05.ppt

ch15

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter_04.pptx

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - C++ 5 .pptx

Infinity(∞) Strategy

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

윈도우즈프로그래밍(1)

13 주차문자열의표현과입출력

Data Structure

PowerPoint Presentation

C++-¿Ïº®Çؼ³10Àå

chap10.PDF

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

PowerPoint 프레젠테이션

설계란 무엇인가?

Transcription:

함수원형 (Function Prototype) 함수원형 (function prototype): 컴파일러에게함수에대하여미리알리는것 int compute_sum(int n); int main(void) int sum; sum = compute_sum(100); printf( sum=%d \n, sum); int compute_sum(int n) int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result; 4-21 compute_sum() 은함수이름이랬지 컴파일러

함수원형의형식 함수원형 (function prototype) : 미리컴파일러에게함수에대한정보를알리는것 반환형함수이름 ( 매개변수 1, 매개변수 2,... ); ( 예 ) int get_integer(void); int combination(int n, int r); ( 예 ) int get_integer(void); int combination(int, int); 자료형만적어주어도됨! 4-22

함수원형을사용하지않는예제 int compute_sum(int n) int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result; 함수정의가함수호출보다먼저오면함수원형을정의하지않아도된다. 그러나일반적인방법은아니다. int main(void) int sum; sum = compute_sum(100); printf( sum=%d \n, sum); 4-23

함수원형과헤더파일 보통은헤더파일에함수원형이선언되어있음 4-24

라이브러리함수 라이브러리함수 (library function): 컴파일러에서제공하는함수 표준입출력 : scanf(), printf() 수학연산 : sqrt(), rand(), sin(), cos() 문자열처리 : strcat(), strcpy(), strcmp(), strlen() 시간처리 : time() 오류처리 : exception handling 데이터검색과정렬 : search, sorting 4-25

난수 (random number) 함수 난수 (random number) 는규칙성이없이임의로생성되는수이다. 난수는암호학이나시뮬레이션, 게임등에서필수적이다. rand() 난수를생성하는함수 0 부터 RAND_MAX 까지의난수를생성 4-26

1 부터 45 사이로제한된난수생성 printf("%d ", 1+(rand()%45)); 42 18 35 41 45 20 하지만실행할때마다항상똑같은난수가발생된다. 4-27

실행할때마다다르게하려면 매번난수를다르게생성하려면시드 (seed) 를다르게하여야한다. srand( (unsigned)time( NULL ) ); #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX 45 int main( void ) int i; srand( (unsigned)time( NULL ) ); for( i = 0; i < 6; i++ ) printf("%d ", 1+rand()%MAX ); return 0; 4-28 Seed 를설정하는가장일반적인방법은현재의시각을시드로사용하는것이다. 현재시각은실행할때마다달라지기때문이다.

rand() 함수의한계 32,767 보다더큰난수의생성 rand() randomly generates 0 ~ RAND_MAX (32,767) integer value if big random numbers (e.g., 0 ~ 500,000) are necessary, rand() cannot be used 32,767 보다더큰난수로구성된배열생성 genbigrandarray(int ma[], int bigrandmax) generates non-duplicated big random numbers in the range of 0 ~ bigrandmax-1, where bigrandmax can be bigger than RAND_MAX (32,767) as result, the non-duplicated random numbers are contained in ma[] 4-29

BigRand() Generation of random numbers with bigrandmax > 32767 unsigned int uint_32, bigrand; uint_32 = ((unsigned int)rand() << 15) rand(); // bitwise left shift, bitwise OR bigrand = uint_32 % bigrandmax; 14 0 rand() << 15 uint_32 (represented by 30 valid bits) 14 bitwise OR uint_32 % bigrandmax 0 rand() : 0 ~ 32767 (represented by 15 bits) bigrand (0 ~ bigrandmax-1) 4-30

genbigrandarray() 1. Procedure genbigrandarray(int ma[], int bigrandmax) 2. char *flag; 3. unsigned int uint_32; 4. unsigned int bigrand; 5. int count = 0; 6. srand (time(0)); // use current time as seed; needs #include <ctime> 7. flag = (char *)malloc(sizeof(char) * bigrandmax); 8. while (count < range) 9. uint_32 = ((long) rand() << 15) rand(); // generation by bit-wise shift of 15-bit rand short integer // and bit-wise or 10. bigrand = uint_32 % bigrandmax; 11. if (flag[bigrand] == 1) // if this bigrand was already generated 12. continue; 13. else 14. flag[bigrand] = 1; // else, use this bigrand, and mark the flag 15. ma[count++] = bigrand; 16. 17. // end while 18. END Procedure 4-31

유틸리티함수 (Utility Function) 함수 설명 exit(int status) exit() 를호출하면호출프로세스를종료시킨다. int system(const char *command) system() 은문자열인수를운영체제의명령어셀에게 전달하여서실행시키는함수이다. #include <stdlib.h> #include <stdio.h> int main( void ) system("dir"); printf(" 아무키나치세요 \n"); getch(); system("cls"); return 0; C 드라이브의볼륨에는이름이없습니다. 볼륨일련번호 : 507A-3B27 c:\source\chapter02\hello\hello 디렉터리 2011-11-28 오후 04:32 <DIR>. 2011-11-28 오후 04:32 <DIR>.. 2011-11-16 오전 11:01 20 binary.bin... 4 개파일 5,296 바이트 3 개디렉터리 69,220,450,304 바이트남음아무키나치세요 4-32

수학라이브러리함수 (Math Library Function) 4-33

예제 // 삼각함수라이브러리 #include <math.h> #include <stdio.h> 여러수학함수들을포함하는표준라이브러리 int main( void ) double pi = 3.1415926535; double x, y; x = pi / 2; y = sin( x ); printf( "sin( %f ) = %f\n", x, y ); y = sinh( x ); printf( "sinh( %f ) = %f\n",x, y ); y = cos( x ); printf( "cos( %f ) = %f\n", x, y ); y = cosh( x ); printf( "cosh( %f ) = %f\n",x, y ); sin( 1.570796 ) = 1.000000 sinh( 1.570796 ) = 2.301299 cos( 1.570796 ) = 0.000000 cosh( 1.570796 ) = 2.509178 4-34

예제 #include <stdio.h> #include <math.h> 상수를정의하는전처리명령문 #define RAD_TO_DEG (45.0/atan(1)) int main(void) double w, h, r, theta; printf(" 밑변과높이를입력하시오 :"); scanf("%lf %lf", &w, &h); 밑변과높이를입력하시오 : 10.0 10.0 빗변 = 14.142136 각도 = 45.000000 r = sqrt(w * w + h * h); theta = RAD_TO_DEG * atan2(h, w); printf(" 빗변 = %f 각도 = %f\n", r, theta); return 0; 4-35

수학라이브러리함수들 abs(int x), fabs(double x) abs(-9) // 9를반환 fabs(-3.67) // 3.67을반환 pow(double x, double y) 인수 x 의 y- 거듭제곱인 x y 을계산한다. pow( 2.0, 3.0 ); // 8.0 을반환 sqrt(double x) 주어진수의제곱근을구한다. 만약에음수가입력되면오류가발생한다. sqrt( 9.0 ); // 3.0을반환 ceil(double x) ceil은x보다작지않은가장작은정수를반환 ceil( -2.9 ); // -2.0을반환 ceil( 2.9 ); // 3.0을반환 floor(double x) floor() 는 x보다크지않은가장큰정수를반환한다. floor( -2.9 ); // -3.0을반환 floor( 2.9 ); // 2.0을반환 4-36

변수 (variable) 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위, 가시성생존시간 (lifetime) : 메모리에존재하는시간연결 (linkage) : 다른영역에있는변수와의연결상태 범위 연결 생존시간 생성 x 3 x 소멸 4-37

변수 (variable) 변수의범위 (scope of variable) 전역변수 (Global Variable) 지역변수 (Local Variable) 함수 함수 전역변수 (global variable) 지역변수 (local variable) 지역변수 (local variable) 4-38

전역변수 (Global Variable) 와지역변수 (Local Variable) 4-39

이름이같은지역변수 4-40

지역변수의생존기간 int x; x 생성 블록 생존시간 소멸 4-41

지역변수예제 #include <stdio.h> int main(void) int i; 1212121212 temp for(i = 0;i < 5; i++) int temp = 1; printf("temp = %d\n", temp); temp++; return 0; temp = 1 temp = 1 temp = 1 temp = 1 temp = 1 블록이시작할때마다생성되어초기화된다. 4-42

함수의인수 #include <stdio.h> int inc(int counter); int main(void) int i; 10 10 i 11 i = 10; printf(" 함수호출전 i=%d\n", i); inc(i); printf(" 함수호출후 i=%d\n", i); return 0; int inc(int counter) counter++; return counter; 함수호출전 i=10 함수호출후 i=10 함수의인수도일종의지역변수 4-43

전역변수 (Global Variable) 전역변수 (global variable) 는함수외부에서선언되는변수이다. 전역변수의범위는소스파일전체이다. int x = 123; void sub1() x = 456; 전역변수 void sub2() x = 789; 4-44

전역변수의초기값과생존기간 #include <stdio.h> int counter; // 전역변수 void set_counter(int i) counter = i; // 직접사용가능 int main(void) printf("counter=%d\n", counter); counter = 100; // 직접사용가능 printf("counter=%d\n", counter); * 전역변수의초기값 : 0 * 생존기간 : 프로그램시작부터종료 20 i 100 200 set_counter(20); printf("counter=%d\n", counter); return 0; counter=0 counter=100 counter=20 4-45

전역변수의사용 // 전역변수를사용하여프로그램이복잡해지는경우 #include <stdio.h> void f(void); 출력은어떻게될까요? int i; int main(void) for(i = 0; i < 3; i++) f(); return 0; void f(void) for(i = 0; i < 5; i++) printf("#\n"); ( O X ) ( O ) 0123 4 56 i # # # # #

전역변수의사용 거의모든함수에서사용하는공통적인데이터는전역변수로한다. 일부의함수들만사용하는데이터는전역변수로하지말고함수의인수로전달한다. 전역변수의경우, 그값이다양한함수에서변경될수있어올바른값의범위를유지하는데에어려움이있을수있으므로, 가급적사용하지않도록한다. 4-47

같은이름의전역변수와지역변수 // 동일한이름의전역변수와지역변수 #include <stdio.h> int sum = 1; int main(void) int sum = 0; // 전역변수 // 지역변수 printf("sum = %d\n", sum); 지역변수가전역변수를가린다. 1 sum 0 sum < 전역변수 sum> < 지역변수 sum> return 0; sum = 0 4-48

생존기간 정적할당 (static allocation): 프로그램실행시간동안계속유지 자동할당 (automatic allocation): 블록에들어갈때생성 블록에서나올때소멸 4-49

저장유형지정자 static #include <stdio.h> void sub(void); int main(void) int i; for(i = 0;i < 3; i++) sub(); return 0; void sub(void) int auto_count = 0; static int static_count = 0; auto_count 01 0123 static_count 자동지역변수 auto_count++; static_count++; printf("auto_count=%d\n", auto_count); printf("static_count=%d\n", static_count); 4-50 정적지역변수로써 static 을붙이면지역변수가정적변수로된다. auto_count=1 static_count=1 auto_count=1 static_count=2 auto_count=1 static_count=3

저장유형지정자 register 레지스터 (register) 에변수를저장. register int i; for(i = 0;i < 100; i++) sum += i; CPU 안의레지스터에변수가저장됨 4-51

저장유형지정자 extern extern1.c #include <stdio.h> 컴파일러에게변수가다른곳에서선언되었음을알린다. int x; // 전역변수 extern int y; // 현재소스파일의뒷부분에선언된변수 extern int z; // 다른소스파일의변수 int main(void) extern int x; // 전역변수 x를참조한다. 없어도된다. x = 10; y = 20; z = 30; return 0; int y; // 전역변수 extern2.c int z; 4-52

연결 (Linkage) 연결 (linkage): 다른범위에속하는변수들을서로연결하는것 외부연결 내부연결 무연결 전역변수만이연결을가질수있다. 4-53

외부연결 (External Linkage) 전역변수를 extern 을이용하여서서로연결 4-54

linkage1.c 연결예제 #include <stdio.h> int all_files; // 다른소스파일에서도사용할수있는전역변수 static int this_file; // 현재의소스파일에서만사용할수있는전역변수 extern void sub(); int main(void) 연결 sub(); printf("%d\n", all_files); return 0; linkage2.c 010 0 extern int all_files; void sub(void) all_files = 10; 10 4-55

함수앞의 static main.c #include <stdio.h> extern void f2(); int main(void) f2(); return 0; sub.c static void f1() printf("f1() 이호출되었습니다.\n"); void f2() f1(); printf("f2() 가호출되었습니다.\n"); Static 이붙는함수는파일안에서만사용할수있다. 4-56

저장유형정리 일반적으로는자동저장유형사용권장 자주사용되는변수는레지스터유형 (register) 변수의값이함수호출이끝나도그값을유지하여야할필요가있다면지역정적 (local static) 만약많은함수에서공유되어야하는변수라면외부참조변수 저장유형 키워드 정의되는위치 범위 생존시간 자동 auto 함수내부 지역 임시 레지스터 register 함수내부 지역 임시 정적지역 static 함수내부 지역 영구 전역 없음 함수외부 모든소스파일 영구 정적전역 static 함수외부 하나의소스파일 영구 외부참조 extern 함수외부 모든소스파일 영구 4-57

가변매개변수 #include <stdio.h> #include <stdarg.h> int sum( int,... ); int main( void ) int answer=sum(4,4,3,2,1); printf( " 합은 %d입니다.\n", answer); return( 0); int sum( int num,... ) int answer = 0; va_list argptr; va_start( argptr, num ); for( ; num > 0; num-- ) answer += va_arg( argptr, int ); va_end( argptr ); return( answer); 4-58 합은 10 입니다.

재귀 (recursion) 란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 팩토리얼의정의 n! n 1 * ( n 1)! n n 1 2 4-59

팩토리얼 (Factorial) 구하기 팩토리얼프로그래밍 #2: (n-1)! 팩토리얼을현재작성중인함수를다시호출하여계산 ( 재귀호출 ) int factorial(int n) if( n<=1)return(1); else return (n * factorial(n-1) ); 3 n 3! 은? 3! 를계산하려면 3! = 3*2! 2! 를계산하려면 2! = 2*1! 1! 은 1 3! 는? 2! 는? 1! 는? 6 2 1 4-60

팩토리얼구하기 팩토리얼의호출순서 factorial(3) = 3 * factorial(2) = 3 * 2 * factorial(1) = 3 * 2 * 1 = 3 * 2 = 6 4 3 factorial(3) if( 3 <= 1 ) return 1; else return (3 * factorial(3-1) ); factorial(2) if( 2 <= 1 ) return 1; else return (2 * factorial(2-1) ); factorial(1) if( 1 <= 1 ) return 1;... 1 2 4-61

재귀알고리즘의구조 재귀알고리즘은다음과같은부분들을포함한다. 재귀호출을하는부분 재귀호출을멈추는부분 int factorial(int n) if( n == 1 ) return 1; else return n * factorial(n-1); 재귀를멈추는부분 재귀호출을하는부분 만약재귀호출을멈추는부분이없다면?. 시스템오류가발생할때까지무한정호출하게된다. 4-62

피보나치수열 (Fibonacci Series) 의계산 #1 순환호출을사용하면비효율적인예 피보나치수열 0,1,1,2,3,5,8,13,21, fib ( n ) fib ( n 0 1 2) fib ( n 1) n 0 n 1 otherwise 순환적인구현 int fib(int n) if( n==0 ) return 0; if( n==1 ) return 1; return (fib(n-1) + fib(n-2)); 4-63

피보나치수열의계산 순환호출을사용했을경우의비효율성 같은항이중복해서계산됨 예를들어 fib(6) 을호출하게되면 fib(3) 이 4번이나중복되어서계산됨 이러한현상은 n이커지면더심해짐 fib(6) fib(4) fib(5) fib(2) fib(3) fib(3) fib(4) fib(2) fib(3) fib(1) fib(2) fib(1) fib(2) fib(2) fib(3) 4-64

이진수 (Binary Number) 출력하기 정수를이진수로출력하는프로그램작성 순환알고리즘으로가능 4-65

이진수형식으로출력하기 // 2진수형식으로출력 #include <stdio.h> void print_binary(int x); int main(void) print_binary(9); return 0; void print_binary(int x) if( x>0) print_binary(x / 2); printf("%d", x % 2); // 순환호출 1001 // 나머지를출력 4-66

함수오버로딩 (Function Overloading) 동일한함수이름 double avg(double d1, double d2); double avg(double d1, double d2, double d3); double avg(int d1, int d2); double avg(int d1, int d2, int d3); 다른매개변수목록 Separate function definitions Function "signature" Function name & parameter list Must be "unique" for each function definition Allows same task performed on different data 4-67

함수오버로딩의예 : average() Function computes average of 2 numbers: double average(double n1, double n2) return ((n1 + n2) / 2.0); Now compute average of 3 numbers: double average(int n1, int n2, int n3) return ((double)(n1 + n2 + n3) / 2.0); Same name, two functions 4-68

Overloaded Average() Cont d Which function gets called? Depends on function call itself: avg = average(5.2, 6.7); Calls "two-parameter average()" avg = average(6, 8, 4); Calls "three-parameter average()" Compiler resolves invocation based on signature of function call "Matches" call with appropriate function Each considered separate function 4-69

1 st : Exact Match Overloading Resolution Looks for exact signature Where no argument conversion required 2 nd : Compatible Match Looks for "compatible" signature where automatic type conversion is possible: 1 st with promotion (e.g., int double) No loss of data 2 nd with demotion (e.g., double int) Possible loss of data 4-70

Overloading Resolution Example Given following functions: 1. void f(int n, double m); 2. void f(double n, int m); 3. void f(int n, int m); These calls: f(98, 99); Calls #3 f(5.3, 4); Calls #2 f(4.3, 5.2); Calls??? Avoid such confusing overloading 4-71

Automatic Type Conversion and Overloading Example Miles-per-Gallon double mpg(double miles, double gallons) return (miles/gallons); Example function calls: mpgcomputed = mpg(5, 20); Converts 5 & 20 to doubles, then passes mpgcomputed = mpg(5.8, 20.2); No conversion necessary mpgcomputed = mpg(5, 2.4); Converts 5 to 5.0, then passes values to function 4-72

Homework 4 4.1 중복되지않는 big random number array 생성 표준라이브러리 <stdlib.h> 에포함된 rand() 함수는 0 ~ RAND_MAX (32767) 범위의난수를생성하므로, 더큰범위의난수 ( 예를들어 0 ~ 100,000) 는사용할수없다. 이와같이 RAND_MAX를초과하는범위의난수 ( 즉, unsigned int가표현할수있는범위 : 0 ~ 2 30-1) 를발생시킬수있는 big_rand() 함수의 pseudo code를작성하라. (Hint: 15비트단위의난수를발생시키는 rand() 함수를두번호출하여, 이값을 unsigned long의상위15비트와하위 15비트로각각사용하는방법을고려할것.) genbigrandarray(int ma[], int range) 의 pseudo code를작성하라. 위 pseudo code를기반으로 C program을작성하라. 4-73