컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수

Slides:



Advertisements
Similar presentations
제6장 조건문.
Advertisements

2007 1학기 12 배열.
데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
제5장 제어명령
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
C 프로그래밍.
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
Chapter 06. 선택문.
변수와 자료형.
Chapter 10. 포인터.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
제 11 장 전처리기.
13. 포인터와 배열! 함께 이해하기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Chapter 11. 배열과 포인터.
Chapter 05. 입출력 함수.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
뇌를 자극하는 C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
-Part2- 제2장 다차원 배열이란 무엇인가.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
argc, argv 의 사용방법 #include <stdio.h>
17장. 포인터의 포인터.
어서와 C언어는 처음이지 제23장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
개정판 누구나 즐기는 C언어 콘서트 제3장 변수와 자료형 출처: pixabay.
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
11장. 1차원 배열.
Presentation transcript:

컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수 예를 들어, 게임 프로그램은 캐릭터 조작, 배경 그리기, 입력 장치 조작, … 각각은 세부 기능. 예를 들어 입력 장치는 키보드, 마우스, 조이스틱, … 이들 각각을 담당하는 전문적인 모듈 필요 이들 전문적인 모듈을 함수라 함 라이브러리 함수와 사용자 정의 함수 라이브러리 함수: C 언어가 미리 만들어 제공하는 함수 (부록 D 참조) printf(), scanf(), sqrt(), rand(), time(), … 사용자 정의 함수: 프로그래머가 필요하여 스스로 만든 함수

5.1 값 주고 받기

5.1.1 원리 예) 네 개 정수의 최대를 구하는 (함수를 사용하지 않은) 프로그램

함수 버전 함수의 일반적인 꼴

프로그램 [5.2]의 동작 라인 11에서 find_max4()를 호출함 (인수는 x1, x2, x3, x4) 이제부터 함수와 접선이 시작된다. 함수 find_max4() 의 실행은 세 단계를 거침 ①값 받기  ②실행하기  ③결과 값 반환

구체적으로 살펴 보면, (이 동작 원리를 꼭 이해해야 한다.)

5.1.2 몇 가지 유형 함수는 ①값을 받고, ②실행하고, ③결과를 넘겨 준다. 받는 값 (입력 값)과 넘겨 주는 값 (반환 값)의 몇 가지 유형

경우 3에 해당하는 주사위 시뮬레이션 함수 경우 4는 반환 값이 두 개 이상이므로 reurn으로 넘길 수 없다. 5.2절에서 포인터를 사용하는 새로운 방법 소개

5.2 포인터에 의한 참조 호출

포인터란 ? 포인터와 포인터 변수 메모리의 주소 값을 저장하기 위한 변수 "포인터"를 흔히 "포인터 변수"라 한다. 주소 값과 포인터는 다른 것이다. int main(void) { char c='a'; int n=7; double d=3.14; . . . . .

포인터란 무엇인가? (1) 그림을 통한 포인터의 이해 컴퓨터의 주소 체계에 따라 크기가 결정 포인터란 무엇인가? (1) 그림을 통한 포인터의 이해 컴퓨터의 주소 체계에 따라 크기가 결정 32비트 시스템 기반 : 4 바이트

포인터란 무엇인가? (2) 포인터의 타입과 선언 포인터 선언 시 사용되는 연산자 : * 포인터란 무엇인가? (2) 포인터의 타입과 선언 포인터 선언 시 사용되는 연산자 : * A형 포인터(A*) : A형 변수의 주소 값을 저장 int main(void) { int *a; // a라는 이름의 int형 포인터 char *b; // b라는 이름의 char형 포인터 double *c; // c라는 이름의 double형 포인터 . . . . .

포인터란 무엇인가? (3) 주소 관련 연산자(예제1  pointer1.c 참조) & 연산자 : 변수의 주소 값 반환 포인터란 무엇인가? (3) 주소 관련 연산자(예제1  pointer1.c 참조) & 연산자 : 변수의 주소 값 반환 * 연산자 : 포인터가 가리키는 메모리 참조 int main(void) { int a=2005; int *pA=&a; printf(“%d”, a); //직접 접근 printf(“%d”, *pA); // 간접 접근 . . . . .

예제1 (pointer1.c) /* pointer1.c */ #include <stdio.h> int main(void) { int a=2005; int* pA=&a; printf("pA : %d \n", pA); printf("&a : %d \n", &a); (*pA)++; //a++와 같은 의미를 지닌다. printf("a : %d \n", a); printf("*pA : %d \n", *pA); return 0; } 결과 pA : 1245052 &a : 1245052 a : 2006 *pA : 2006

포인터란 무엇인가? 포인터에 다양한 타입이 존재하는 이유 포인터 타입은 참조할 메모리의 크기 정보를 제공 #include <stdio.h>  int main(void) { int a=10; int *pA = &a;  double e=3.14; double *pE=&e;   printf(“%d %f”, *pA, *pE); return 0; }

잘못된 포인터의 사용 사례 1 사례 2 int main(void) { int *pA; // pA는 쓰레기 값으로 초기화 됨 return 0; } int main(void) { int* pA=100; // 100이 어딘 줄 알고??? *pA=10; return 0; }

포인터와 배열의 관계 배열의 이름의 정체 배열 이름은 첫 번째 요소의 주소 값을 나타낸다. pointer_array1.c 참조 int a[5]={0, 1, 2, 3, 4}

예제 ( pointer_array1.c) #include <stdio.h> int main(void) { int a[5]={0, 1, 2, 3, 4}; printf("%d, %d \n", a[0], a[1]); printf("%d 번지 , %d 번지 \n", &a[0], &a[1]); printf("배열 이름 : %d \n", a); return 0; } 결론 0, 1 1245036 번지 , 1245040 번지 배열 이름 : 1245036

포인터와 배열의 관계 배열 이름과 포인터 비교 비교 대상 비교 조건 포인터 배열 이름 이름이 존재하는가 물론 있다. 당연히 있다. 무엇을 나타내는가 메모리의 주소 변수인가 상수인가 변수 상수

5.2.1 메모리에 대한 이해 메모리는 주소를 갖는다. 메모리는 운영 체제가 관리한다. 변수 생성 시 주소 할당 변수 소멸 시 회수

5.2.2 포인터 라인 4에서 포인터 변수 (줄여서 포인터라 부름) 정의 포인터는 ‘다른 변수의 주소’를 갖는다. 라인 4에서 포인터 변수 (줄여서 포인터라 부름) 정의 포인터는 ‘다른 변수의 주소’를 갖는다. 포인터는 라인 4처럼 변수 앞에 *를 붙여 정의한다. 이제 변수 p는 정수가 아니라 어떤 정수 변수의 주소를 갖는다. 라인 8의 p=&a에 주목해 보면, 변수 앞에 붙어 있는 &는 주소 연산자 즉 &a는 변수 a의 주소

그림 5.3으로 보다 구체적으로 설명한다. 그림 5.3(c): 라인 8 수행 후 그림 5.3(d): 라인 9 수행 후 *p는 포인터 p가 가리키는 곳의 내용 이때 *는 내용 연산자

포인터 연산의 특성 뺄셈 허용, 덧셈 허용 안됨 자료 형에 민감 (즉 실수 포인터가 정수 변수를 가리킬 수 없다.)

5.2.3 값 호출과 참조 호출 네 개 정수의 최대와 평균과 구하여 반환하는 함수를 생각해 보자. 반환 값이 두 개이므로 return으로 넘길 수 없다. 따라서 parameter_list를 통해 넘겨야 함 프로그램 [5.5]는 이런 생각으로 작성한 프로그램 여섯 개 매개 변수 중 앞의 네 개는 ‘값을 받는’ 역할이고 뒤의 두 개는 ‘결과를 반환하는’ 역할 하지만 프로그램 [5.5]는 오동작 (C는 값 호출을 사용하기 때문) C 언어는 “매개 변수 교환을 위해 값 호출 방식을” 사용한다.

프로그램 [5.5]의 동작을 그림으로 조목조목 살펴 보면, 라인 6-7에서 변수 생성, 라인 9에서 변수 초기화 라인 10에서 함수 호출, 이때 정보 교환 (매개 변수에 새로운 주소 할당) 라인 17-27에서 최대와 평균 계산 라인 10으로 귀환 (이때 매개 변수 소멸)

결국 find_maxave4()는 주소 1-6 (main()의 변수)에는 영향을 주지 못함 새로운 종이에 계산을 한 후, 그 종이를 휴지통에 버린 꼴 만일 참조 호출이었다면, (하지만 C 언어는 값 호출 방식을 사용한다.) 매개 변수를 위해 새로운 메모리를 할당하지 않는다. 같은 주소가 단지 다른 이름으로 불릴 뿐이다. (“동명 이인”)

5.2.4 포인터를 이용한 참조 호출 모방 C 언어는 포인터를 이용하여 참조 호출을 모방한다. 프로그램 [5.6]은 포인터를 이용하여 작성한 것

이 프로그램은 왜 제대로 작동할까? (이 동작 원리를 꼭 이해해야 한다.) 라인 10에서 함수 호출, 이때 정보 교환 pmax와 pave는 각각 main() 내의 max와 ave를 가리키는 포인터 라인 17-27에서 최대와 평균을 pmax와 pave가 가리키는 곳에 저장 계산은 다른 종이에서 하지만 답은 답안지에 제대로 적은 꼴

또 다른 예 (두 값의 교환)

5.3 변수의 생과 사

5.3.1 내부 변수와 외부 변수 내부 변수 내부 변수 어떤 함수 내에 선언된 변수 해당 함수 내에서만 유효 함수가 기동하면 생성되고 끝나면 자동 소멸됨 지역 변수, 자동 변수라고도 부름 내부 변수

외부 변수 어떠한 함수에도 속하지 않은 변수 선언 위치부터 프로그램 끝까지 유효 프로그램 시작 때 생성되고 프로그램 끝날 때까지 지속 전역부 변수라고도 부름 함수는 ‘전역 변수를 통해 정보 교환할’ 수도 있다. 오른쪽 find_maxave4()는 결과를 전역 변수를 통해 반환