630 likes | 935 Views
컴퓨터 프로그래밍. 제 1 장 프로그래밍의 개념. C Express. 이진수. Q) 이진수는 십진수와 무엇이 다른가 ?. 이진수는 0 과 1 로만 구성되어 있다. Q) 십진수를 이진수로 바꾸려면 ?. 십진수를 이진수로 바꾸려면 십진수를 2 로 나누고 나머지를 기록하는 작업을 몫이 0 이 될 때까지 되풀이하면 된다. 비트와 바이트. Q) 비트 (bit) 란 무엇인가 ?. 이진수의 하나의 자리수를 의미한다 . 바이너리 디지트 (binary digit) 의 약자이다.
E N D
컴퓨터 프로그래밍 제1장 프로그래밍의 개념 C Express
이진수 Q) 이진수는 십진수와 무엇이 다른가? • 이진수는 0과 1로만 구성되어 있다. Q) 십진수를 이진수로 바꾸려면? • 십진수를 이진수로 바꾸려면 십진수를 2로 나누고 나머지를 기록하는 작업을 몫이 0이 될 때까지 되풀이하면 된다.
비트와 바이트 Q) 비트(bit)란 무엇인가? • 이진수의 하나의 자리수를 의미한다. • 바이너리 디지트(binary digit)의 약자이다. Q) 바이트(byte)란 무엇인가? • 8개의 비트를 모은 것을 바이트라고 한다. Q) 워드(word)란 무엇인가? • 바이트가 4개 모인 것. • 시스템에 따라서 정의가 달라질 수도 있다.
프로그램 Q) 왜 컴퓨터에서는 가전제품처럼 프로그램 설치 없이 바로 동작되도록 하지 않고 불편하게 사용자가 프로그램을 설치하게 하였을까 ? • 컴퓨터를 범용적인 기계로 만들기 위해서이다. 컴퓨터는 프로그래만 바꾸어주면 다양한 작업을 할 수 있다.
기계어 Q) 컴퓨터가 이해할 수 있는 언어는 어떤 것인가? • 컴퓨터가 알아듣는 언어는 한가지이다. 즉 0과 1로 구성되어 있는 “001101110001010...”과 같은 기계어이다. • 컴퓨터는 모든 것을 0과 1로 표현하고 0과 1에 의하여 내부 스위치 회로들이 ON/OFF 상태로 변경되면서 작업을 한다.
프로그래밍 언어의 필요성 Q) 그렇다면 인간이 기계어를 사용하면 어떤가? • 기계어를 사용할 수는 있으나 이진수로 프로그램을 작성하여야 하기 때문에 아주 불편하다. • 프로그래밍 언어는 자연어와 기계어 중간쯤에 위치 • 컴파일러가 프로그래밍 언어를 기계어로 통역
고급언어 • 특정한 컴퓨터의 구조나 프로세서에 무관하게, 독립적으로 프로그램을 작성할 수 있는 언어 • C, C++, JAVA, FORTRAN, PASCAL • 컴파일러: 고급 언어 문장을 기계어로 변환하는 프로그램 TotalScore = MidScore + FinalScore;
C • 1970년대 초 AT&T의 Dennis Ritchie 에 의하여 개발 • B언어->C언어 • UNIX 운영 체제 개발에 필요해서 만들어짐 • 처음부터 전문가용 언어로 출발 Ken Thomson과 Dennis Ritchie가 클린턴 대통령으로부터 National Medal of Technology상을 받는 장면
C언어의 버전 • K & R C • 1978년 “C Programming Language“책 출간 • 비공식적인 명세서 역할 • ANSI C • 1983년 ANSI(American National Standards Institute)는 X3J11이라는 위원회에 의한 표준 • C99 • 1999년에 ISO에 의한 표준 • C++에서 사용되는 특징 추가 • 아직 마이크로소프트는 지원하지 않음(이유: C++에 집중)
C언어의 미래 Q) 앞으로도 C언어는 사용될 것인가? • C언어는 C++와 JAVA의 공통적인 부분이다. • 엠베디드 시스템에서는 C언어가 많이 사용된다. 엠베디드 시스템: 엠베디드 시스템이란 특수 목적의 시스템으로 컴퓨터가 장치 안에 MP3 플레이어, 핸드폰등이 여기에 속한다.
알고리즘의 기술 • 영어와 국어와 같은 자연어 • 순서도(flowchart) • 의사 코드(pseudo-code) • 예제: 숫자들의 리스트에서 최대값을 구하는 문제
자연어 • 자연어 (natural language)는 인간이 사용하는 언어 • 단어들을 명백하게 정의해야 한다. ① 1.리스트의 첫 번째 숫자가 가장 크다고 가정하자. ② 2.리스트의 남아있는 숫자들이 하나씩 조사하여 현재의 최대값보다 크면 노트에 적는다. ③ 3.모든 숫자들을 전부 조사된 후에 노트에 가장 나중에 적힌 숫자가 최대값이 된다.
순서도 • 프로그램에서의 논리순서 또는 작업순서 등을 그래픽으로 표현하기 위한 형식 • 알고리즘이 복잡하면 기술하기가 힘들어진다.
의사 코드 • 자연어보다는 더 체계적이고 프로그래밍 언어보다는 덜 엄격한 언어로서 알고리즘의 표현에 주로 사용되는 코드 알고리즘 GetLargest 입력: 숫자들의 리스트 L. 출력: 리스트에서 가장 큰 값 largest ←L[0] for each n in L do if n > largest then largest ← n return largest
STEP 1-1:정수 k를 1로 나누어서 떨어지면 약수의 개수를 증가 STEP 1-2:정수 k를 2로 나누어서 떨어지면 약수의 개수를 증가 STEP 1:정수 k의 약수의 개수를 구한다. ... STEP 1-k:정수 k를 k로 나누어서 떨어지면 약수의 개수를 증가 문제:주어진 정수 k가 소수인지를 판별하라 STEP 2:약수의 개수가 2이면 소수이다. 알고리즘을 만드는 방법 문제를 한 번에 해결하려고 하지 말고 더 작은 크기의 문제들로 분해한다. 문제가 충분히 작아질 때까지 계속해서 분해한다. (예) 주어진 정수 k가 소수(prime)인가 아닌가를 판별하는 알고리즘을 만들어보자.
코딩 • 알고리즘의 각 단계를 프로그래밍 언어를 이용하여 기술 • 어떤 프로그래밍 언어로도 가능 • 알고리즘을 프로그래밍 언어의 문법에 맞추어 기술한 것을 소스 프로그램(source program) • 소스 프로그램은 주로 텍스트 에디터나 통합 개발 환경을 이용하여 작성 • (Q) 알고리즘 개발과 코딩 중 어떤 것이 더 어려울까? • . (A) 알고리즘 개발이 더 창의적인 작업이고 더 어렵다
컴파일 • 소스 프로그램을 목적 프로그램으로 변환하는 작업 • 컴파일러가 수행 • 컴파일 오류: 문법 오류 • (예) He go to school; • 오류가 발생하면 소스 프로그램을 수정한 후에 다시 컴파일
링크 • 컴파일된 목적 프로그램을 라이브러리와 연결하여 실행 프로그램을 작성하는 것 • 라이브러리(library):프로그래머들이 많이 사용되는 기능을 미리 작성해 놓은 것 • (예) 입출력 기능, 파일 처리, 수학 함수 계산 • 링크를 수행하는 프로그램을 링커(linker)라고 한다.
실행 및 디버깅 • 실행 파일: 실행 파일은 윈도우즈에서는 .exe라는 확장자 • 실행 시간 오류(run time error): • 0으로 나누는 것 • 잘못된 메모리 주소에 접근하는 것 • 논리 오류(logical error): • 문법은 틀리지 않았으나 논리적으로 정확하지 않는 것 • (예) ① 그릇1과 그릇2를 준비한다. ② 그릇1에 밀가루, 우유, 계란을 넣고 잘 섞는다. ③ 그릇2를 오븐에 넣고30분 동안 350도로 굽는다.
디버깅 • 소스에 존재하는 오류를 잡는 것
쉽게 풀어쓴 C언어 Express 제2장 프로그램 개발과정 C Express
에디터 (editer) 컴파일러 (compiler) 링커 (linker) 로더 (loader) 소스파일 test.c 오브젝트 파일 test.obj 실행파일 test.exe 통합 개발 환경(IDE) 프로그램 작성 과정
프로그램 작성 단계 편집 (edit) 에디터를 이용하여 원하는 작업의 내용을 기술하여 소스 코드 작성 소스 파일(source file): 소스 코드가 들어 있는 텍스트 파일 (예) test.c 컴파일 (compile) 소스 파일->기계어로 변환 오브젝트 파일(object file): 기계어로 변환된 파일 (예) test.obj 링크(link) 오브젝트 파일들을 라이브러리 파일들과 연결하여 하나의 실행 파일생성 실행 파일 (executable file): 실행이 가능한 파일 (예) test.exe
통합 개발 환경 • 통합 개발 환경(IDE: integrated development environment): • 에디터 + 컴파일러 + 디버거
통합 개발 환경의 종류 • 비주얼 C++(Visual C++) • 마이크로소프트사의 제품 • 윈도우 기반의 거의 모든 형태의 응용 프로그램 제작 가능 • 최신 버전: 비주얼 스튜디오 2005 • 우리가 사용할 버전: 비주얼 스튜디오 6.0
통합 개발 환경의 종류 • Dev-C++ • 오픈 소스 프로젝트의 산물 • C/C++ 통합 개발 환경 • GCC 컴파일러 이용 • 무료
개발 도구를 사용할 때의 유용한 정보를 말해준다. 체크되어 있으면 다음번 시작때도 팁을 보여준다. 다음 팁을 계속보려면 우른다. 비주얼 C++ 실행
프로젝트: 실행 파일을 만들기 위하여 필요한 파일들 워크스페이스: 여러 개의 프로젝트들을 가지고 있는 작업공간 워크스페이스와 프로젝트 • 워크스페이스(workspace); 작업 공간, 여러 개의 프로젝트가 있을 수 있다. • 프로젝트(project): 하나의 실행 파일을 만들기 위하여 필요한 파일들의 그룹
① 프로젝트가 저장되는 폴더를 지정한다. 프로젝트 이름을 적어준다. Win32 콘솔 애플리케이션을 선택한다. ③ ④ ② ⑥ ⑤ 프로젝트 생성하기
① simple application을 선택하면 간단한 c++ 프로그램이 작성되니 주의! 비어있는 프로젝트를 만든다. ② 프로젝트 생성하기
① 소스파일을 만든다는 의미이다. 반드시 확장자를 .c로 하여야 한다. 만약 파일 이름만 쓰게되면 .cpp라는 C++확장자가 붙는다. ② ③ ④ 소스 파일 생성하기
③ ② test.c의 내용이 여기에 표시된다. test.c를 더블클릭한다. 파일들을 보는 탭이다. ① 소스 파일에 프로그램 작성
소스 파일을 에디팅하는 윈도우. 워크스페이스와 프로젝트에 속하는 파일을 보여준다. 컴파일과 링크과정에서의 메시지 출력. 비주얼 C++의 전체 구조
철자가 틀리지 않도록 조심하면서 예제 소스 파일을 입력합니다 프로그램 입력
/*와 */에서 /와 *는 반드시 붙여서 쓰도록 한다. include나 stdio와 같은 단어는 붙여서 쓴다. 문장의 끝에는 ;을 잊지말자. ;와 :을 잘 구별한다. 프로그램 입력시 주의 사항 /*첫번째프로그램*/ #include <stdio.h> int main(void) { printf("Hello World!"); return 0; } 큰따옴표안의 문장들은 화면에 그대로 출력된다. 여기서 \와 n은 반드시 붙여야 한다. int와 main 은 별도의 단어이므로 구별하기 위하여 공백이 있어야 한다. 서로 대응되는 중괄호들은 같은 열에 놓는 편이 좋다. 중괄호안에 들어가는 문장들은 일반적으로 들여쓰기를 한다. 탭키를 이용하거나 스페이스키를 이용한다. 비주얼 C++에는 자동적으로 들여쓰기를 해주는 기능이 있다.
빌드(build)란 보통 컴파일과 링크를 수행하여 실행 파일을 작성하는 것을 의미한다. 컴파일하기
에러가 없다면 이런 화면이 나온다. 컴파일 결과
오브젝트 파일과 실행 파일이 생성된 것을 확인할 수 있다. 오브젝트 파일과 실행 파일의 생성
작성된 프로그램을 실행시킨다. 프로그램 실행 하기
프로그램 실행이 끝나면 항상 나오는 메시지이다. 프로그램의 출력 실행 결과 화면
Hello World! 첫번째 프로그램의 설명 /* 첫번째프로그램*/ #include <stdio.h> int main(void) { printf("Hello World!"); return 0; }
응용 프로그램 #1 • 다음과 같은 출력을 가지는 프로그램을 제작하여 보자. Hello World! Kim ChulSoo
첫번째 버전 • 문장들은 순차적으로 실행된다는 사실 이용 /* 첫번째프로그램*/ #include <stdio.h> int main(void) { printf("Hello World!"); printf(“Kim ChulSoo"); return 0; } 우리가 원하는 결과가 아님! Hello World!Kim ChulSoo
줄바꿈 문자 \n • 줄바꿈 문자인 \n은 화면에서 커서는 다음줄로 이동하게 한다.
변경된 프로그램 • 줄바꿈 문자를 포함하면 우리가 원하던 결과가 된다. /* 첫번째프로그램*/ #include <stdio.h> int main(void) { printf("Hello World!\n"); printf(“Kim ChulSoo"); return 0; } Hello World! Kim ChulSoo
응용 프로그램 #2 • 다음과 같은 출력을 가지는 프로그램을 제작하여 보자. 3X1=3 3X2=6 3X3=9