C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-3일차-
조건문, 함수
정대진
(2014.08.06)
목차
 복습
 조건문
 반복문 생략, 탈출
 조건문2
 함수
 배열
KAIST IT 아카데미
2
C Programming B반
복습 (1)
 데이터 표현 방식





10진수, 16진수, 8진수
Bit 연산자
sizeof()
ASCII 코드
상수
• 심볼릭 상수 (const)
 형 변환
• 자동 형 변환
• 강제 형 변환 (casting)
 printf() 함수
 서식 출력
 scanf() 함수
KAIST IT 아카데미
3
C Programming B반
복습 (2)
 반복문
 while 문
 do while 문
• 무조건 한 번 실행
• 마지막 while()에 세미콜론 필수
 for 문
• 가장 많이 쓰는 반복문
• 한 줄에 필요요소 모두 작성
 반복을 위한 변수 초기화
 조건검사
 조건을 넘어서게 만드는 연산
KAIST IT 아카데미
4
C Programming B반
복습용 프로그램 실습
 사용자로부터 숫자 (1~10) 사이의 값을 입력 받고,
그 수만큼 직각삼각형의 크기를 늘려
출력하는 프로그램을 작성하시오
 예시 (숫자 5입력 시)
*
**
***
****
*****
KAIST IT 아카데미
5
C Programming B반
조건문
 if 문
KAIST IT 아카데미
6
C Programming B반
조건문
 if문을 이용한 간단한 계산기 작성
이 프로그램의 비효율성은!?
KAIST IT 아카데미
7
C Programming B반
조건문
 if-else 문
KAIST IT 아카데미
8
C Programming B반
조건문
 if-else-if-else… 구성
KAIST IT 아카데미
9
C Programming B반
조건문
 if-else-if-else… 구성
KAIST IT 아카데미
10
C Programming B반
프로그램 실습
 하나의 정수를 입력받고 그 수가 홀수인지,
짝수인지 출력하는 프로그램을 작성하시오
KAIST IT 아카데미
11
C Programming B반
프로그램 실습
 1개의 for문을 if문과 병행하여
1~100까지의 수 들 중에서 2의 배수들의 합,
3의 배수들의 합,
5의 배수들의 합을 구하는 프로그램을 작성하시오
KAIST IT 아카데미
12
C Programming B반
프로그램 실습
 두 개의 수를 입력 받고,
두 수의 대소관계를 알려주는 프로그램을 작성하시오
KAIST IT 아카데미
13
C Programming B반
반복문 생략, 탈출
 특정 조건이 만족 시 반복문 탈출
KAIST IT 아카데미
14
C Programming B반
반복문 생략, 탈출
 특정 조건이 만족 시 생략
KAIST IT 아카데미
15
C Programming B반
반복문 생략, 탈출
 반복문의 continue, break는 한 반복문 안에서만
생략, 탈출이 가능
 생각해 보아요~!
 1. 2중첩으로 for문을 만들었음
 2. 특정 조건이 만족되었을 때 2중첩 for문을 모두 탈출하고 싶음
 HOW!?!?
KAIST IT 아카데미
16
C Programming B반
조건문2
 switch-case문
KAIST IT 아카데미
17
C Programming B반
조건문2
 switch-case문
KAIST IT 아카데미
18
C Programming B반
조건문2
 switch-case문
 switch() 안에는 정수만 사용 가능!!
• 따라서 문자 1개도 사용 가능
 case문에는 콜론(:) 반드시 필요
 break;를 적지 않으면 다음 case문까지 실행
 default:는 가장 마지막에 작성
 if-else문과 완벽 호환 불가능
 if-else문과 같은 기능을 한다면 훨씬 빠름
KAIST IT 아카데미
19
C Programming B반
조건문2
 switch-case문
KAIST IT 아카데미
20
C Programming B반
프로그램 실습
 (turboc.h 사용)
1. 키보드의 상하좌우키를 입력 받아 #을 이동
2. 스페이스 입력 시 화면 지우기
3. q, Q를 입력 시 프로그램 종료
위의 기능을 가진 프로그램 작성하기
 힌트 : 무한루프 사용
gotoxy() 사용
키를 입력받을 시 getch() 함수 사용
예시) char타입변수 = getch();
상하좌우키 스캔코드
: 0xE0, 키보드 그림
KAIST IT 아카데미
좌
75
21
상
72
하
80
우
77
C Programming B반
프로그램 실습
 (turboc.h 사용)
1. 사용자로부터 화면의 좌표를 입력 받고
2. 입력받은 좌표로부터 우하단으로 이동을 시작하여
3. #문자를 이동하고 상하좌우의 벽에 닿으면 반사
4. 임의의 키가 입력될때까지 (kbhit() 함수)
하는 프로그램을 작성하시오
KAIST IT 아카데미
22
C Programming B반
함수
 함수 제작 이유
 Divide and Conquer
• 문제를 작은 단위로 나누어서 해결하기
 함수의 크기
• 하나의 일만 담당하도록 디자인
 함수의 형태
KAIST IT 아카데미
23
C Programming B반
함수
 printf() 함수 예시
 리턴값
• 리턴 값을 굳이 받을 필요 없음
• 리턴값은 반드시 하나
• 리턴값이 없는 리턴!!!
 void 형에서의 return;
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 아카데미
함수 외부에서 선언
프로그램 시작부터 종료 시까지 존재
초기화 없을 시, 0값으로 초기화
프로그램 전체 영역 어디서든 접근 가능
지역변수의 이름이 전역변수의 이름을 가림
28
C Programming B반
전역변수
 전역변수






KAIST IT 아카데미
함수 외부에서 선언
프로그램 시작부터 종료 시까지 존재
초기화 없을 시, 0값으로 초기화
프로그램 전체 영역 어디서든 접근 가능
지역변수의 이름이 전역변수의 이름을 가림
가급적이면 사용 자제 (많을 시, 프로그램의 가독성 및 호환성 저
하)
29
C Programming B반
전역변수
 전역변수
KAIST IT 아카데미
30
C Programming B반
전역변수
 전역변수


KAIST IT 아카데미
31
지역변수 이름이 전역변수 이름을 덮는 예
C에서는 이런 경우에 전역변수 사용불가
C Programming B반
Static 변수
 static 변수
 선언된 함수 내에서만 접근 가능 (지역변수 특성)
 처음 생성 시에만 초기화
 생성 후 프로그램 종료 시까지 메모리에 존재 (전역변수 특성)
KAIST IT 아카데미
32
C Programming B반
Register 변수
 Register 변수
 CPU 내부에 존재하는 메모리공간에 할당
 자주 사용하여 빠른 접근이 요구될 때
 일반적인 프로그램에서는 자주 사용하지 않음
KAIST IT 아카데미
33
C Programming B반
함수
 재귀함수
 스스로를 호출하는 함수
 무한 반복의 예
KAIST IT 아카데미
34
C Programming B반
함수
 재귀함수
 스스로를 호출하는 함수
 탈출 조건이 존재하는 경우의 예
KAIST IT 아카데미
35
C Programming B반
함수
 재귀함수의 사용 예
KAIST IT 아카데미



36
사용이 편리
메모리 사용이 큼
재귀함수를 일반함수로 표현 가능
C Programming B반
#define 활용
 매크로 상수 정의 가능
 사용법
• #define GAME_TIME 240
• 함수 바깥에서 사용 (전역변수와 같은 기능)
 const 변수와 같이 사용 가능
 순서에 주의 (정의되지 않은 매크로 상수를 사용 불가능)
 연산식으로 정의 시, 괄호로 묶을 것!!!
 매크로 함수 정의 가능
 일단 매크로 상수 먼저 잘 사용하고 나중에 배우겠습니다.
KAIST IT 아카데미
37
C Programming B반
프로그램 실습
 두 정수를 입력 받고 두 수를 swap하는 함수를 작성하시오
KAIST IT 아카데미
38
C Programming B반
표준 함수 사용
 우리가 사용해 본 표준 함수
 printf(), scanf(), delay()
 다양한 종류의 표준 함수








KAIST IT 아카데미
입출력 함수
수학 함수
문자열 함수
시간 함수
파일 입출력 함수
프로그램 제어 함수
메모리 할당 함수
기타 부수적인 함수
39
C Programming B반
표준 함수 사용
 삼각함수




헤더파일 : math.h
double sin(double x);
double cos(double x);
double tan(double x);
 double asin(double x);
 double acos(double x);
 double atan(double x);
 double sinh(double x);
 double cosh(double x);
 double tanh(double x);
KAIST IT 아카데미
40
C Programming B반
표준 함수 사용
 지수함수
 헤더파일 : math.h
 double sqrt(double x);
 double pow(double x,double y);




KAIST IT 아카데미
// x의 제곱근
// x^y
double log(double x);
// 자연로그
double log10(double x);
// 상용로그
double exp(double x);
// e^x
double hypot(double x,double y); // root(x^2 + y^2)
41
C Programming B반
표준 함수 사용
 정수화 함수
 헤더파일 : math.h
 double floor(double x);
 double ceil(double x);
// 내림
// 올림
 반올림!?
• floor(x+0.5)
KAIST IT 아카데미
42
C Programming B반
프로그램 실습
 다음의 프로그램을 작성하시오
 1. 함수
• 실수 1개와 정수 1개를 입력 받음 (파라미터)
• 소수점 정수번째에서 반올림 (양수 음수 0 가능)
 소수점 -1자리 반올림
 소수점 0자리 반올림
 소수점 1자리 반올림
: 123.456 -> 120.000
: 123.456 -> 123.000
: 123.456 -> 123.500
• 반올림된 결과값 리턴
 2. 1에서 만든 함수 활용하는 main프로그램
• 사용자로부터 실수 1개, 정수 1개를 입력 받음
• 1번 함수 실행
• 실행 결과 화면에 출력
KAIST IT 아카데미
43
C Programming B반
표준 함수 사용
 절대값 함수
 헤더파일 : math.h
 int abs(int n);
 long labs(long n);
 double fabs(double x);
KAIST IT 아카데미
44
C Programming B반
표준 함수 사용
 표준 난수 함수
 헤더파일 : stdlib.h
 int rand(void);
//0~RANMAX 범위의 수 무작위 추출
 void srand(unsigned int seed);
// 난수발생기 시드 초기화
KAIST IT 아카데미
45
C Programming B반
표준 함수 사용
 표준 난수 함수
 헤더파일 : stdlib.h
 int rand(void);
//0~RANMAX 범위의 수 무작위 추출
 void srand(unsigned int seed);
// 난수발생기 시드 초기화
 난수 발생
• 시간으로 초기화
 srand((unsigned)time(NULL));
• rand() % n
KAIST IT 아카데미
46
C Programming B반
배열
 배열의 필요성
KAIST IT 아카데미
47
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
48
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
49
C Programming B반
배열
 1차원 배열
KAIST IT 아카데미
50
C Programming B반
프로그램 실습
 5명의 성적을 입력받기 위한 배열을 생성하고,
5명의 점수를 순차적으로 입력 받아 평균을 출력하는
프로그램을 만드시오
KAIST IT 아카데미
51
C Programming B반
배열
 문자열
KAIST IT 아카데미
52
C Programming B반
배열
 문자열
 NULL 문자
KAIST IT 아카데미
53
C Programming B반
배열
 문자열
 문자열 입력
• 배열의 이름 앞에는 &를 붙이지 않음!!!
KAIST IT 아카데미
54
C Programming B반
프로그램 실습
 영문으로 구성된 긴 단어(의미있을 필요 없음)를 입력
받아 단어의 역순으로 화면에 출력하라
 ex) alpha -> ahpla
KAIST IT 아카데미
55
C Programming B반
프로그램 실습
 영문 소문자로 구성된 긴 문장을 입력받아 이 문자열 내
의 각 알파벳 문자 개수를 구하여 출력하라.
 ex) alpha -> a:2, h:1, l:1, p:1
KAIST IT 아카데미
56
C Programming B반
오늘 수업 종료
 다음 수업 내용
 포인터
 앞으로 배울 내용들






KAIST IT 아카데미
포인터
문자와 문자열
구조체
파일 입출력
메모리관리 (동적할당)
약간의 디버깅방법
C Programming B반