<실 라 버 스>

1. 강좌 내용

강좌명	C프로그래밍 (담당교수: 김태영, (043)230-3749, tykim@knue.ac.kr)
1.강의목적 및 개요	컴퓨터 시스템은 기본적으로 Hardware(H/W)와 Software(S/W)로 구성된다. 하드웨어는 컴퓨터에 설치되어 있는 모든 물리적인 장치를 의미한다. 소프트웨어는 컴퓨터를 동작시키는데 사용되는 다양한 종류의 프로그램(Program)을 지칭한다. 동일한 H/W 상에서 S/W를 바꾸어 가면서 다양한 작업을 할 수 있는 것은 컴퓨터가 가진 가장 강력한 특징이다. 학생들은 이 강좌에서 가장 기본적인 프로그래밍 언어인 C를 사용하여 다양한 프로그램을 작성하는 방법을 배운다. 컴퓨터교육과 학생들이 전공을 이수하기 위한 가장 기본적인 과목이므로 필수적으로 C 프로그래밍을 배워야 한다.
2. 수업(교수)방법	1. 강의 컴퓨터에 명령을 내리는 프로그래밍 언어만 안다고 해서 프로그램을 작성할 수 있는 것은 아니다. 주어진 문제를 어떤 절차에 따라서 해결할 것인가를 먼저 생각하여 보아야 한다. 문제를 단계적으로 해결하는 절차적 방법을 알고리듬(algorithm)이라고 한다. 따라서, 본 강의에서는 정보처리의 기본절차인 알고리듬에 대한 기본 개념도 알아본다. 2. 실습 C 언어는 1970년대 초반 UNIX 운영체제를 위하여 AT&T의 Bell 연구소에서 일하던 D. Richie에 의하여 만들어졌다. 이 후 C 언어는 모든 프로그래밍의 기본 언어로 자리 잡았다. 본 강의에서는 C를 사용하여 다양한 프로그램들을 실습한다.
3. 평가 방법
평가방법	기말시험	시험	과제물	출석	기타	계
반영율(%)	30	30 (중간)	30 (Quiz)	10
비고
4. 교재 및 참고문헌	1. C 언어 콘서트, 천인국, 생능출판사 2. 명품 C 언어 프로젝트, 안기수, 생능출판사 3. 기타 참고문헌 및 자료들

2. 주별 수업계획

5. 주별 수업내용 및 진행방법
주	강의 주제	강의 및 실험 내용(수업 진행 방법 및 참고자료)
1	Introduction	강의 (디지털 강의자료/참고문헌 자료)
2	기본 개념들	강의 (디지털 강의자료/참고문헌 자료)
3	변수와 자료형	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
4	수식과 연산자	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
5	조건문	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
6	반복문	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
7	함수	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
8	배열	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
9	포인터	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
10	문자와 문자열	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
11	구조체	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
12	입출력	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
13	전처리/기타 기능	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
14	동적메모리	강의 및 실습 (디지털 강의자료/C 프로그래밍 실습)
15	Summary	기말 시험/Team Project
6. 강의평가 결과를 활용한 개선사항			프로그래밍은 어려운 구문(Syntax)들을 습득하여야 하기 때문에 학습 동기를 부여하는 것이 중요하다. 따라서, 학습자들의 흥미를 높이기 위하여 문제해결을 위한 응용 프로그래밍 실습들을 교육과정에 도입한다. 또한 개인별 PC와 함께 클라우드 컴퓨팅에 대한 이해를 위하여 LINUX 서버를 사용한 실습을 진행한다.

* 담당교수의 홈페이지(http://comedudb6.knue.ac.kr/tykim/Myhome/note.html에 올려져 있는 강의노트(LectureNotes) 참조.

1. Introduction

• 학습목표

- 프로그램이란 무엇인지를 이해한다.

- 프로그래밍 언어가 왜 필요한지를 이해한다.

- 알고리즘을 소개한다.

- 프로그램이 개발되는 과정을 이해한다.

• 학습내용

- 프로그래밍의 소개

- 프로그래밍 언어의 종류

- C 언어

- 알고리즘

- 프로그램 개발과정

- 비주얼 C++을 이용한 프로그램 작성

2. 기본 개념들

• 학습목표

- 프로그램의 각 구성요소들을 학습한다.

- 키보드로부터 입력하는 방법을 학습한다.

- 콘솔로 출력하는 방법을 학습한다.

• 학습내용

- 예제 프로그램

- 화면출력

- 연산이 있는 프로그램

- 입력/출력이 있는 프로그램

- 오류수정 및 디버깅

- 응용 프로그램

3. 변수와 자료형

• 학습목표

- 변수와 상수의 개념을 이해한다.

- C에서 사용가능한 변수의 종류를 학습한다.

- 정수형 변수와 상수를 선언하고 사용할 수 있다.

- 부동소수점형 변수와 상수를 선언하고 사용할 수 있다.

- 기호 상수를 사용할 수 있다

- 오버플로와 언더플로를 이해한다.

• 학습내용

- 변수

- 자료형

- 변수의 이름짓기

- 변수 선언과 사용

- 정수형

- 부동소수점형

- 문자형

4. 수식과 연산자

• 학습목표

- C에서 사용되는 각종 연산자들을 학습한다.

- 연산자의 우선순위와 결합규칙을 이해한다.

- 수식의 결과값 개념을 이해한다.

• 학습내용

- 수식과 연산자의 개념

- 산술 연산자

- 대입 연산자

- 관계 연산자

- 논리 연산자

- 조건 연산자

- 연산자의 우선순위와 결합규칙

- 형변환

5. 조건문

• 학습목표

- if문의 구조를 이해하고 응용한다.

- switch문의 구조를 이해하고 응용한다.

- break, continue문의 기능을 학습한다.

• 학습내용

- 제어문

- if

- if-else

- 다중 if

- switch

- goto

6. 반복문

• 학습목표

- while의 구조와 기능을 학습한다.

- for의 구조와 기능을 학습한다.

- 반복문에서 break와 continue의 사용을 학습한다.

• 학습내용

- 반복문

- while

- do ~ while

- for

- 중첩 반복문

- break와 continue

7. 함수

• 학습목표

- 함수의 개념을 이해한다.

- 함수를 작성하는 방법을 익힌다.

- 함수의 반환값과 매개변수를 이해한다.

- 전역변수, 지역변수를 이해한다.

- 순환호출을 이해한다.

• 학습내용

- 함수

- 함수의 정의

- 함수 호출과 반환

- 함수원형

- 변수의 범위

- 저장 유형 지정자

- 순환호출

- 라이브러리 함수

8. 배열

• 학습목표

- 배열의 개념과 필요성을 이해한다.

- 배열을 선언하고 배열원소에 접근하는 방법을 학습한다.

- 배열과 함수와의 관계를 익힌다.

• 학습내용

- 배열

- 배열의 초기화

- 배열의 응용

- 정렬과 탐색

- 다차원 배열

9. 포인터

• 학습목표

- 포인터의 개념을 이해한다.

- 포인터 선언 및 초기화 과정을 이해한다.

- 포인터 연산의 특수성을 이해한다.

- 포인터와 배열의 관계를 이해한다.

- 포인터를 이용한 참조에 의한 호출을 이해한다.

• 학습내용

- 포인터

- 포인터 사용시 주의할 점

- 포인터 연산

- 포인터와 배열

- 함수와 포인터

- 함수 포인터

10. 문자와 문자열

• 학습목표

- 문자와 문자열이 컴퓨터안에서 어떻게 표현되는지를 이해한다.

- 문자와 문자열을 처리하는 라이브러리 함수를 학습한다.

• 학습내용

- 문자/문자열 표현 방법

- 문자/문자열 입출력

- 문자/문자열 처리

- 문자열 수치 변환

- 문자열의 배열

11. 구조체

• 학습목표

- 구조체의 선언과 초기호 방법을 학습한다.

- 구조체와 포인터 관계를 이해한다.

- 공용체와 typedef를 학습한다.

• 학습내용

- 구조체

- 구조체의 선언, 초기화, 사용

- 구조체의 활용

- 구조체의 배열

- 구조체와 포인터

- 구조체와 함수

- 공용체

- 열거형

- typedef

12. 입출력

• 학습목표

- 스트림의 개념을 이해한다.

- 파일 입출력을 학습한다.

- 입출력 관련 함수들을 사용하여 본다.

• 학습내용

- 스트림

- printf() 출력

- scanf()를 이용한 입력

- 파일의 기초

- 텍스트 파일 읽기와 쓰기

- 이진 파일 읽기와 쓰기

- 임의 접근

13. 전처리/기타 기능

• 학습목표

- 전처리와 관계된 지시어들을 학습한다.

- 분할컴파일의 개념을 이해한다.

- 명령어 라인에서 매개변수 전달방법을 학습한다.

- 디버깅 방법을 학습한다.

• 학습내용

- 전처리

- 단순 매크로

- 함수 매크로

- #ifdef, #endif

- #if, #else, #endif

- 다중 소스 파일

- 프로그램 인수

- 디버깅

- 비트단위 연산자

- 비트필드 구조체

14. 동적 메모리

• 학습목표

- 동적메모리 할당을 이해한다.

- 동적메모리 할당 관련함수를 학습한다.

- 연결리스트를 구현하여 사용한다.

• 학습내용

- 동적메모리 할당

- malloc(), free(), calloc(), realloc()

- 연결리스트