600 likes | 907 Views
누구나 쉽게 즐기는. C 언어 콘서트. 한남대학교 컴퓨터공학과 이 재 광 교수. 수업계획. 과목명 : 프로그래밍 기초 학수번호 : 20629 학점 및 이수구분 : 3 학점 , 전공선택 주당시간 : 강의 (2 시간 ), 실습 (2 시간 ) 수강대상 : 컴퓨터공학과 1 학년 담당교수 : 이 재 광 연 구 실 : 공과대학 90704 호 전화번호 : 629-7559(OFFICE) / 010-5407-9698(HP) E-mail : jklee@hnu.kr
E N D
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수
수업계획 • 과목명 : 프로그래밍 기초 • 학수번호 : 20629 • 학점 및 이수구분 : 3학점, 전공선택 • 주당시간 : 강의(2시간), 실습(2시간) • 수강대상 : 컴퓨터공학과 1학년 • 담당교수 : 이 재 광 • 연 구 실 : 공과대학 90704호 • 전화번호 : 629-7559(OFFICE) / 010-5407-9698(HP) • E-mail : jklee@hnu.kr • Homepage : http://netwk.hannam.ac.kr/(가상강의실)
수업목표 • 프로그래밍에 대한 기본 원리 및 구조를 이해한다. • C언어의 개념 및 함수 사용법의 학습을 통한 구조적프로그래밍 기법을 이해한다. • C언어를 익혀 프로그래밍 언어의 기초를 이해한다.
수업방법 • 수업 내용을 이해하고 추가 질문을 받는다. • 수업 내용을 정리하여 실제로 실습해 본다. • 예제보다 효율적인 방법을 토론하고 실습해본다.
평가방법 • 평가기준 : 절대평가 • 중간고사 : 30% • 기말고사 : 30% • 과제물 : 30% • 출석 : 10%
Chapter 1 프로그래밍 소개
목차 1.1 프로그래밍의 소개 1.2 프로그래밍 언어의 종류 1.3 C언어 1.4 알고리즘 1.5 프로그램 개발 과정 1.6 비주얼 C++를이용한 프로그램 작성
1.1 프로그래밍의 소개 • 컴퓨터란? • 컴퓨터는 기본적으로 계산하는 기계 • 디지털과 아날로그의 차이 • 디지털은 모든 데이터를 숫자 형태로 표현 • 아날로그는 연속적인 값으로 데이터를 표현 • 컴퓨터의 계산 능력 • 컴퓨터는 전자 회로를 이용하여 계산을 하기 때문에 속도가 빠름 • 전자 회로를 이용한 계산을 위하여 이진수를 사용 • 컴퓨터의 정의 • 계산기는 정해진 기능만을 수행, 그 기능을 변경할 수 없음 • 컴퓨터는 프로그램이라는 개념을 도입하여 수행하는 기능을 쉽게 변경할 수 있음
1.1 프로그래밍의 소개 • 이진수 • 이진수는 0과 1로만 구성 이진수는 십진수를 2로 나눈 나머지를 기록하는 작업을 몫이 0이 될 때까지 되풀이 해서 구함
1.1 프로그래밍의 소개 • 비트와 바이트 • 비트 : 이진수의 하나의 자리 수 • Binary digit의 약자 • 바이트 : 8개의 비트를 모은 것
1.1 프로그래밍의 소개 • 비트의 표현 • 컴퓨터 내부에서 구체적인 비트의 표현 0 1 0 1 전자 회로에서 0은 열린 스위치,1은 닫힌 스위치
1.1 프로그래밍의 소개 • 스위치의 구현 • 하나의 트랜지스터는 소형 전자 스위치 역할 트랜지스터의 에미터와 콜렉터가 스위치의 역할 베이스에 전압이 걸리면 스위치가 닫힘
1.1.2 컴퓨터의 구성 요소 • 컴퓨터의 구성 요소를 크게 2가지로 분류 • 컴퓨터는 기본적으로 하드웨어와 소프트웨어로 구분 중앙처리장치 하드웨어 메인메모리 보조기억장치 컴퓨터 입출력장치 소프트웨어 시스템소프트웨어 응용소프트웨어
1.1.2 컴퓨터의 구성 요소 • 하드웨어 중앙처리장치(CPU) 출력장치 제어장치 보조기억장치 산술/논리장치 입력장치 레지스터 메인 메모리
: 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍 도구 등 시스템 소프트웨어 소프트웨어 응용 소프트웨어 : 워드 프로세서, 스프레드 시트, 그래픽 프로그램, 미디어 재생기 등 1.1.2 컴퓨터의 구성 요소 • 소프트웨어
1.1.3 프로그램 안에 들어 있는 것 학생들의 성적의 평균을 계산해줘 “평균”이란 의미를 모른다. • 프로그램 • 프로그램 안에는 컴퓨터에게 무엇을 어떻게 할 것인지를 지시하는 작업의 지시서가 들어있다고 생각 할 수 있음 평균이란 단어의 의미는 알겠지만 단계적인 절차를 말해주어야 한다. 학생들의 성적을 입력받고 입력받은 성적을 합하여, 학생수로 나눈다. 결과는 화면에 표시하라. 처음부터 이렇게 지시하였어야 한다.
1.1.3 프로그램 안에 들어 있는 것 • 명령(instruction) • 프로그램의 각 문장은 컴퓨터에게 작업을 지시하는 명령으로 구성 • 명령은“숫자를 더하시오”,“데이터를 저장하시오”와 같은 형식 • 위와 같이 프로그램을 만드는 작업을 프로그래밍 • 프로그램을 만드는 사람은 프로그래머 역사상 최초의 프로그래머는 에이다 러브레이스라는 여성으로, 현대적 컴퓨터가 나오기 100년 전에 이미 서브루틴, 루프, 점프 등의 원리를 고안
1.1.4 컴퓨터가 이해하는 언어 • 자연어 • 인간이 사용하는 언어 • 단어들을 명백하게 정의 • 기계어 • 사실 컴퓨터가 알아듣는 언어는 한 가지 • 컴퓨터는 0과 1로 구성된 이진수의 개념 위에 만들어진 기계 • 이러한 이진수의 형태의 언어가 기계어
1.1.4 컴퓨터가 이해하는 언어 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000 00000011 10100001 01100110 10001001 01000101 11111010 다음과 같은 기계어는 사람에게는 매우 불편한 언어이다. 또한 하드웨어에 종속되어 있기 때문에, 모든 하드웨어의 기계어를 숙지하기란 사실상 불가능 따라서 프로그래밍 언어라는 것을 이용하여 컴파일러가 통역하여 컴퓨터 지시 프로그래밍 언어는 자연어와 기계어의 중간쯤에 위치 컴파일러 기계어 프로그래밍 언어
1.2 프로그래밍 언어의 종류 • 프로그래밍 언어 • 프로그래밍 언어는 크게 저급언어와 고급 언어의 2가지로 분류 • 저급 언어 • 기계어, 어셈블리어 • 어셈블리어는 이진수가 아닌 영어의 약자인 기호로 표기 • 어셈블리어는 어셈블러를 통해 이진수로 변환 • 어셈블리어 또한 하드웨어에 종속 • 고급 언어 • 하드웨어에 종속되지 않고 독립적으로 프로그램을 작성할 수 있는 언어 • C, C++, C#, Java, Fortran, Pascal ... • 고급언어는 컴파일러에 의해 이진수로 변환
1.2 프로그래밍 언어의 종류 • FORTRAN • FORTRAN은 1950년대에 가장 먼저 만들어진 언어로 수치 계산과 과학 기술 계산에 적합 • COBOL • COBOL은 1959년에 만들어진 비즈니스 사무 처리 언어구어체 문장 형태로 기술할 수 있도록 설계 • PASCAL • PASCAL은 1970년대에 니클라우스 비르트에 의하여 개발된 절차적인 프로그래밍 언어교육용으로 알려져 있음 • C • C언어는 1970년대 초반 UNIX 운영체제를 위하여 AT&T의 벨 연구소에서 일하던 데니스 리치에 의하여 개발됨
1.2 프로그래밍 언어의 종류 • C++ • C++는 1983년 벨 연구소의 스트로스트럽에 의하여 개발된 언어 C언어에 클래스 개념을 비롯하여 여러 가지 객체지향적인 특징들을 추가한 언어 • C# • C++에 기본을 두고, 비주얼 베이직의 편의성을 결합하여 만든 컴포넌트 프로그래밍 언어 • 2000년 6월 마이크로소프트가 닷넷(.Net) 플랫폼을 위해 개발 • Java • Java는 1995년 선 마이크로시스템의 제임스 고슬링에 의하여 개발된 객체지향 언어자바는 JSP의 형태로 인터넷 웹페이지에서도 실행이 가능
1.3.1 C언어의 특징 • 간결함 • C언어에는 꼭 필요한 기능만 들어 있고, 표기법이 매우 간결 • 효율적 • C로 작성된 프로그램이 크기가 작고, 실행 속도가 빠르고 메모리를 효과적으로 사용 • 뛰어난 이식성 • 이미한 번 작성된 C프로그램을 다른 CPU를 가진 하드웨어로 쉽게 이식할 수 있음 • PC에서 작성한 프로그램도 컴파일만 다시 하면 슈퍼 컴퓨터에서도 실행가능
1.3.1 C언어의 특징 • 저수준, 고수준 프로그래밍이 가능 • C언어는 운영체제를 만들었던 언어 • 어셈블리어 만큼의 구체적인 하드웨어 제어가 가능 • 가전제품에 들어있는 임베디드 프로그램은 대부분 C언어로 개발 • 배우기가 어려움 • C언어는 처음에 교육용이 아닌 전문가용으로 개발되어 배우기가 약간 어렵고, 포인터 등을 잘못 사용하는 경우 문제가 발생 • 포인터는 잠재적인 문제점을 갖고 있으므로 최근의 프로그래밍 언어인 Java나 C#에서는 포인터를 거의 사용하지 않거나 사용하지 못함 • Java나 C#에서는 포인터를 사용하지 않고도 같은 동작을 할 수 있도록 구현 가능
1.4 알고리즘 오븐의 사용법을 알고 음식의 재료가 있어도, 재료들을 어떤 비율로 섞고 오븐의 온도는 어떻게 맞추고, 얼마나 오래 구워야 하는지 등의 요리 방법을 모른다면 요리를 제대로 할 수 없음 프로그램이 요리와 같다면 알고리즘은 요리법에 해당
1.4.1 알고리즘이란? • 문제 해결 절차 • 어떠한 문제가 주어져 있고 이것을 컴퓨터로 해결하려고 한다면 제일 먼저 절차를 고안해야 함 • 이러한 절차는 C언어를 사용하건 Java를 사용하건 동일 • 요리법(알고리즘)을 알고 재료와 오븐의 사용법을 알면 요리 가능 ① 빈 그릇을 준비한다. ② 이스트를 밀가루, 우유에 넣고 저어준다. ③ 버터, 설탕, 계란을 추가로 넣고 섞는다. ④ 따뜻한 곳에 놓아두어 발효시킨다 ⑤ 170~180도의 오븐에서 굽는다
1.4.2 알고리즘의 예 • 1부터 10까지의 합을 구하는 알고리즘 ① 1부터 10까지의 숫자를 직접 하나씩 가산 1 + 2 + 3 + … + 10 = 55 ② 두 수의 합이 10이 되도록 숫자들을 그룹화 하여 그룹의 개수에 10을 곱하고 남은 숫자를 가산 (0 + 10) = 10 (1 + 9 ) = 10 (2 + 8 ) = 10 (3 + 7 ) = 10 (4 + 6 ) = 10 5 ③ 공식을 이용하여 계산 10 * ( 1 + 10 ) / 2 = 55 ┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┛ + 5 = 55 10 * 5 = 50
1.4.3 순서도 • 숫자들이 적혀있는 리스트에서 최대값 찾기 • 다음과 같은 자연어로 이루어진 알고리즘을 정의 ① 리스트의 첫 번째 숫자가 가장 크다고 가정 ② 리스트의 남아있는 숫자들을 하나씩 조사하여 현재의 최대값 보다 크면 노트에 기록 ③ 모든 숫자들이 전부 조사된 후에 노트의 가장 뒤에 적힌 숫자가 최대값
1.4.3 순서도 • 알고리즘을 좀 더 보기 쉽게 순서도(flow chart)로 표현 최대값 알고리즘 시작 첫 번째 숫자가 최대값이라고 노트에 기재 리스트에 아직 숫자가 남아있는가? 현재의 최대값보다 큰가? 노트의 맨 끝에 있는 숫자를 출력 노트의 맨 끝에 숫자를 추가 종료
1.4.3 순서도 • 의사 코드 • 의사 코드 : 또 다른 알고리즘의 표현 방법 • 자연어보다는 더 체계적이고 프로그래밍 언어보다는 덜 엄격 알고리즘 GetLargest 입력: 숫자들의 리스트 L. 출력: 리스트에서 가장 큰 값 largest ←L[0] for each n in L do if n > largest then largest ← n return largest
1.5 프로그램 개발 과정 • 편집, 컴파일, 링크 과정을 거쳐 실행파일 생성 에디터 (editer) 컴파일러 (compiler) 링커 (linker) 로더 (loader) 소스파일 test.c 오브젝트 파일 test.obj 실행파일 test.exe 소스 파일, 오브젝트 파일, 실행 파일 중 반드시 소스파일은 반드시 보관하여야 함 오브젝트 파일 혹은 실행 파일은 없어도 컴파일, 링크 과정으로 손쉽게 다시 만들 수 있지만, 역으로 실행 파일 혹은 오브젝트 파일에서 소스 파일을 온전히 얻는 것은 매우 힘듬
1.5.1 필요한 도구 • 통합 개발 환경 (IDE: integrated development environment) • 편집, 컴파일, 디버깅 과정을 하나의 툴로 할 수 있도록 만들어진 개발 환경 통합 개발 환경 (IDE) 에디터 컴파일러 디버거
1.5.2 비주얼 C++ • Visual C++ 2010 Express • 마이크로소프트에서 무료로 배포하는 C/C++ 개발용 IDE 무료로 배포하는 Visual Studio 2010 Express 는 http://www.microsoft.com/express/Windows/ 에서 다운로드 가능
1.5.2 비주얼 C++ 빨간색 Box안의 보라색 링크를 클릭하면 비주얼 C++의 다운로드 사이트로 이동
1.5.2 비주얼 C++ Select language 를 눌러서 한글 버전 을 다운로드
1.5.2 비주얼 C++ 다운받은 파일을 실행하면 웹에서 프로그램을 다운로드 하여 설치를 시작 →② ① ③ ↗ ↗ ④ ⑤ ↗ ↗
1.5.2 비주얼 C++ • 비주얼 C++ 환경 설정 – 줄 번호 도구 > 옵션 을 클릭하여 옵션 창을 연다
1.5.2 비주얼 C++ • 비주얼 C++ 환경 설정 – 줄 번호 → ① 텍스트 편집기 > 모든 언어 > 일반 > 줄 번호 > 확인 텍스트 편집기를 누르고 모든 언어를 누르고 일반을 누르고 줄 번호 앞의 체크박스에 체크 표시가 되도록 클릭 한 후 확인 버튼을 클릭 → ② → ③ → ④ ⑤ ↗
1.5.3 비주얼 C++ • 비주얼 C++ 2010 제품 등록 도움말 > 제품 등록 비주얼 C++ 2010 Express를 설치하였다면 제품을 등록하여야 함 제품 등록을 하지 않으면 30일만 사용가능
1.5.3 비주얼 C++ 온라인으로 등록 키 받기 Microsoft Live ID를 가지고 있다면 바로 로그인 가지고 있지 않다면 지금 등록을 클릭하여 회원가입 후 이용 할 수 있음
1.5.3 비주얼 C++ • Microsoft 회원 가입 왼쪽의 회원 가입 폼을 모두 채우고 회원가입을 하면 오른쪽과 같은 E-mail을 확인 할 수 있음 다음 링크를 사용하여 계정을 확인하세요.의 링크를 클릭하면 계정이 확인되었다는 메시지가 보여짐
1.5.3 비주얼 C++ 다시 온라인으로 등록 키 받기 버튼을 눌러 보면 왼쪽과 같은 제품 등록 폼으로 이동함 왼쪽의 제품 등록 폼을 모두 채우면 오른쪽과 같이 마지막으로 전자메일을 확인하라는 메시지가 보여짐 다시 E-mail을 확인해 보면 확인 메시지가 수신된 것을 볼 수 있음 확인 메시지 라는 E-mail에서 동의함 버튼을 눌러 최종적으로 등록 키를 획들
1.5.3 비주얼 C++ • 제품 키 등록
1.5.3 비주얼 C++ 다시 도움말 > 제품 등록 을 클릭해 보면 제품 등록이 된 것을 확인 할 수 있음
1.6 비주얼 C++를 이용한 프로그램 작성 • 프로젝트의 생성 파일 > 새로 만들기 > 프로젝트 를 클릭하여 새 프로젝트 생성 프로젝트란 하나의 실행 파일을 만들기 위하여 필요한 파일들의 그룹
1.6 비주얼 C++를 이용한 프로그램 작성 → ② → ① 프로젝트 명을 입력 프로젝트 명을 입력하면 솔루션 이름이 자동으로 입력 반드시 프로젝트 명과 솔루션 이름이 같을 필요는 없음 ※ 솔루션이란 하나의 어플리케이션을 만들기 위한 프로젝트의 그룹 ③ ↗ ④
1.6 비주얼 C++를 이용한 프로그램 작성 이전 단계에서 Win32 콘솔 응용 프로그램을 선택하였다면, Win32 응용 프로그램 마법사가 실행 다음 버튼을 누르고, 빈 프로젝트에 체크를 한 다음, 마침 버튼을 눌러서 프로젝트를 생성 ① ↗ ※ 이전 단계에서 Win32 콘솔 응용 프로그램을 선택하지 않고 빈 프로젝트를 선택하였다면, 현재 단계가 나오지 않고 곧바로 프로젝트가 생성되고 프로그램도 문제 없이 작성 할 수 있지만, 디버깅하지 않고 실행(Ctrl + F5)으로 실행 하였을 때 결과 값이 화면에 출력 되고 곧바로 콘솔 창이 닫혀 버리기 때문에 system(“PAUSE”); 혹은 getch(); 등의 함수를 추가로 사용해야 함 → ② ③ ↗