C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-4일차-
배열, 포인터
정대진
(2014.08.07)
목차
 복습
 표준함수
 배열
 포인터
KAIST IT 아카데미
2
C Programming B반
복습 (1)
 조건문




if 문
if-else문
if-else-if-else…
switch-case문
• break; 사용
• default: 사용
 반복문 탈출, 생략
 break;
 continue;
KAIST IT 아카데미
반복문을 아주 탈출할 때
반복문 아랫 부분을 생략할 때
3
C Programming B반
복습 (2)
 함수







하나의 일만 담당하도록 디자인
반환형태
함수 이름
입력 파라미터
함수 본체
지역변수
전역변수
 표준 함수
 삼각함수
 지수함수
 정수화함수
KAIST IT 아카데미
4
C Programming B반
복습용 프로그램 실습
 사용자로부터 숫자 (1~10) 사이의 값을 입력 받고,
그 수만큼 직각삼각형의 크기를 늘려
출력하는 프로그램을 작성하시오
 예시 (숫자 5입력 시)
*
**
***
****
*****
KAIST IT 아카데미
5
C Programming B반
표준 함수 사용
 절대값 함수
 헤더파일 : math.h
 int abs(int n);
 long labs(long n);
 double fabs(double x);
KAIST IT 아카데미
6
C Programming B반
표준 함수 사용
 표준 난수 함수
 헤더파일 : stdlib.h
 int rand(void);
//0~RANMAX 범위의 수 무작위 추출
 void srand(unsigned int seed);
// 난수발생기 시드 초기화
KAIST IT 아카데미
7
C Programming B반
표준 함수 사용
 표준 난수 함수
 헤더파일 : stdlib.h
 int rand(void);
//0~RANMAX 범위의 수 무작위 추출
 void srand(unsigned int seed);
// 난수발생기 시드 초기화
 난수 발생
• 시간으로 초기화
 srand((unsigned)time(NULL));
• rand() % n
KAIST IT 아카데미
8
C Programming B반
배열
 배열의 필요성
KAIST IT 아카데미
9
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
10
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
11
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
12
C Programming B반
프로그램 실습
 5명의 성적을 입력받기 위한 배열을 생성하고,
5명의 점수를 순차적으로 입력 받아 평균을 출력하는
프로그램을 만드시오
KAIST IT 아카데미
13
C Programming B반
배열
 문자열
KAIST IT 아카데미
14
C Programming B반
배열
 문자열
 NULL 문자
KAIST IT 아카데미
15
C Programming B반
배열
 문자열
 문자열 입력
• 배열의 이름 앞에는 &를 붙이지 않음!!!
KAIST IT 아카데미
16
C Programming B반
프로그램 실습
 영문으로 구성된 긴 단어(의미있을 필요 없음)를 입력
받아 단어의 역순으로 화면에 출력하라
 ex) alpha -> ahpla
KAIST IT 아카데미
17
C Programming B반
프로그램 실습
 영문 소문자로 구성된 긴 문장을 입력받아 이 문자열 내
의 각 알파벳 문자 개수를 구하여 출력하라.
 ex) alpha -> a:2, h:1, l:1, p:1
KAIST IT 아카데미
18
C Programming B반
포인터
 포인터 변수
 주소 값의 저장을 목적으로 선언
KAIST IT 아카데미
19
C Programming B반
포인터
 포인터 변수
KAIST IT 아카데미
20
C Programming B반
포인터
 포인터 변수
 포인터 변수 선언에서 *의 위치에 따른 차이 없음
KAIST IT 아카데미
21
C Programming B반
포인터
 & 연산자




KAIST IT 아카데미
변수의 주소를 가져오는 연산자
단항 연산자
2항 연산자 & : bit 연산자 AND
타입을 일치시켜 저장해야 함
22
C Programming B반
포인터
 포인터를 통한 접근
KAIST IT 아카데미
23
C Programming B반
포인터
 포인터 타입의 존재 이유
 * 연산을 통하여 메모리의 접근 기준 마련
 주소값 : 4byte 정수
KAIST IT 아카데미
24
C Programming B반
포인터
 포인터 사용 시 주의 점
KAIST IT 아카데미
25
C Programming B반
배열과 포인터
 배열의 이름
KAIST IT 아카데미
26
C Programming B반
배열과 포인터
 배열의 이름을 포인터로 사용
KAIST IT 아카데미
27
C Programming B반
배열과 포인터
 포인터를 배열처럼 사용
KAIST IT 아카데미
28
C Programming B반
포인터 연산
 어떠한 타입의 포인터 변수의 증감 연산 시
 sizeof(type)만큼 증감
KAIST IT 아카데미
29
C Programming B반
포인터 연산
 포인터 연산을 통한 데이터 접근
 포인터연산(*)이 산술연산보다 우선순위가 높음
KAIST IT 아카데미
30
C Programming B반
포인터
 상수를 가리키는 포인터
KAIST IT 아카데미
31
C Programming B반
포인터
 상수를 가리키는 포인터
KAIST IT 아카데미
32
C Programming B반
포인터 배열
 포인터 변수로 이루어진 배열
KAIST IT 아카데미
33
C Programming B반
포인터 배열
 포인터 변수로 이루어진 배열
KAIST IT 아카데미
34
C Programming B반
포인터와 함수
 함수의 파라미터 전달 방법
 값의 복사 (call by value)
 함수의 파라미터 전달 방법의 문제점
 원본 값의 변화 불가
 배열의 전달 불가
 극복 방법
 포인터 값 전달 (call by reference)
KAIST IT 아카데미
35
C Programming B반
포인터와 함수
 배열을 함수에 전달
KAIST IT 아카데미
36
C Programming B반
포인터와 함수
 배열 전달을 위한 올바른 예
KAIST IT 아카데미
37
C Programming B반
포인터와 함수
 배열을 함수의 인자로 전달받는 선언 (다른 느낌)
 파라미터 선언에서만 가능
KAIST IT 아카데미
38
C Programming B반
포인터와 함수
 이제서야 풀리는 scanf() 함수에서 ‘&’사용의 비밀
 일반 변수 scanf() / 문자열 scanf()
KAIST IT 아카데미
39
C Programming B반
프로그램 실습
 어제 못 만들었던 swap함수를 포인터를 이용하여 작성하시
오
KAIST IT 아카데미
40
C Programming B반
포인터와 함수
 포인터 덕분에 생겨나 const 사용의 두 분류
 타입의 const
 포인터의 const
KAIST IT 아카데미
41
C Programming B반
포인터와 함수
 포인터 const는 왜 쓸까!?
 코드의 안전성을 높이기 위해서 사용
 파라미터로 넘어온 포인터를 변경하지 않기 위해서 사용
 const 선언의 변수를 수정 시, 컴파일 에러
KAIST IT 아카데미
42
C Programming B반
프로그래밍 실습 (배운것과 관련 없음)
 사용자로부터 10진수의 정수를 받고, 이를 2진수로
변환 출력하는 함수 작성
KAIST IT 아카데미
43
C Programming B반
프로그래밍 실습 (배운것과 관련 없음)
 사용자로부터 문자열을 입력받았을 때, 이것이 회문
(Palindrome)인지 아닌지 알려주는 함수 작성
 회문 : 앞으로 읽으나, 뒤로 읽으나 같은 단어
 구현의 편의를 위해서 대소문자까지 같은 경우만 회문으로 인정
KAIST IT 아카데미
44
C Programming B반
프로그래밍 실습 (배운것과 관련 없음)
 사용자로부터 문자열을 입력받았을 때, 이것이 회문
(Palindrome)인지 아닌지 알려주는 함수 작성
 회문 : 앞으로 읽으나, 뒤로 읽으나 같은 단어
 구현의 편의를 위해서 대소문자까지 같은 경우만 회문으로 인정
KAIST IT 아카데미
45
C Programming B반
프로그래밍 실습 (배운것과 관련 없음)
 버블정렬의 기본을 알려 드릴테니,
정수형 배열을 입력 받아 버블 정렬하는 함수를 구현하시오.
(오름차순)
 버블(bubble) 정렬은 칠판으로 설명
KAIST IT 아카데미
46
C Programming B반
main()함수 파라미터
 메인 함수에도 파라미터가 들어 올 수 있음
 파라미터의 개수 (argc)
 파라미터 문자열 (argv)
int main(int argc, char *argv[])
(0번째 파라미터는 프로그램 path)
 main() 함수의 파라미터들을 모두 순서에 맞춰 출력해보세
요
KAIST IT 아카데미
47
C Programming B반
오늘 수업 종료
 다음 수업 내용
 다차원배열
 포인터
 앞으로 배울 내용들







KAIST IT 아카데미
포인터
다차원 배열
문자와 문자열
구조체
파일 입출력
메모리관리 (동적할당)
약간의 디버깅방법
C Programming B반