C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-5일차-
포인터, 배열, 문자열
정대진
(2014.08.08)
1
목차
 복습
 포인터
 다차원 배열
 문자열 함수
KAIST IT 아카데미
2
C Programming B반
복습 (1)
 배열
 1차원 배열
• Type 변수명[개수];
• 인덱스는 0부터 시작
• 배열의 초기화 방법
 for문 이용
 = {1, 2, 3, 4}
 = {1, 2} 부족한 부분은 0으로 채워짐
 문자열
• 마지막에 NULL 문자
• 문자열 scanf()에는 & 붙이지 않음
KAIST IT 아카데미
3
C Programming B반
복습 (2)
 포인터 변수






주소 값의 저장
&변수 => 변수의 주소값 반환
Type * 포인터변수명;
*포인터변수명 = 1;
포인터 변수 선언 시 항상 NULL(0)로 초기화!!!
배열 이름
• 포인터처럼 사용
• 배열 이름에 값 대입 불가




KAIST IT 아카데미
포인터를 배열처럼 사용 가능
포인터 연산 시 Type의 byte 수만큼 증감
“string”상수는 문자열의 주소값을 반환
포인터도 변수 타입이므로 배열로 생성 가능
4
C Programming B반
프로그래밍 실습 (문자열)
 사용자로부터 문자열을 입력받았을 때, 이것이 회문
(Palindrome)인지 아닌지 알려주는 함수 작성
 회문 : 앞으로 읽으나, 뒤로 읽으나 같은 단어
 구현의 편의를 위해서 대소문자까지 같은 경우만 회문으로 인정
KAIST IT 아카데미
5
C Programming B반
포인터와 함수
 함수의 파라미터 전달 방법
 값의 복사 (call by value)
 함수의 파라미터 전달 방법의 문제점
 원본 값의 변화 불가
 배열의 전달 불가
 극복 방법
 포인터 값 전달 (call by reference)
KAIST IT 아카데미
6
C Programming B반
포인터와 함수
 배열을 함수에 전달
KAIST IT 아카데미
7
C Programming B반
포인터와 함수
 배열 전달을 위한 올바른 예
KAIST IT 아카데미
8
C Programming B반
포인터와 함수
 배열을 함수의 인자로 전달받는 선언 (다른 느낌)
 파라미터 선언에서만 가능
KAIST IT 아카데미
9
C Programming B반
포인터와 함수
 이제서야 풀리는 scanf() 함수에서 ‘&’사용의 비밀
 일반 변수 scanf() / 문자열 scanf()
KAIST IT 아카데미
10
C Programming B반
프로그램 실습
 며칠 전에 만들 수 없었던 swap함수를
포인터를 이용하여 작성하시오
KAIST IT 아카데미
11
C Programming B반
포인터와 함수
 포인터 덕분에 생겨난 const 사용의 두 분류
 타입의 const
 포인터의 const
KAIST IT 아카데미
12
C Programming B반
포인터와 함수
 포인터 const는 왜 쓸까!?
 코드의 안전성을 높이기 위해서 사용
 파라미터로 넘어온 포인터를 변경하지 않기 위해서 사용
 const 선언의 변수를 수정 시, 컴파일 에러
KAIST IT 아카데미
13
C Programming B반
다차원 배열
 다차원 배열
KAIST IT 아카데미
14
C Programming B반
다차원 배열
 2차원 배열
KAIST IT 아카데미
15
C Programming B반
다차원 배열
KAIST IT 아카데미
16
C Programming B반
다차원 배열
 2차원 배열 예제
KAIST IT 아카데미
17
C Programming B반
다차원 배열
 2차원 배열의 메모리 할당 형태
KAIST IT 아카데미
18
C Programming B반
다차원 배열
 2차원 배열 초기화
KAIST IT 아카데미
19
C Programming B반
다차원 배열
 2차원 배열 초기화
 한 줄로 초기화 (좌상단 -> 우하단)
KAIST IT 아카데미
20
C Programming B반
다차원 배열
 2차원 배열 초기화
 공백을 주고 초기화
KAIST IT 아카데미
21
C Programming B반
프로그래밍 실습
 3x4 짜리 2차원 배열을 1차원 배열을 이용해서 나타내시오.
 초기화 : 1 2 3 4
5 6 7 8
9 10 11 12
 사용자 입력 좌표 (x,y) x : 1~4 , y : 1~3
 사용자로부터 좌표와 값을 입력 받고 변경 후,
화면에 변경된 매트릭스 출력
 사용자 입력 예시 : 1 3 5
-> (1,3) <현재값 9>에 5를 대입하라는 뜻
KAIST IT 아카데미
22
C Programming B반
다차원 배열
 3차원 배열
KAIST IT 아카데미
23
C Programming B반
포인터의 포인터
 포인터 변수를 포인팅
KAIST IT 아카데미
24
C Programming B반
포인터의 포인터
 포인터 변수 swap 1
KAIST IT 아카데미
25
C Programming B반
포인터의 포인터
 포인터 변수 swap 2
KAIST IT 아카데미
26
C Programming B반
포인터의 포인터
 3중 포인터까지!!!
KAIST IT 아카데미
27
C Programming B반
main()함수 파라미터
 메인 함수에도 파라미터가 들어 올 수 있음
 파라미터의 개수 (argc)
 파라미터 문자열 (argv)
int main(int argc, char *argv[])
(0번째 파라미터는 프로그램 path)
 main() 함수의 파라미터들을 모두 순서에 맞춰 출력해보세
요
KAIST IT 아카데미
28
C Programming B반
문자, 문자열 함수
 스트림
 OS에 의해서 자동 생성
KAIST IT 아카데미
29
C Programming B반
문자, 문자열 함수
 스트림의 종류
 자동 생성
 이외의 스트림은 프로그래머가 직접 생성
• 예시 : 파일 입출력 스트림
KAIST IT 아카데미
30
C Programming B반
문자, 문자열 함수
 문자 입출력 함수
KAIST IT 아카데미
31
C Programming B반
문자, 문자열 함수
 문자 입출력 예제
KAIST IT 아카데미
32
C Programming B반
문자, 문자열 함수
 EOF (End Of File)
 파일의 끝
 Windows에서
• CTRL + Z
 Linux에서
• CTRD + D
KAIST IT 아카데미
33
C Programming B반
문자, 문자열 함수
 왜 getchar() 함수는 int형이 반환 타입인가??
KAIST IT 아카데미
34
C Programming B반
문자, 문자열 함수
 문자열 입출력 함수
 문자열 출력
 puts() : 출력 후 개행
 fputs() : 출력만 함
KAIST IT 아카데미
35
C Programming B반
문자, 문자열 함수
 문자열 입력 함수
 gets() : 막 받음
 fgets() : 지정된 크기 만큼만
남은 건 버퍼에~
 gets() : 엔터는 저장 안함
 fgets() : 엔터도 저장
KAIST IT 아카데미
36
C Programming B반
문자, 문자열 함수
 입력 버퍼가 문제가 되나요!?
KAIST IT 아카데미
37
C Programming B반
문자, 문자열 함수
 표준 입출력 버퍼 비우는 함수
 stdin
• 입력 버퍼에 남아 있는 데이터의 소멸
• fflush()는 사실 출력버퍼를 위한 함수라서 결과를 보장받지 못함
 stdout
• 출력 버퍼에 저장된 데이터를 목적지로 최종 전송
KAIST IT 아카데미
38
C Programming B반
문자, 문자열 함수
 입력 버퍼 삭제
KAIST IT 아카데미
39
C Programming B반
문자, 문자열 함수
 문자열 길이 함수
KAIST IT 아카데미
40
C Programming B반
문자, 문자열 함수
 문자열 복사 함수
KAIST IT 아카데미
41
C Programming B반
문자, 문자열 함수
 문자열 복사 함수
KAIST IT 아카데미
42
C Programming B반
문자, 문자열 함수
 문자열 덧붙임 함수
KAIST IT 아카데미
43
C Programming B반
문자, 문자열 함수
 문자열 비교 함수
 비교 크기는 ASCII 코드 값
 int stricmp(const char *string1, constchar *string2);
 int strnicmp(const char *string1, constchar *string2, size_t count);
KAIST IT 아카데미
44
C Programming B반
문자, 문자열 함수
 문자 검색 함수
char *strchr(const char *string, int c);
char *strrchr(const char *string, int c);
#include <stdio.h>
#include <string.h>
void main(void)
{
char str[256];
char *ptr;
int count=0;
printf("아무 문자나 입력하세요 ");
scanf("%s",str);
for (ptr=str;;) {
ptr=strchr(ptr,'a');
if (ptr == NULL) {
break;
}
count++;
ptr++;
}
printf("문자열에 a가 %d개 있습니다.\n",count);
}
KAIST IT 아카데미
45
C Programming B반
문자, 문자열 함수
 문자열 검색 함수
char *strstr(cont char *string, const char *strSearch);
char *strpbrk(const char *string, const char *CharSet);
KAIST IT 아카데미
46
C Programming B반
문자, 문자열 함수
 문자열 검색 함수 (문자열 토큰 나누기) <공백, 컴마>
char *strtok(char *strToken, const char *strDelimit);
#include <Turboc.h>
#include <string.h>
void main()
{
char str[]="I am a boy,you are a girl";
char *p;
p=strtok(str," ,");
while (p!= NULL) {
puts(p);
p=strtok(NULL," ,");
}
}
KAIST IT 아카데미
47
C Programming B반
문자, 문자열 함수
 문자열 변환 함수
char *strtok(char *strToken, const char *strDelimit);
#include <stdio.h>
#include <string.h>
strcpy(str2,str);
strlwr(str2);
printf("strlwr => %s\n",str2);
void main(void)
{
char str[]="Made In Korea";
char str2[16];
strcpy(str2,str);
strrev(str2);
printf("strrev => %s\n",str2);
strcpy(str2,str);
strset(str2,'*');
printf("strset => %s\n",str2);
strcpy(str2,str);
strupr(str2);
printf("strupr => %s\n",str2);
KAIST IT 아카데미
}
48
C Programming B반
문자, 문자열 함수
 부수적 문자열 함수 1 (ctype.h)
KAIST IT 아카데미
49
C Programming B반
문자, 문자열 함수
 부수적 문자열 함수 2 (stdlib.h)
KAIST IT 아카데미
50
C Programming B반
프로그래밍 실습 (배운것과 관련 없음)
 사용자로부터 10진수의 정수를 받고, 이를 2진수로
변환 출력하는 함수 작성
KAIST IT 아카데미
51
C Programming B반
프로그래밍 숙제
 버블정렬의 기본을 알려 드릴테니,
정수형 배열을 입력 받아 버블 정렬하는 함수를 구현하시오.
(오름차순)
 버블(bubble) 정렬은 칠판으로 설명
KAIST IT 아카데미
52
C Programming B반
프로그래밍 숙제
 사용자가 입력한 문자열로부터 특정 문자열을 찾아서 바꿔
출력하는 프로그램을 작성하시오.
KAIST IT 아카데미
53
C Programming B반
오늘 수업 종료
 다음 수업 내용
 구조체
 앞으로 배울 내용들






KAIST IT 아카데미
포인터
다차원 배열
구조체
파일 입출력
메모리관리 (동적할당)
약간의 디버깅방법
54
C Programming B반