C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-6일차-
문자열, 구조체
정대진
(2014.08.11)
1
목차
 복습
 문자열 함수
 구조체
 열거형
KAIST IT 아카데미
2
C Programming B반
공지!!
 드디어 내일 휴강!!!!!!!!!!!!!
KAIST IT 아카데미
3
C Programming B반
복습 (1)
 포인터와 함수
 Call-by-reference
• 배열까지 파라미터 가능
 swap() 함수
 Const
• 타입의 const
• 포인터의 const
 다차원 배열
 2차원 배열
• TYPE arr[세로길이][가로길이];
• 사실은 1차원으로 메모리에 나열
• 초기화
 1줄 초기화
 공백 초기화
 3차원 이상 배열도 생성 가능
KAIST IT 아카데미
4
C Programming B반
main()함수 파라미터
 메인 함수에도 파라미터가 들어 올 수 있음
 파라미터의 개수 (argc)
 파라미터 문자열 (argv)
int main(int argc, char *argv[])
(0번째 파라미터는 프로그램 path)
 main() 함수의 파라미터들을 모두 순서에 맞춰 출력해보세
요
KAIST IT 아카데미
5
C Programming B반
문자, 문자열 함수
 스트림
 OS에 의해서 자동 생성
KAIST IT 아카데미
6
C Programming B반
문자, 문자열 함수
 스트림의 종류
 자동 생성
 이외의 스트림은 프로그래머가 직접 생성
• 예시 : 파일 입출력 스트림
KAIST IT 아카데미
7
C Programming B반
문자, 문자열 함수
 문자 입출력 함수
KAIST IT 아카데미
8
C Programming B반
문자, 문자열 함수
 문자 입출력 예제
KAIST IT 아카데미
9
C Programming B반
문자, 문자열 함수
 EOF (End Of File)
 파일의 끝
 Windows에서
• CTRL + Z
 Linux에서
• CTRD + D
KAIST IT 아카데미
10
C Programming B반
문자, 문자열 함수
 왜 getchar() 함수는 int형이 반환 타입인가??
KAIST IT 아카데미
11
C Programming B반
문자, 문자열 함수
 문자열 입출력 함수
 문자열 출력
 puts() : 출력 후 개행
 fputs() : 출력만 함
KAIST IT 아카데미
12
C Programming B반
문자, 문자열 함수
 문자열 입력 함수
 gets() : 막 받음
 fgets() : 지정된 크기 만큼만
남은 건 버퍼에~
 gets() : 엔터는 저장 안함
 fgets() : 엔터도 저장
KAIST IT 아카데미
13
C Programming B반
문자, 문자열 함수
 입력 버퍼가 문제가 되나요!?
KAIST IT 아카데미
14
C Programming B반
문자, 문자열 함수
 표준 입출력 버퍼 비우는 함수
 stdin
• 입력 버퍼에 남아 있는 데이터의 소멸
• fflush()는 사실 출력버퍼를 위한 함수라서 결과를 보장받지 못함
 stdout
• 출력 버퍼에 저장된 데이터를 목적지로 최종 전송
KAIST IT 아카데미
15
C Programming B반
문자, 문자열 함수
 입력 버퍼 삭제
KAIST IT 아카데미
16
C Programming B반
문자, 문자열 함수
 문자열 길이 함수
KAIST IT 아카데미
17
C Programming B반
문자, 문자열 함수
 문자열 복사 함수
KAIST IT 아카데미
18
C Programming B반
문자, 문자열 함수
 문자열 복사 함수
KAIST IT 아카데미
19
C Programming B반
문자, 문자열 함수
 문자열 덧붙임 함수
KAIST IT 아카데미
20
C Programming B반
문자, 문자열 함수
 문자열 비교 함수
 비교 크기는 ASCII 코드 값
 int stricmp(const char *string1, constchar *string2);
 int strnicmp(const char *string1, constchar *string2, size_t count);
KAIST IT 아카데미
21
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 아카데미
22
C Programming B반
문자, 문자열 함수
 문자열 검색 함수
char *strstr(cont char *string, const char *strSearch);
char *strpbrk(const char *string, const char *CharSet);
KAIST IT 아카데미
23
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 아카데미
24
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 아카데미
}
25
C Programming B반
문자, 문자열 함수
 부수적 문자열 함수 1 (ctype.h)
KAIST IT 아카데미
26
C Programming B반
문자, 문자열 함수
 부수적 문자열 함수 2 (stdlib.h)
KAIST IT 아카데미
27
C Programming B반
프로그래밍 실습
 사용자가 입력한 문자열로부터 특정 문자열을 찾아서 바꿔
출력하는 프로그램을 작성하시오.
KAIST IT 아카데미
28
C Programming B반
구조체
 구조체
 우리가 알고 있는 자료형을 통해 조합한 새로운 자료형
KAIST IT 아카데미
29
C Programming B반
구조체
 구조체 변수 선언
KAIST IT 아카데미
30
C Programming B반
구조체
 구조체 변수의 멤버 접근 방식
KAIST IT 아카데미
31
C Programming B반
프로그래밍 실습
 점의 (x,y,z) 좌표를 저장하는 구조체를 선언하고,
이 구조체를 이용하여 두 점의 좌표를 입력 받고,
두 점 사이의 거리를 출력하는 프로그램을 작성하시오
KAIST IT 아카데미
32
C Programming B반
구조체
 구조체 정의와 동시에 변수 선언
KAIST IT 아카데미
33
C Programming B반
구조체
 구조체 변수의 초기화
 배열 초기화와 비슷
KAIST IT 아카데미
34
C Programming B반
구조체
 구조체 배열의 선언과 접근
KAIST IT 아카데미
35
C Programming B반
구조체
 구조체 배열의 초기화
KAIST IT 아카데미
36
C Programming B반
구조체
 구조체 배열의 초기화 예제
KAIST IT 아카데미
37
C Programming B반
구조체
 구조체 변수와 포인터
KAIST IT 아카데미
38
C Programming B반
구조체
 구조체 변수와 포인터 예제
KAIST IT 아카데미
39
C Programming B반
구조체

KAIST IT 아카데미
40
C Programming B반
구조체
 중첩 구조체
struct tag_A {
int i;
tag_A A;
};
struct tag_A {
int i;
tag_B B;
};
struct tag_A {
int i;
tag_A *pA;
};
struct tag_B {
double d;
tag_A A;
};
KAIST IT 아카데미
41
C Programming B반
구조체
 포인터 변수 멤버
KAIST IT 아카데미
42
C Programming B반
구조체
 구조체 변수와 첫 번째 멤버의 주소 값
KAIST IT 아카데미
43
C Programming B반
구조체 (typedef)
 TYPE을 정의
KAIST IT 아카데미
 구조체 응용
44
C Programming B반
구조체

KAIST IT 아카데미
45
C Programming B반
구조체
 typdef 구조체 이름 생략
KAIST IT 아카데미
46
C Programming B반
구조체
 함수 파라미터로의 구조체
 구조체가 통째로 파라미터 전달
 구조체가 통째로 반환
 배열이 멤버라면 배열까지 복사
 여러 개의 변수 같지만
사실 하나의 변수로 인식
 Call-by-reference도 가능
KAIST IT 아카데미
47
C Programming B반
구조체
 구조체 대상의 연산
 구조체끼리 덧셈 뺄셈
등의 계산은 불가능
 원하면 정의해야 함
KAIST IT 아카데미
48
C Programming B반
구조체
 구조체의 얕은 복사
struct Friend {
char *pName;
int Age;
double Height;
};
void main()
{
struct Friend Albert={NULL,80,165.0};
struct Friend Kim;
Albert.pName=(char *)malloc(32);
strcpy(Albert.pName, "알버트 아인슈타인");
Kim=Albert;
printf("이름=%s, 나이=%d, 키=%.1f\n", Kim.pName,Kim.Age,Kim.Height);
strcpy(Albert.pName,"아이작 뉴튼");
printf("이름=%s, 나이=%d, 키=%.1f\n", Kim.pName,Kim.Age,Kim.Height);
free(Albert.pName);
}
KAIST IT 아카데미
49
C Programming B반
구조체
 구조체의 깊은 복사
struct Friend {
char *pName;
int Age;
double Height;
};
void main()
{
struct Friend Albert={NULL,80,165.0};
struct Friend Kim;
Albert.pName=(char *)malloc(32);
strcpy(Albert.pName, "알버트 아인슈타인");
Kim=Albert;
Kim.pName = (char*)malloc(strlen(Albert.pName)+1);
strcpy(Kim.pName, Albert.pName);
printf("이름=%s, 나이=%d, 키=%.1f\n", Kim.pName,Kim.Age,Kim.Height);
strcpy(Albert.pName,"아이작 뉴튼");
printf("이름=%s, 나이=%d, 키=%.1f\n", Kim.pName,Kim.Age,Kim.Height);
free(Albert.pName);
free(Kim.pNmae);
}
KAIST IT 아카데미
50
C Programming B반
열거형
 열거형의 정의와 변수 선언
KAIST IT 아카데미
51
C Programming B반
열거형
 열거형의 정의와 변수 선언
KAIST IT 아카데미
52
C Programming B반
열거형
 열거형 상수의 값 결정 방식
KAIST IT 아카데미
53
C Programming B반
열거형
 열거형의 유용함
 프로그램의 가독성
KAIST IT 아카데미
54
C Programming B반
오늘 수업 종료
 다음 수업 내용
 메모리관리 (동적할당)
 전처리기
 파일 입출력
KAIST IT 아카데미
55
C Programming B반