1.02k likes | 1.32k Views
C 언어 및 실습 C Language and Practice. 과목소개 및 실습계획 Chap 1,2 : C 언어의 개요. 과목소개. 교과목의 성격
E N D
C언어 및 실습C Language and Practice 과목소개 및 실습계획 Chap 1,2 : C 언어의 개요
과목소개 • 교과목의 성격 • C 언어는 고급언어와 저급언어의 특징을 모두 가지고 있어 다양한 프로그램에서 널리 사용되는 모든 프로그래밍의 기본이 되는 프로그래밍 언어이다. C 언어를 통해 우리는 컴퓨터 프로그래밍의 기본 문법과 컴퓨터 구조의 기초지식을 배우며 주어진 문제를 프로그래밍언어를 이용하여 해결하는 방법을 익힐 수 있다. 본 과목에서는 이러한 C 언어의 필수적인 프로그램 이론과 실질적인 프로그램 방법들을 실습을 통해 병행 학습한다. • 교과수업 주요 목표 • 본 과목에서는 C 언어의 이론 및 개념을 강의하고 실습과 과제를 통하여 컴퓨터 구조의 기초지식과 실무에 필요한 프로그래밍 능력 및 알고리즘 개발 능력을 배양하는 것을 목표로 한다. 세부적인 내용은 다음과 같다.1. 프로그램 기본 구조인 제어구조, 데이터의 형(Type), 부 프로그램 등의 개념을 이해한다.2. 배열 및 포인터를 이용하여 가변적인 데이터 블록을 설정하여 메모리를 효율적으로 사용한다.3. 파일의 개념과 종류에 대해 이해하고 보조기억장치를 이용하여 데이터를 처리한다.4. C 언어를 이용하여 알고리즘을 구현 및 분석하는 능력을 갖춘다.5. 주어진 문제를 C 언어를 이용하여 구조적 프로그래밍 방법으로 해결할 수 있다.
실습계획 (1/6) • 1주 : C 언어의 개요 및 data type • 변수와 상수 • overflow/underflow 개념 • 2, 10, 8, 16진수 표현법 • 각 data type의 표현 범위 • 연산자 : cast, sizeof • 함수 : printf(), scanf() --> 각각의 변환문자 및 변환 사양 수정자 • 2주 : 문자열 • 문자열의 개념 • 상수와 선행 처리기 • 함수 : strlen(), gets(), puts(), getch(), putch(), getchar(),putchar() • 3주 : 연산자, 산술식, 문 • 연산자의 종류 및 우선순위, 결합규칙 • 증가/감소 연산자(전위와 후위) • 복문(block)의 개념 • 수형(data type)의 변환 규칙 • 비트 단위 연산 숫자: 하나 둘, 표현(손가락) 문자, 문자들 : a, “b”, 엄마,아빠… 계산 : 1+1 = ? 연산자: +,-,X, /…
실습계획 (2/6) • 4주 : 선택 방법 • 선택문의 종류(if, if~else, if~else if) • 다중 선택문(switch문) • 관계 연산자(<, <=, ==, >=, >, !=) • 논리 연산자(&&, ||, !) • 조건 연산자( ? : ) • 5주 : 반복문과 기타 제어문 • 반복문의 종류(for, while, do~while) • 기타 제어문(break, continue, goto) • 6주 : 함수 • 함수의 개념 • 실인자(actual arguments)와 형식인자(formal argument) 및 다중 인자 • 함수형(function types) 둘중, 또는 여럿중 하나를 선택-선택문, 선택조건연산 일을 수행 -시작,반복,연속, 중단, 재시작,종료 수행하는 일(기능) 또는 그 일을 더 잘게 나눈 일(함수)
실습계획 (3/6) • 7주 : Storage class • 지역 변수와 전역 변수 • storage class • 8주 : 중간고사 • 9주 : 선행 처리기(preprocessor) • 선행 처리 기능의 개념 • 매크로 함수의 개념과 사용시 주의 사항 • header file의 개념 • 선행 처리기의 지정어(#define, #include, #undef, #if, #ifdef, #ifndef, #else, #endif) 숫자나 문자들을 저장할 공간 및 실행 범위 A = 3, B=‘a’, ; 수식과정이 너무 복잡해 –간단하게 할 수 없을까 !!!
실습계획 (4/6) • 10주 : 배열과 포인터(Ⅰ) • 배열의 개념 • 다차원 배열 • 배열의 초기화 • 배열과 포인터의 관계 • 다차원 배열과 포인터 • 함수와 배열 • 11주 : 포인터(Ⅱ) • 함수와 포인터 • 함수에 대한 포인터 • 포인터 배열 • 포인터의 포인터 • 기억 장소 관리 함수(malloc(), free(), calloc(), ...) 같은형식의 숫자나 문자들을 저장하는 메모리 공간들의 집합의 표현 A[10] = 3,4,5,…, B[3]=‘a’,’b’,’c’; 숫자나 문자들이나수행하는 일(함수)가 저장되어있는 메모리 공간들의 장소(위치)를 표현
실습계획 (5/6) • 12주 : 문자열과 문자열 함수 • 문자 스트링(character string)의 개념 • 문자 스트링의 초기화 • 포인터와 스트링 • gets(), puts(), scanf(...%s...), printf(...%s...) • strlen(), strcat(), strcmp(), strcpy() • 명령행 인자(command-line argument) • 13주 : 구조체와 그 밖의 데이터형 • 구조체(struct)의 개념 • 멤버 참조 • 구조체에 대한 포인터 • 함수와 구조체 • 공용체(union)의 개념 • 14주 : File I/O • File I/O 함수 {fopen(), fclose(), getc(), putc(), fprintf(), fscanf(), fgets(), gputs(), fseek()} • 저수준I/O의 개념(open(), close(), read(), write(), ...) • string 변환 함수(atoi(), atof(), ...) 문자들을 어떻게 읽고 쓸까 !!! 다른 형식들의 숫자나 문자들을 한꺼번에 저장하는 메모리 공간들의 집합을 표현 파일(숫자(들),문자(들)을 어떻게 메모리로부터 저장하고 읽어내고 또 저장하고…할까 !!!
실습계획 (6/6) • 15주 : 응용 프로그램 (종합) • 스트림의 개념 • 파일 열기와 닫기 • 파일 입출력 처리 • 16주 : 기말고사 • 레포트: 수업 후, 매주 프로그램 결과 제출 그럼, C언어로 프로그램을 작성해볼까요 ?
C언어 및 실습C Language and Practice Chap 1. C언어의 개요
단원의 개요 단원의 학습목표 학습 유의점 1. C 언어의 형성 과정의 역사를 이해한다. 2. C 언어의 특징(장․단점)을 이해한다. 3. C 언어의 일반적인 형태를 알아본다. 4. C 프로그램의 논리적 구조를 파악한다. 1. C언어가 하향식 설계( top-down design)에 의한 구조적 프로그램을 구현하기에 적합함을 이해한다. 단원의 학습계획 사용된 함수 1. C 언어의 형성과 C언어와 UNIX와의 관계를 이해한다. 역사 C언어의 보급 확산 이유를 이해한다. 2. C 언어의 특징C언어 특성 및 장단점을 이해한다. 3. C 언어 구조 C언어의 구조적, 객체 지향적 프로그 램에 대해 이해한다. C 프로그램의 기본구조를 파악한다. printf() : 표준출력함수(stdout, 화면출력) - 23pp getchar() : 표준입력함수(stdin, 화면입력) - 22pp return(): 반환함수 - 22p
C언어의 역사 • 이기종 컴퓨터 간의 호환성을 가질 수 있을 정도의 고급언어이면서, 기능면에서 어셈블리 언어처럼 컴퓨터의 하드웨어 기능까지 제어할 수 있는 새로운 프로그래밍 언어가 필요함. • 1972년 벨(Bell) 연구소의 Dennis Ritch에 의해 개발. • UNIX운영체제의 구현을 위해서 사용. • 유래 : ALGOL 60 CPL BCPL B C Java, C#, C++ • ANSI C, MS C, Turbo C - ANSI C++, Visual C++, Turbo C++, Borland C++ 프로그램 확장 1960년 ALGOL 60 : 국제 위원회에서 설계 1963년 CPL(Combine Programming Language) : 영국 케임브리지와 런던 대학에서 공동으로 설계한 언어로 ALGOL 60의 영향을 받음 1967년 BCPL(Basic Combined Programming Language) : 영국 케임브리지 대학의 마린 리챠드가 설계 1970년 B : 미국의 벨 연구소의 켄톰슨이 설계 1972년 C : 미국의 벨 연구소의 데니스리치가 설계 1983~1989년 ANSI C : (ANSI X3J11, ISO C) 1986년 C++ : 벨 연구소 비얀스트로스트룹이 설계 표 2-1 C 언어의 역사적 배경 * ANSI (American National Standards Institute) ; 미국 표준 협회 * ISO (International Standardization Organization) 국제표준위원회)
C언어의 특징 • 고급 언어이자 저급언어로서 시스템 프로그래밍도 가능중급언어 • 저급언어 : 컴퓨터가 실행하는 실제의 명령(기호형태)을 다룸 • 어셈블리 언어(Assembly Language) • 고급언어 : 여러 가지 제어구조와 I/O명령문 등을 제공(프로그래밍이 쉽고 빠르다>) • Pascal, Delphi. Visual Basic, Java • 함수(function)의 집합으로 구성되어 구조적 프로그램에 적합 • 다양한 자료구조의 표현에 적합하다. • 다른 시스템으로의 이식성이 좋다. • 입.출력 문장이 따로 존재하지 않는다(library이용). 표 2-2 C 언어의 장단점
+ - ⅹ / = 3 2 6 7 + - ⅹ ⅹ 계산기 계산기 3 ⅹ 2 + 6 + 7 = / = C언어의 구조 • 구조적 프로그래밍 • 큰 규모의 프로그램은 일관성을 갖는 기능에 따라 여러 개의 작은 단위프로그램으로 나누어 작성하는 것이 프로그램의 개발과 관리, 그리고 프로그램에 대한 이해를 쉽게 해준다. • 프로그램의 처리는 하나의 주(main) 프로그램이 필요한 시점에서 기능별(Functional) 단위 프로그램들을 호출하여 원하는 처리를 하는 방법으로 진행 • 구조적 프로그래밍(structured programming)은 이와 같은 방법으로 순서구조, 조건구조 및 반복구조 만으로 프로그램을 작성하는 것 + - ⅹ / = 19 ⅹ + + = 19
+ - ⅹ / = 3 2 6 7 + 호출 - 호출 ⅹ ⅹ 호출 계산기 계산기 3 ⅹ 2 + 6 +7 = / 호출 = #include <stdio.h> void main() { inta, b, c, d; intv = 12; intw = 3; intx = 2; inty = 6; intz= 7; printf(" 12 / 3 X 2 + 6 - 7 = ? 의 계산프로그램 입니다\n"); a = v / w; b = a * x; c = b + y; d = c - z; printf("최종답은%d 입니다.\n", d); } C언어의 구조 • 구조적 프로그래밍 • 큰 규모의 프로그램은 일관성을 갖는 기능에 따라 여러 개의 작은 단위프로그램으로 나누어 작성하는 것이 프로그램의 개발과 관리, 그리고 프로그램에 대한 이해를 쉽게 해준다. • 프로그램의 처리는 하나의 주(main) 프로그램이 필요한 시점에서 기능별(Functional) 단위 프로그램들을 호출하여 원하는 처리를 하는 방법으로 진행 • 구조적 프로그래밍(structured programming)은 이와 같은 방법으로 순서구조, 조건구조 및 반복구조 만으로 프로그램을 작성하는 것 + - ⅹ / = 19 ⅹ + + = 19
C언어의 구조 • 객체지향 프로그래밍 • 하드웨어의 부품처럼 재사용이 가능하고 유지 보수가 편리 • 프로그램 기술방식이 인간의 사고 체계를 그대로 묘사할 수 있도록 변화 • 프로그래머는 이미 만들어져 있는 객체(Object)의 내부는 알지 못하고 그 객체가 수행할 수 있는 기능만을 인지한 상태에서 문제 해결에 필요한 메시지를 해당 객체에 전달 • 해당 객체는 자신의 기능만으로 해결하지 못하는 부분에 대해서는 메시지 전달을 통해 다른 객체에 의해서 해결될 수 있도록 함 • 특징 • 다형성(Polymorphism) : 프로그래머에게 하나의 함수를 가지고 연산에 포함된 객체의 형에 따라 다른 객체에 똑같은 기능을 수행할 수 있도록 함 • 속성 계승(Inheritence) : 프로그래머가 새로운 객체를 정의하고자 할 경우에 객체의 모든 기능을 새롭게 정의하지 않고, 다른 객체로부터 기능의 일부를 물려받음 • 정보 은닉(Information Hiding) : 어떤 객체의 알고리즘이나 자료구조는 그 객체 내에서만 참조할 수 있고 다른 객체나 외부로 부터 차단. • 언어 • C++, Ada++, SIMULA, Smalltalk 등 • 단점 • 자동기억장소 관리로 인한 지연(delay)로 기존언어에 비해 속도가 떨어짐
객체 함 수 함 수 메소드 메 메시지 소 드 데이터 함 수 함 수 함 수 함 메소드 메소드 메 메시지 소 메시지 드 데이터 공유 데이터 공유 데이터 메소드 메 소 드 메소드 데이터 객체 메시지 함 수 함 수 메소드 객체 객체지향 절차지향 C언어의 구조 • 객체지향 프로그래밍 • Procedural-Oriented(절차지향) : C 언어 • 데이터를 변화시키는 알고리즘을 순서적으로 나열시켜 일을 처리 • Object-Oriented(객체지향): C++ 언어 • 객체들을 생성하고 객체들간에 메시지를 통하여 정보를 교환함으로서 일을 수행 • 객체 데이터 + 메소드 • 클래스 속성(데이터의 구조) + 메소드
C언어의 구조 • C프로그램의 구조( Main 프로그램이 컴파일되기 전에 프로그램에 일련의 작업을 지시 (include, define 등) : 입.출력용 헤더(header) 파일 선행처리기 명령 전역 데이터 부분 모든 함수에서 전역적으로 사용하는 변수들을 선언 main( ) {……} 가장 먼저 호출되는 함수( main함수 { }는 반드시 포함) 명령문 C의 구성 블록을 이루는 함수들 함수 a( ) {…} 명령문 함수 b( ) {…} 명령문의 다섯 가지 유형 명령문 선언대입함수제어Null 그림 2-1 C 프로그램의 구조
선행처리기 명령 전역 데이터 부분 main( ) 명령문 함수 a( ) 명령문 함수 b( ) 명령문 C언어의 구조 • C프로그램의 구조 #include <stdio.h> #define BOOL int #define TRUE 1 #define FALSE 0 BOOL whitesp(char c); main() { intch; int count =0; while( ( ch = getchar() ) != EOF ) if( whitesp(ch) ) count++; printf("There are %d whitespace character.\n", count); } BOOL whitesp(char c) { if( c==' ' || c=='\n' || c== '\t' ) return(TRUE); else return(FALSE); } #include <stdio.h> #define BOOL int #define TRUE 1 #define FALSE 0 BOOL whitesp(char c); main() { intch; int count =0; while( ( ch = getchar() ) != EOF ) if( whitesp(ch) ) count++; printf("There are %d whitespace character.\n", count); } BOOL whitesp(char c) { if( c==' ' || c=='\n' || c== '\t' ) return(TRUE); else return(FALSE); } header 화일[초기 전역 선언부] 전역(global)선언부 main 함수 {…}시작 내부 지역(local)변수선언 main() 함수본체 처리부 main 함수 끝 함수 시작 whitesp() 함수본체 함수의 끝 whitesp() 끝 그림 2-2 C 프로그램의 구조 파악
C 언어의 구조 • C원시(소스)파일: C언어로 작성된 프로그램 파일(.C확장자) • 목적(오브젝트)파일: 기계어로 구성된 파일(.obj확장자) • 실행파일: 실행 가능한 파일(.exe확장자) • 컴파일러: 소스 파일을 목적 파일로 만드는 작업 • 링커: 목적 파일을 실행파일로 만드는 작업 그림 2-3 C 프로그램의 수행 과정
단원의 개요 단원의 학습목표 학습 유의점 1. C 언어의 형성 과정의 역사를 이해한다. 2. C 언어의 특징(장․단점)을 이해한다. 3. C 언어의 일반적인 형태를 알아본다. 4. C 프로그램의 논리적 구조를 파악한다. 1. C언어가 하향식 설계( top-down design)에 의한 구조적 프로그램을 구현하기에 적합함을 이해한다. 단원의 학습계획 사용된 함수 1. C 언어의 형성과 C언어와 UNIX와의 관계를 이해한다. 역사 C언어의 보급 확산 이유를 이해한다. 2. C 언어의 특징C언어 특성 및 장단점을 이해한다. 3. C 언어 구조 C언어의 구조적, 객체 지향적 프로그 램에 대해 이해한다. C 프로그램의 기본구조를 파악한다. printf() : 표준출력함수(stdout, 화면출력) - 23pp getchar() : 표준입력함수(stdin, 화면입력) - 22pp return(): 반환함수 - 22p
상위 메모리 구조 스택 세그먼트 Heap 가변크기 데이터 세그먼트 (정적 데이터) 텍스트 세그먼트 (코 드) 고정크기 하위 메모리 구조 C 프로그램의 수행을 위한 메모리 구조 프로그램의 구동 • 실행 파일 • 컴파일, 링킹 과정을 통해 생성 • 운영체제의 로더(loader)가 메모리에 적재 • 하나의 프로세스 주소 공간을 갖음 • 스택(Stack) 세그먼트 • 힙(Heap) • 데이터 세그먼트 • 텍스트 • CPU가 해당 메모리 주소 공간을 읽고 수행함 실행 가능 파일 (executable file) 로 더
프로그램 개발환경 • 코드 에디터 • 프로그램을 작성하는 과정에서 사용하는 편집기 • 단축키, 실행취소/재실행, 매크로, 맞춤법 검사 외에 각 에디터마다 특징이 있음 • Emacs, Ultra Editor, Eclipse, Crimson Editor • 통합개발환경 (Integrated Development Environment) • 컴퓨터를 이용하여 Application을 개발하는 과정에서 에디터,컴파일러,어셈블러,링크,디버그 등의 각각의 단계가 모두 하나의 프로그램 안에 통합되어 있는 것 • 예) 터보C, Boland C, Delphi, Visual Studio, etc.
프로그램 개발환경 • Turbo C / Boland C • UNIX CC/GCC • Boland C++ • Visual Studio
프로그램 개발환경 사용법 • Turbo C / Boland C
프로그램 개발환경 사용법 • Turbo C / Boland C • 프로그램의 작성은 통합환경에 포함되어 있는 에디터를 사용 • “File”메뉴의 New를 선택
프로그램 개발환경 사용법 • Turbo C / Boland C • 프로그램의 작성은 통합환경에 포함되어 있는 에디터를 사용 • “File”메뉴의 New를 선택
프로그램 개발환경 사용법 • Turbo C / Boland C • 표준 출력함수를 사용하여 화면에 “Hello. Happy to Meet U”를 출력하는 프로그램을 작성
프로그램 개발환경 사용법 • Turbo C / Boland C • 고유의 파일명을 지정하기 위해 “File”메뉴의 “Save”선택
프로그램 개발환경 사용법 • Turbo C / Boland C • 고유의 파일명을 지정하기 위해 “File”메뉴의 “Save”선택
프로그램 개발환경 사용법 • Turbo C / Boland C • 파일명 “tmp.c”입력 ☞버전마다 자동으로 “.c”또는 “.cpp”확장자가 붙음
프로그램 개발환경 사용법 • Turbo C / Boland C • 에디터에서 변경된 파일의 이름을 확인
프로그램 개발환경 사용법 • Turbo C / Boland C • 컴파일만 진행시 “Complile”메뉴의 “Compile”선택 또는 [Alt+F9] • 실행파일까지 생성시 “Compile”메뉴의 “Make”선택 또는 [F9]
프로그램 개발환경 사용법 • Turbo C / Boland C • 실행 파일 생성이 성공적으로 끝난 후 Boland C에서 보여주는 메세지
프로그램 개발환경 사용법 • Turbo C / Boland C • 생성된 실행 파일 수행 • “Run”메뉴의 “Run”선택 또는 [Ctrl+F9]
프로그램 개발환경 사용법 • Turbo C / Boland C • 결과 확인은 “Windows”메뉴의 “User screen”선택 또는 [Alt+F5]
프로그램 개발환경 사용법 • Turbo C / Boland C • 결과 확인은 “Windows”메뉴의 “User screen”선택 또는 [Alt+F5] ☞IDE로 돌아오려면 임의의 키 입력
프로그램 개발환경 사용법 • Turbo C / Boland C • 생성된 실행 파일 수행
프로그램 개발환경 사용법 • UNIX CC/GCC • UNIX환경에서 소스 프로그램을 작성하고 저장하려면 vi와 같은 시스템에서 제공되는 에디터를 사용해야 함 • 프로그램을 작성하려면 프롬프트 상에 “vi tmp.c”를 입력
프로그램 개발환경 사용법 • UNIX CC/GCC • 표준 출력함수를 사용하여 화면에 “Hello. Happy to Meet U”를 출력하는 프로그램을 작성 • 작성 후 저장하기 위해 명령 입력 모드에서 “:wq”를 입력
프로그램 개발환경 사용법 • UNIX CC/GCC • 표준 출력함수를 사용하여 화면에 “Hello. Happy to Meet U”를 출력하는 프로그램을 작성 • 작성 후 저장하기 위해 명령 입력 모드에서 “:wq”를 입력
프로그램 개발환경 사용법 • UNIX CC/GCC • 소스 파일 생성 후 vi 에서 보여주는 메세지
프로그램 개발환경 사용법 • UNIX CC/GCC • cc(c compiler) : UNIX 환경에서의 대표적인 C컴파일러 • gcc : GNU 그룹의 컴파일러로 cc와 사용법 및 성능이 유사 • 컴파일 후 생성되는 실행파일(UNIX에서는 로드 모듈)의 이름은 “a.out” • 컴파일 방법 : “cc filename.확장자” • 여러 개의 파일인 경우 : “cc filename1.확장자filename2.확장자filename3.확장자”
프로그램 개발환경 사용법 • UNIX CC/GCC • 실행 방법 : “a.out”또는 “./a.out” • 컴파일과 실행을 동시에 진행 : “cc tmp.c ; ./a.out” • 컴파일 시 실행파일 이름변경 : “cc tmp.c -o hello” • 컴파일 시 실행파일 이름변경 및 바로 실행 : “cc tmp.c -o hello ; ./hello”
프로그램 개발환경 사용법 • Boland C++ • Boland C++을 실행하면 다음과 같은 개발환경이 나타남 • 최초 실행 시 그림과 같은 로고가 나타나며 ‘ok’버튼을 누르면 사라짐
프로그램 개발환경 사용법 • Boland C++ • 프로그램 작성을 위한 에디터는 “file”메뉴의 “New”항목 하위의 “Text Edit”을 선택
프로그램 개발환경 사용법 • Boland C++ • 프로그램 작성을 위한 에디터는 “file”메뉴의 “New”항목 하위의 “Text Edit”을 선택
프로그램 개발환경 사용법 • Boland C++ • 프로그램 작성 후 컴파일 및 실행 시 “Project”메뉴의 “Make all”선택 또는 [F9]
프로그램 개발환경 사용법 • Boland C++ • 실행 파일 생성 후 Boland C++ 에서 보여주는 메시지와 Work 디렉토리 하위에 생성된 목적파일과 실행 파일 • Boland C++의 make 메시지 윈도우 • 생성된 목적파일과 실행파일
프로그램 개발환경 사용법 • Visual Studio 6.0 • 마이크로소프트의 개발 환경으로 프로그램,웹 사이트,웹 프로그램 등을 개발 • 윈도우와 웹 응용프로그램 개발에 적합한 통합개발환경 • 구성요소 • Visual Basic • Visual InterDev • Visual J++ • Visual Fox Pro • Visual SourceSafe
프로그램 개발환경 사용법 • Visual Studio 6.0 • 초기화면