100 likes | 223 Views
인수 전달. call by value 함수가 호출될 때 가인수의 메모리가 할당되며 실인수의 값만 가인수에 전달되어 저장됨 함수 안에서 가인수의 값을 바꾸어도 함수 종료 후 호출한 곳으로 돌아 갔을 때 실인수의 값은 호출전과 같음 함수간의 독립성 보장 call by address 함수의 가인수로 포인터 변수를 이용하는 방식 함수가 호출될 때 가인수의 메모리 ( 포인터로 4 바이트 ) 가 할당되며 실인수의 주소가 전달되어 저장됨 함수 안에서 가인수 ( 포인터 ) 를 이용하여 실인수의 내용을 변경할 수 있다.
E N D
인수 전달 • call by value • 함수가 호출될 때 가인수의 메모리가 할당되며 실인수의 값만 가인수에 전달되어 저장됨 • 함수 안에서 가인수의 값을 바꾸어도 함수 종료 후 호출한 곳으로 돌아 갔을 때 실인수의 값은 호출전과 같음 함수간의 독립성 보장 • call by address • 함수의 가인수로 포인터 변수를 이용하는 방식 • 함수가 호출될 때 가인수의 메모리(포인터로 4바이트)가 할당되며 실인수의 주소가 전달되어 저장됨 • 함수 안에서 가인수(포인터)를 이용하여 실인수의 내용을 변경할 수 있다.
call by address 함수명(실인자의 주소) • 함수 호출시 int a = 10; func(&a); a를 출력하면? • 함수 정의시 void func(int * ptr) { *ptr = 20; } a 10 12FF78번지 리턴형 함수명(자료형 * 가인수) { 본체 } ptr 12FF78
10 5 a b x y 예제 11.10 참조에 의한 호출(call by reference)의 예 • 두 변수 a와 b의 값을 교환하는 함수 작성 void swap(int __ x, int __ y ); //원형 선언 void main(){ int a=10, b=5; printf(“교환전: %d, %d \n”, a, b); swap(___a, ___b); printf(“교환후: %d, %d \n”, a, b); } void swap(int ___ x, int ___ y) { int temp; temp = ___x; ___x = ___y; ___y = temp; } * * & & * * * * * * temp
난수(random number) / 노트 • 함수 int rand(void) • #include <stdlib.h>가 필요 • rand() 0~32767(RAND_MAX) 사이의 난수가 리턴됨 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000 4 번째 난수 : 32767 : 10 번째 난수 : 78 • for (i=1; i<=10 ; i++) • printf(“ %2d 번째 난수 : %d \n”, i, rand());
난수(random number) / 노트 • RAND_MAX rand()가 발생시키는 최대 난수값, 32767 • 0, 1, 2 중 하나의 난수 rand() % 3 • 1, 2, 3 중 하나의 난수 rand() % 3 + 1 • 0 ~ end 사이의 실수형 난수 rand() * end / RAND_MAX;
난수(random number) / 노트 • 컴퓨터와 가위, 바위, 보 게임을 하고 싶다면? • 게임에서 사람이 낼 것 • 가위/바위/보 중 하나이며 입력을 통해 결정할 수 있다. • 컴퓨터가 낼 것 • 프로그램에서 가위/바위/보 중 하나를 결정해줘야 한다. • 가장 단순하게는 난수를 이용하여 셋 중 아무거나 한 개로 computer = rand() % 3 + 1; 1~3 중 하나가 됨 • 좀 더 재밌게 실제 게임과 비슷하게 하려면 이전 게임에서 사람이 낸 것과 게임 결과를 토대로 이길 수 있는 것으로 결정하도록 인공지능? 기능을 추가한다. 컴퓨터와 가위바위보 게임을!!! 무엇을 내겠습니까> 1.가위 2.바위 3.보 ? _ scanf(“%d”, &man)
난수(random number) / 노트 • 가위, 바위, 보에 해당하는 1, 2, 3을 매크로 상수로 정의하면 프로그램하기가 훨씬 쉬워진다. • #define GAWI 1 • #define BAWI 2 • #define BO 3 • : • scanf(“%d”, &man); • computer = rand() % 3 + 1; • if (man==BAWI && computer==GAWI) • printf(“축하! 당신이 이겼습니다!”); • :
난수(random number) / 노트 • 함수 void srand(unsigned seed); • 난수 발생기의 seed 값을 설정해주는 함수 • seed값이 같다면 프로그램을 새로 실행해도 같은 순서의 난수들이 발생 앞의 4번 슬라이드의 프로그램을 실행하면 실행할 때마다 같은 순서의 난수가 발생하는 것을 확인할 수 있다. 가위바위보 게임과 같은 경우 여러 번 게임을 하다보면 컴퓨터가 다음 번에 낼 것이 무엇인지 알 수 있다. • 프로그램이 실행될 때마다 다른 일련의 난수들을 발생시키기 난수 발생기에서 난수를 얻기 전에 난수 발생기의 씨드를 지정해주되 프로그램이 새로 실행될 때마다 다른 씨드값이 지정되도록 해야 한다. how? 현재 시간을 seed로 지정함 • 프로그램이 실행될 때마다 시간은 바뀌므로 씨드가 달라진다. • srand(time(NULL));
난수(random number) / 노트 프로그램을 실행할 때 마다 이 함수가 실행되는 시간이 바뀌므로 씨드가 달라지고 이후로 rand()에서 얻는 난수들이 이전 실행때와 다르다. • srand(time(NULL)); // 현재 시간을 seed로 설정 • for (i=1; i<=10 ; i++) • printf(“ %d 번째 난수 : \n”, i, rand()); 첫번째 실행결과 3000 1 15000 : 78 두번째 실행결과 250 300 4 : 32000 세번째 실행결과 45 12000 20000 : 799
커서를 화면의 원하는 위치로 이동하기/ 노트 • gotoxy( x, y); =>커서를 (x, y) 좌표 지점으로 이동 #include <windows.h> void gotoxy(int x, int y) { COORD Cur; Cur.X=x; Cur.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur); } void main( ) { gotoxy(20, 15); printf( “***** 20, 15“); gotoxy(20, 10) ; printf(“***** 20, 10”); } x (0, 0) 모니터 y (x, y) (79,23)