IT CookBook, C로 시작하는 컴퓨터 프로그래밍 개정3판 (2024)

All 123456789101112131415161718

P:01



P:02

지은이 머리말 프로그래밍 초보자도 쉽게 배워 자신감을 얻는 C 언어 입문서 2006년에 초판, 2012년에 개정판, 그리고 2017년에 개정3판까지 10년이 넘도록 독자들이 이 책에 관심을 가져주신 것에 감사드린다. 초판과 개정판을 집필할 때도 부족한 부분이 많다고 생각했는데 개정3판을 출간하면서도 여전히 부족하다는 아쉬움이 있다. 이런 가운데에도 ‘어떻게 설명하면 독자 들이 프로그래밍을 좀 더 쉽고 친근하게 접할 수 있을까?’라는 생각과 독자들의 귀한 의견을 반영하 여 보완한 개정3판을 펴내게 되었다. 다양한 종류의 프로그래밍 언어가 있지만 C 언어는 여러 용도로 사용할 수 있는 필수 프로그래밍 언 어다. 저자도 연구와 현업에서 다양한 프로그래밍 언어를 사용하고 있지만 C 언어를 배운 것에 감사 할 때가 많다. C 언어만 제대로 배우면 다른 프로그래밍 언어는 큰 어려움 없이 배울 수 있다. 이는 프로그래밍을 처음 시작하는 입문자에게 C 언어를 먼저 추천하는 이유이기도 하다. 이런 생각을 바 탕으로 개정3판은 초보자가 C 언어를 쉽게 배울 수 있도록 집필하고자 노력했다. 이 책의 주요 대상은 프로그래밍을 처음 시작하는 독자다. 프로그래밍을 배운 적이 있으나 중도에 포 기한 독자도 포함된다. 초급부터 중급 수준에 이르는 다양한 예제를 통해 응용력을 기르고, 본문에서 학습한 수준으로 해결 가능한 실전 예제를 통해 다양한 프로그래밍을 경험해볼 수 있다. 복잡한 문법 을 일상의 예나 도식화를 통해 쉽게 이해할 수 있으며, ‘혼자해보기’ 코너에서는 학습 내용을 다시 확 인하면서 프로그래밍의 자신감도 기를 수 있다. 또한 각 장 마지막의 ‘요약’을 통해 해당 장의 핵심 내 용을 복습하고, 풍부한 ‘연습문제’를 풀어보면서 배운 내용을 스스로 정리할 수 있다. 아무쪼록 이 책 을 통해 프로그래밍과의 거리감을 좁히고 자신감을 얻기 바란다. 개정3판이 나오기까지 많이 애써준 한빛아카데미(주) 가족에게 감사드린다. 가정에서 늘 함께하며 힘이 되어주는 예진, 지훈, 희진이와 사랑하는 아내에게도 고마움을 전한다. 프로그래밍을 하거나 연구를 할 때 내가 참 모르는 게 많다는 생각을 하곤 한다. 나의 부족한 모습에 실망을 하기도 하지만, 오히려 배우는 기회로 여기고 새로운 마음으로 다시 시작하게 된다. 이렇게 포기하지 않고 지속하는 것은 나만의 힘으로는 되지 않는데, 이런 능력을 하나님께서 주시고 앞으로 도 계속 주실 것에 감사드린다. 나의 힘이 되신 여호와(하나님)여 내가 주를 사랑하나이다(시편 18:1). 지은이 문호석

P:03

다양한 예제를 따라 하며쉽게 배우는 C 프로그래밍대학에서 강의할 때 프로그래밍의 기본 지식이 전혀 없는 초보자를 위한 교재의 필요성을 절실히 느끼고 처음 집필 작업을 시작했다. 이 책은 프로그래밍의 기본 지식이 없어도 C 언어를 배울 수 있도록 기초적인 예제를 다양하게 제시했다. 이렇게 구성한 이 책이 10년 넘게 독자들의 지속적인 지지와 관심을 받고 개정3판을 출간하게 되어 감사드린다.컴퓨터 프로그래밍 과목을 처음 접한 대학 시절에 프로그래밍 명령어를 천공 카드에 입력하며 신기해했던 기억이 생생하다. 세월이 많이 흘러 컴퓨터 관련 직장에서 10년 넘게 근무한 후 이제는 학생들에게 컴퓨터 관련 과목을 가르치는 입장이 되었다.기초적인 프로그래밍 원리에 따른 간결한 문법 설명, 다양한 예제, ‘혼자해보기’와 ‘연습문제’를 통해초보자도 컴퓨터 프로그래밍에 쉽게 접근할 수 있는 책이 되도록 최대한 노력했다. 프로그래밍을 처음 배우거나 대학에서 강의를 시작하는 독자 모두에게 이 책이 도움이 되기를 바라는 마음이다.문호석 교수의 정성어린 집필 작업에 감사드리며, 이 책이 나오기까지 도와준 한빛아카데미(주) 직원들에게도 감사의 인사를 전한다. 늘 따뜻한 지지와 신뢰를 보여주는 사랑하는 아내와 진혁, 혜연, 은혁에게도 항상 감사하는 마음이다. “진리를 알지니 진리가 너희를 자유케 하리라”라는 말씀과 같이참된 진리로 인도하시는 하나님께 감사드린다. 지은이 손명호[개정3판에서 달라진 부분]❶ 비주얼 스튜디오 2015의 비주얼 C++ 기반/비주얼 C++ 6.0 지원비주얼 스튜디오 2015의 비주얼 C++를 기반으로 설명을 진행하고 본문에서 소개하는 예제의 테스트도 마쳤다. 비주얼 C++ 6.0 사용자를 위한 실습 환경 구축은 PDF 파일 형식으로 예제 소스와 함께 제공한다.❷ 초보자를 위한 배려모든 장에 걸쳐 기존 내용을 세밀하게 검토하여 수정·보완했다. 프로그래밍을 처음 접하는 독자도 쉽게이해할 수 있도록 깊이 고민하면서 내용을 가다듬었다.❸ 연습문제 보강 및 실전 예제 추가C 언어의 폭넓은 활용을 위해 연습문제를 대폭 수정했다. 13장의 실전 예제에서는 명중률 계산의 이해를돕기 위해 확률을 이용한 면적 계산 프로그램을 추가하여 단계별로 원리를 이해하면서 프로그래밍을 할수 있다.

P:04

이 책의 사용 설명서 누구를 위한 책인가 ▶프 로그래밍을 해보지 않았거나 중도에 포기한 이들을 위한 C 언어 입문서다. 학습자의 부담을 덜 어주기 위해 꼭 알아야 할 내용만 간결하게 담되, 복잡한 문법은 다양한 수준의 예제를 직접 프로 그래밍하면서 이해할 수 있도록 했다. 연습문제와 실전 예제 프로그램을 통해 응용력까지 기를 수 있다. ▶컴 퓨터 프로그래밍이 처음인 이들을 대상으로 한 책이므로 특별한 선수 과목은 없다. 그렇지만 컴 퓨터로 문서를 작성하고 인터넷을 검색하는 등 컴퓨터의 일반 기능을 사용할 수 있고 컴퓨터와 친 숙한 상태라면 이 책의 내용을 좀 더 수월하게 자기 것으로 만들 수 있을 것이다. 예제 소스 ▶예 제는 윈도우 7에서 Visual Studio 2015 버전으로 테스트했다. 다음 주소에서 본문 예제 자료 를 내려받을 수 있다. http://www.hanbit.co.kr/src/4318 04 형 변환 이 책의 구성 요소 C 언어에서 변수 2개로 연산을 수행할 때 두 변수의 자료형이 다르면 하나의 자료형을 다른 자료형으로 변환하여 자료형을 같게 만든 후 다음 작업을 수행해야 한다. 예를 들어 정수형 실습 1-2 Visual C++에서 환경 설정하기 혼자해보기 6-4 변수와 실수형 변수를 더할 경우 형식이 다른 두 자료형을 통일할 필요가 있다. 이와 같이 자 료형을 바꾸는 것을 형 변환이라고 한다. 형 변환 방법에는 컴파일러가 자동으로 해주는 묵시 1 프로그램 편집 창에서 [Tools]-[Options]를 선택하면 [Options] 대화상자가 나타난다. 다음 소스코드를 실행해보고 어떤 기능을 수행하는지 확인하시오. 적 형 변환과 사용자가 강제로 지정하는 명시적 형 변환이 있다. 묵시적 형 변환은 다음과 같 이 데이터의 값을 잃지 않는 방향으로 이루어진다. [Options] 대화상자에서 Environment의 [Fonts and Colors]를 선택하면 Visual C++ 통 01 #include <stdio.h> char → short → int → unsigned → long → float → double 합 개발 환경에서 사용하는 글자의 형태나 색상을 바꿀 수 있다. 02 03 int main(void) 다음은 묵시적 형 변환의 예다. a가 정수형이고 b가 실수형이므로 데이터를 손실하지 않으면 서 연산하기 위해 a의 자료형이 자동적으로 float형으로 바뀐다. 04 { int a = 10; 05 int i, j, index, input; float b = 20.05, c; c = a + b; // a = 10.00이 되는데, 이는 정수형이 실수형으로 자동 변환된 것이다. 06 사용자가 강제로 형 변환을 시키는 명시적 형 변환의 경우, 캐스팅 연산자를 사용하여 형 변 07 printf(\"임의의 정수를 입력하세요 : \"); 환을 한다. 명시적으로 자료형을 변환하는 방법은 연산식 앞에 ( )를 붙이고 ( ) 안에는 변환하 는 자료형을 넣는다. 다음은 float형의 변수 y를 int형으로 강제 변환한 예다. 08 scanf(\"%d\", &input); 캐 스팅은변수형을바꿀때사용하는방법또는형변환자체를의미한다.또한다음예에서형변환을시키는(int)를캐스팅연산자라고 09 한다. 10 for(i = 1; i <= input; i++) float x; float y = 14.66; 11 { x = (int) y / 2; // y = 14가 되는데, 이는 실수형이 정수형으로 강제 변환된 것이다. 12 index = 0; TIP 13 064 C로 시작하는 컴퓨터 프로그래밍 그림 1-15 [Options] 대화상자 항목 14 for(j = 1; j <= i; j++) C 언어의 문법이나 관련 용어에 대한 15 { 2 소스 작성 창의 배경색을 바꿔보자. 현재는 기본값인 Default로 설정되어 있다. ❶ [Plain 16 if(i % j == 0) Text]의 Item background 항목에서 원하는 색상을 선택하는데 여기서는 ‘Silver’를 선택했 17 index+ +; 다. ❷ <OK>를 클릭하여 대화상자를 닫는다. 소스 작성 창의 배경색이 은색으로 바뀐다. 18 } 19 20 if(index == 2) 21 printf(\"%d

\", i); 22 } 실습과 예제 23 혼자해보기24 return 0; 25 } 개발 도구를 설치하거나 환경 설정을 하 예제 프로그램과 비슷한 유형의 문제힌트초깃값과index가어떤역할을하는지유의해서확인한다. 는 부분은 실습으로, 기본 이론의 이해 를 직접 풀어보면서 응용력을 기를 수 부연 설명이다.C컴퓨터프로그래밍01_021~228.indd 64 17. 4. 6. 오후 12:20 그림 1-16 소스 작성 창의 배경색 바꾸기 있다. 를 돕는 따라하기는 예제로 제시한다. 038 C로 시작하는 컴퓨터 프로그래밍 178 C로 시작하는 컴퓨터 프로그래밍 C컴퓨터프로그래밍01_021~228.indd 38 C컴퓨터프로그래밍01_021~228.indd171. 748. 6. 오후 12:20 17. 4. 6. 오후 12:20

P:05

무엇을 다루는가 ➌ 심화 학습(10장~12장)➊ 준비 학습(1장~4장) C 언어의 핵심인 포인터와 구조체에 대해 철저히 분석한 다. 특히 앞서 배운 내용과 포인터의 연관성을 중점적으로C 언어의 특징과 필요성을 이해하고 학습 동기를 부여한 다루므로 좀 더 수준 높은 프로그래밍을 익힐 수 있다. 또한다. 먼저 간단한 C 프로그램과 C 언어의 표준 입출력에 대 파일 처리를 통해 프로그래밍 결과물을 만드는 재미도 맛해 배우고 실습 방법을 학습한다. 다음으로 C의 자료형과 볼 수 있다.연산자에 대한 기본 개념을 이해하면서 C 프로그래밍에 대한 감각을 익힌다. ➍ 실전 예제(13장)➋ 기본 학습(5장~9장) 앞서 쌓은 지식을 완성된 프로그램으로 담아내는 프로젝트 를 진행한다. 데이터 정렬 방법과 영상처리 기법, 면적 및C 언어의 기본인 조건문과 반복문을 통해 사용자의 요구 명중률 계산을 통해 알고리즘과 현장에서 활용되는 프로그에 따른 실행 문장을 만드는 방법을 배우고, 배열을 통해 래밍을 배울 수 있다. 이 과정까지 끝나면 C 언어가 실제동일한 자료형을 동시에 선언하는 방법을 익힌다. 그리고 업무에서 어떻게 활용되는지 알게 되고 프로그래밍에 대한함수를 통해 복잡한 문제를 기능별로 분리하고 단순화하는 자신감을 얻을 수 있을 것이다.방법을 배움으로써 중급 단계로 넘어가기 위한 기본을 다진다. 요약 연습문제합이 300이 넘는 a의 최솟값은 24다. 01 포인터 01 배 열a각원소의주소를알고싶을때배열명으로표현하는방법과포인터pA로표현하는방sum = 300 포 인터는C언어의가장대표적인특징중하나로,일반변수의메모리내주소번지를저장한 법을각각설명하시오.1부터 자연수를 계속 더해간다. 더한 값이 최초로 300이 넘을 때의 a 값은 24이고, 합은 300 다.포인터를사용하면변수명을통하지않고도사용하고자하는대상에직접접근할수있어 Int a[ ] = {1, 2, 3, 4, 5}; 프로그램이간결하고효율적인제어가가능하다. Int* pA = a;이다. 02 포인터선언 무한 반복 포인터는일반변수와달리*연산자를사용하여아래와같이선언한다.*연산자가하나인것종료되지 않는 반복문을 무한 반복(infinite loop)이라고 한다. 일반적으로 어떤 조건을 사용하여 조건에 맞으면 반복시키지만 경우에 따라서는 무한 반복을 사용하기도 한다. for문과 while문에서 무한 반복을 사용하는 을1차원포인터라하고,1차원포인터는일반변수의주소를값으로갖는다. 02 인수배열을함수의인자로전달할때배열명으로전달하는것과배열의시작주소를가진포인방법은 다음과 같다. int i = 3; 터로전달하는방법의차이점을설명하시오. int *ptr = &i;[for문] [while문] 03 포인터와함수 03 배열의시작주소가저장된포인터와배열명의차이점을설명하시오.for( ; ; ){ while(1){ 문장 문장 04 함 수에서필요한변수의주소값을주소연산자(&)를이용하여함수에넘겨주고,그주소값을배 열값을인자로받아서내림차순으로정렬하는함수를만드시오.함수명은Sorting()이고 ⋮ ⋮ 받는함수에서는간접연산자(*)를이용하여주소값에저장된값을읽거나저장한다. 1차원포인터와배열의크기를인자로받는다.내림차순정렬의예는다음과같다.} }while문에서는 while(1)처럼 조건식에 값 1을 주어 조건이 항상 참이라는 것을 나타낸다. 이와 같이 프로그 04 인수전달방법 [정렬 전 배열] [내림차순 정렬 후 배열]래밍에서는 값이 0인 경우 거짓이고 그 외에 값이 있는 경우는 참이다. 위의 경우는 while(2)로 해도 무한 반 10, 20, 3, 7, 4, 30, 11, 21, 8복한다. 그러나 일반적으로 while(1)이라는 표현을 더 많이 쓴다. 함수에사용될데이터를보내는방법을말한다.데이터의값을복사하여인자를값으로전달하 30, 21, 20, 11, 10, 8, 7, 4, 3 는방법과데이터의주소를전달하는방법이있다. 무한 반복에서 빠져나오려면 break문을 이용하거나 + 키를 눌러 디버깅을 강제로 종료한다. 05 포인터와배열 05 배열명은그자체로해당데이터가있는시작주소를의미하는포인터상수다.배열명은첫번int형1차원배열(a[5],b[5])의값을바꾸는SwapArray()함수를만드시오.함수의반환형은여기서 잠깐 요약06 연습문제째원소의주소를나타내므로1차원포인터의초깃값으로1차원배열명을쓸수있다. 포인터와문자열프로그래밍을 할 때 유용한 팁이나 주 void이며1차원포인터2개와배열의크기1개(총3개)를인자로받는다. 문자열도배열과마찬가지로포인터를사용하면편리하다.시스템라이브러리로제공되는문자문 자열한줄을입력받아각단어를구성하는문자를대문자로바꾸고역순으로출력하는 장이 끝날 때마다 핵심 내용을 요약 및 장이06 끝날 때마다 본문의 내용을 응용처리함수와문자열처리함수를이용하면문자열을여러가지로유용하게변경하거나그외필 프로그램을작성하시오.문자를역순으로출력하는부분은문자열을인자로받는함수인의 사항 등 참고로 알아야 할 내용을 요한처리를할수있다. ReverseCharacter()로구현하시오. 정리한다. 그 장의 세분화된 지식을 전 한 연습문제를 해결하면서 점검한다.담고 있다. 체적으로 조립하여 완성된 모습으로 07 strcmp()함수를이용하여비밀번호를확인하는프로그램을작성하시오.이때사용자에게문 풍부한 연습문제를 통해 응용력을 기자열로비밀번호를입력받고,입력받은문자열과원래비밀번호를strcmp()함수로비교한다. 볼 수 있다. 를 수 있다. Chapter 063반0복6문 C로18시3작하는 컴퓨터 프로그래밍 Chapter 10 포인터 307C컴퓨터프로그래밍01_021~228.indd 183 C컴퓨터프로그래밍021_72.249.~64.24오.in후dd123:2016 C컴퓨터프로그래밍02_229~424.indd 307 17. 4. 6. 오후 12:21 17. 4. 6. 오후 12:22

P:06

이 책의 사용 설명서 강의 보조 자료 ▶한 빛아카데미 홈페이지에서 ‘교수회원’으로 가입하신 분은 인증 후 교수용 강의 보조 자료를 제공 받을 수 있습니다. 한빛아카데미 홈페이지 상단의 [교수전용공간] 메뉴를 클릭하세요. http://www.hanbit.co.kr/academy 강의 계획표 ▶강의 계획표는 각 장에서 다루는 내용의 난이도와 중요성을 고려하여 구성했습니다. 기본 과정의 수업에서는 1~10장을 목표로 하며, 중급 내용도 다루는 수업에서는 중간고사까지 1~9장을 빨리 진행하고 중간고사 이후 10~13장을 학습합니다. 주 장/과제 주제 1 1장 과목 소개, C 언어의 시작 2 2장 기본 자료형과 형 변환 3 3장 표준 입출력 4 4장 연산자 5 5장 선택문 6 5장, 6장 선택문, 반복문 7 6장 반복문 8 중간고사 9 7장 배열 10 7장 배열 11 8장 함수 12 8장, 9장 함수, 변수 영역 13 10장 포인터 14 10장 포인터 15 10장 포인터 16 기말고사

P:07

C 프로그래머 성장 전략 C 프로그래머 이야기▶프 로그래밍을 잘하려면 어떻게 해야 하나요? 우선 프로그래밍에 대한 열정이 있어야 합니다. 끈질긴 승부 근성으로 깊이 고민하여 문제를 해결 하면 큰 희열과 성취감을 맛볼 수 있습니다. 이렇게 해야 프로그래밍에 재미가 붙고 자신감이 생 깁니다. 또한 다른 사람이 작성한 코드를 분석하고 스스로 적용해보려고 끊임없이 노력해야 합니 다. 이런 준비가 되어 있다면 프로그래머로서 자질이 충분합니다.▶C 는 C++를 학습하기 전에 반드시 학습해야 하는 과정인가요? C는 C++보다 먼저 학습해야 합니다. C를 배우지 않고 C++를 먼저 배워도 괜찮다는 의견이 있 지만, 그 경우도 C++ 강의의 대부분을 C 학습에 투자합니다. C++는 C의 기본 기능에 객체지향 개념이 추가된 것이기 때문입니다. 모든 일이 그렇듯 시간과 노력을 들여 단계를 밟아가야 진정한 전문가의 기술력을 갖출 수 있습니다.이 책은 여기까지 2단계: 초보자 탈피하기 1단계: 기초 다지기 C 프로그래밍의 기본을 갖춘다.C 프로그래밍을 위해 다음 항목을 제대로 익힌다. •C 언어의 자유로운 사용•전산 개론 •배열의 개념 이해•운영체제의 개념 및 운용 방법 •함수를 이용한 모듈 설계•각종 응용 프로그램의 사용법목표: 컴퓨터 관련 기본 지식을 바탕으로 응용 프로 목표: C의 언어적 특성을 이해하고 구조적인 프로그그램(특히 편집기) 이용에 익숙해진다. 램을 제작한다.수준: 전산 개론이나 실용 전산 과정을 이수한다. 수준: 전산 현장에서 기본은 한다. 4단계: 전문가로 거듭나기 3단계: 중급자로 거듭나기C 프로그래밍 응용 분야를 이해하고 다른 프로그래 고급 기법을 통해 좀 더 빠르고 효율적으로 실용 프밍 언어의 학습과 연계한다. 로그램을 제작할 준비를 한다.•윈도우/멀티미디어 프로그래밍 •포인터와 배열의 관계 이해•네트워크 프로그래밍 •구조체와 매크로의 이해 및 활용•.NET/J2EE 프로그래밍 •알고리즘의 이해•시스템 프로그래밍 •게임 프로그래밍•컴포넌트 프로그래밍 •모바일 프로그래밍 목표: 기본적인 자료 구조 활용법을 알고 프로젝트•웹/데이터베이스 프로그래밍 를 수행한다. 수준: 현장에서 제 몫을 한다.목표: 다양한 환경(언어와 플랫폼)의 실전 연습으로고급 기술력을 습득한다.수준: 하고 싶은 일을 선택한다.

P:08

01 C 언어 소개 1 C 언어의 기원과 역사 C 언어는 1972년 AT&T 사의 벨연구소Bell Labs에서 유닉스UNIX 개발용 고급 언어로 개발되었 다. 유닉스 개발용 고급 언어로 처음에는 CPLCombined Programming Language에서 발전한 BCPLBasic CPL이 고려되었으나 이 언어의 부족한 점을 보강하기 위해 벨연구소의 켄 톰슨Ken Thompson이 B 언어를 개발했다. 이후 B 언어는 데니스 리치Dennis Ritchie에 의해 C 언어로 발전했으며, C 언어 는 결국 유닉스의 70% 이상을 담당하는 고급 언어가 되었다. C 언어는 1970~1980년대 유 닉스의 급속한 확산과 더불어 그 가치를 인정받아 현재도 많은 개발 환경에서 사용되고 있으 며, 오늘날 가장 기본적인 프로그래밍 언어로 알려져 있다. 2 C 언어의 특징 C 언어는 유닉스 운영체제operating system를 개발하기 위해 사용되었는데, 기억장치를 비롯한 하 드웨어를 직접 제어하기 때문에 고급 언어와 저급 언어의 특징을 모두 가지고 있다. C 언어의 중요한 몇 가지 특징은 다음과 같다. 시스템 프로그래밍 언어 C 언어는 운영체제, 컴파일러, 편집기, 디버거 등 시스템 프로그램을 개발하는 도구다. 함수 언어 C 프로그램은 하나 이상의 함수(모듈, 프러시저라고도 함) 집합으로 구성된다. 작성된 함수는 분할해서 컴파일할 수 있으므로 쉽게 재사용할 수 있다. 이식성이 강한 언어 C 언어는 컴퓨터의 구조에 영향을 받지 않고 호환성을 유지한다. 이는 모든 기계에서 동일하 게 작동하는 다양한 표준 라이브러리가 제공되기 때문이다.022 C로 시작하는 컴퓨터 프로그래밍

풍부한 자료형 지원C 언어는 자료형을 표현하는 데 숫자, 문자뿐만 아니라 \t, \a,

,

과 같은 특수문자를 지원한다. 또한 포인터, 배열, 구조체, 공용체, 사용자 정의 등 다양한 형태의 자료형도 제공한다. 다양한 제어문 지원C 언어는 프로그램의 흐름을 제어하기 위해 if문, for문, while문, do-while문, switch문과같은 다양한 제어문을 지원한다. 표준 라이브러리 함수 지원C 언어는 문자열에 대한 조작과 입출력에 대한 명령이 없고 대신에 표준 라이브러리 함수를제공하여 다양한 입출력이 가능하다.3 프로그램 실행 과정프로그램 실행 과정을 알아보기 전에 먼저 컴퓨터 시스템의 구조를 간단히 살펴보자.3.1 컴퓨터의 구성컴퓨터는 [그림 1-1]과 같이 하드웨어와 소프트웨어로 구성된다.(a) 하드웨어 (b) 소프트웨어그림 1-1 컴퓨터의 구성 요소 Chapter 01 C 언어의 시작 023

P:10

하드웨어 전자회로와 물리적인 장치로 이루어진 것을 하드웨어라고 한다. 하드웨어의 5대 구성 요소는 입력장치, 중앙처리장치, 출력장치, 주기억장치, 보조기억장치다. •입력장치: 문자나 기호 같은 데이터를 컴퓨터가 이해하도록 전기 신호로 변환한다. •중 앙처리장치: 컴퓨터의 두뇌에 해당하며 컴퓨터의 구성 요소를 제어하거나 연산을 수행한다. •출 력장치: 중앙처리장치가 처리한 결과를 출력한다. •주기억장치: 흔히 램RAM, Random Access Memory이라고 하며 컴퓨터 내에서 실행 중인 명령어와 데이 터를 저장한다. •보 조기억장치: 주기억장치를 보조하는 장치로 데이터를 영구적으로 보존할 때 사용하며 하드디 스크, 플로피디스크, CD-ROM 등이 있다. 소프트웨어 하드웨어에 명령을 내려 구동할 수 있도록 만들어진 프로그램을 소프트웨어라고 하는데, 명 령어들의 집합이라고 이해하면 된다. 일반적으로 시스템 소프트웨어와 응용 소프트웨어로 나 뉜다. •시 스템 소프트웨어: 컴퓨터를 효율적으로 운영하고 제어하기 위한 프로그램이다. 도스DOS나 윈 도우Windows 같은 운영체제, 파일을 압축하는 유틸리티와 파일을 정렬하는 유틸리티 등이 이에 속한다. •응 용 소프트웨어: 특정 분야의 업무를 처리하기 위한 프로그램이다. 문서 편집을 위한 한글이나 워드, 그림 편집을 위한 포토샵, 스프레드시트 역할을 하는 엑셀 등 특정 분야에 관련된 프로그램 이 이에 속한다. C 언어나 다른 프로그래밍 언어로 프로그래밍한다는 것은 결국 응용 소프트웨어를 만드는 과 정이다. 사용자가 원하는 기능을 보여주는 프로그램을 만들어야 하기 때문이다. 3.2 프로그램 실행 절차 프로그래밍은 컴퓨터의 하드웨어를 구동하는 명령어를 만드는 작업이다. 작성된 프로그램은 일반적으로 다음과 같은 과정을 거쳐 실행된다.024 C로 시작하는 컴퓨터 프로그래밍

P:11

컴파일러 링커원시 파일 작성 목적 파일 생성 실행 파일 생성 (test.c) (test.obj) (test.exe)프로그램 편집기를 컴파일을 통해 링킹을 통해 생성된이용하여 작성한다. 생성된 파일이다. 실행 파일이다. (확장자 .obj) (확장자 .exe)그림 1-2 프로그램 실행 절차원시 파일은 사용자가 편집기를 이용하여 만든 파일이다. 편집기는 텍스트 문서, 프로그램,데이터 파일 등을 작성할 때 사용하는 기본적인 프로그램으로 윈도우에서 제공하는 메모장이나 워드패드를 예로 들 수 있다. 사용자는 편집기를 이용하여 원하는 내용의 프로그램을 원시파일 형태로 작성한다.이렇게 작성한 원시 파일은 사람만 알아볼 수 있는 형식의 문서다. 컴퓨터는 0과 1의 기계어만 읽을 수 있기 때문에 원시 파일을 그대로 사용할 수 없다. 따라서 사용자가 만든 원시 파일을 기계어로 바꿔야 하는데 이 역할을 하는 것이 컴파일러다. 컴파일러는 고급 언어로 작성된프로그램을 기계어로 바꿔준다. 컴파일러를 통해 원시 파일이 목적 파일로 바뀌는데, 이때 목적 파일의 확장자는 .obj다(obj는 영어 object의 약자다).사용자가 프로그래밍할 때는 프로그램에서 사용할 모든 기능을 직접 만들지 않는다. 컴퓨터시스템 자체에 이미 프로그램에서 자주 사용하는 기능을 미리 만들어놓은 시스템 라이브러리가 있기 때문이다. 사용자는 자신이 직접 작성한 소스코드와 시스템 라이브러리를 적절하게사용하여 프로그램을 작성한다. 이러한 시스템 라이브러리를 사용하려면 해당 시스템 라이브러리가 들어 있는 파일이 필요하다.또한 시스템에서 만든 파일이 아니더라도 다른 프로그래머가 만든 파일을 사용해야 할 경우도 있는데, 이럴 때도 파일을 연결해야 한다. 이러한 작업을 링킹linking이라고 하며, 이러한 역할을 하는 것을 링커linker라고 한다. 링커는 목적 파일 여러 개를 연결하여 실행 파일 하나를만든다. 그리고 최종적으로 만들어진 실행 파일을 실행하면 프로그램으로 원하는 일을 할 수있다. 결론적으로 프로그래밍을 하는 데에는 편집기, 컴파일러, 링커 등이 필요하다.4 C 프로그램의 구조C 프로그램은 1개 이상의 함수로 구성되는데, main(  ) 함수는 반드시 존재해야 하며 그 외의 Chapter 01 C 언어의 시작 025

P:12

함수는 사용자가 임의로 작성해서 사용할 수 있다. 다음은 간단한 C 프로그램의 구조를 나타낸 예다. C 프로그램의 구조를 문장 단위로 살펴보자./* 주석 내용 */ ❶// 전처리기#include <stdio.h> ❷int main(void) ❸{ ❹ // 일반 명령문 ❺⋮ return 0; // main() 함수의 반환 ❻}❶ 주석프로그램의 실행과는 관계가 없으며 단지 프로그램의 내용을 설명하기 위해 사용한다. 프로그래머의 이해를 도우려고 작성하는 것이므로 유능한 프로그래머가 되려면 주석을 잘 사용하는 습관을 들여야 한다. 컴파일러는 주석을 만나면 기계어로 바꾸지 않고 그냥 넘어간다. 주석은 [표 1-1]과 같이 두 가지 형식으로 사용한다.표 1-1 주석문의 종류구분 예여러 줄 주석 /* 이렇게 사용하면 주석을 여러 줄 만들 수 있다. */한 줄 주석 // 주석 한 줄은 이렇게 사용한다.간단한 내용은 한 줄 주석을 사용하고 여러 줄에 걸쳐 자세한 내용을 작성할 때는 여러 줄 주석을 사용한다. C 언어에서는 원래 여러 줄 주석만 사용할 수 있었다. 그러나 여러 줄 주석은시작과 끝에 각각 /*와 */를 붙여야 하므로 번거롭게 여겨져 한 줄 주석도 사용할 수 있도록개선되었다. 주석을 작성하는 것은 프로그래밍을 하는 것만큼 중요하다. 프로그래머 자신이작성한 프로그램도 오랜 시간이 지나면 왜 그렇게 작성했는지 잊어버리는 경우가 있는데, 이때 이해를 돕는 것이 바로 주석이다.026 C로 시작하는 컴퓨터 프로그래밍

P:13

❷ 전처리기 지시자전처리기preprocessor는 말 그대로 미리 처리한다는 의미다. 전처리기 지시자는 항상 #로 시작하고 한 줄에 지시자 1개만 쓸 수 있다. 이 부분은 헤더파일header file을 포함하거나 상수 및 간단한 매크로를 정의할 때 사용한다. 일반 문장과 달리 문장의 마지막에 세미콜론(;)을 넣지 않는다(C 프로그램의 일반적인 문장은 마지막에 세미콜론을 반드시 넣는다).소스에서 #include <stdio.h>는 헤더파일인 stdio.h를 프로그램에 포함하라는 의미다. 헤더파일에는 C 프로그램에서 기본으로 제공하는 표준 라이브러리 함수가 정의되어 있는데, 그함수들을 사용자가 만든 프로그램에서 사용하기 위해 전처리기 지시자를 사용한다.예를 들어 printf(  ) 함수는 출력하고 싶은 내용을 도스 창에 출력해주는 표준 라이브러리함수로 stdio.h 파일에 정의되어 있다. 따라서 stdio.h 파일을 포함해야 그 안에 정의된printf(  ) 함수를 사용할 수 있다. 컴파일러는 프로그래머가 작성한 프로그램 소스를 컴파일하기 전에 전처리기를 찾아 전처리기의 명령을 먼저 실행한다.❸ main(void) 함수프로그램의 시작을 알리는 함수로 C 프로그램은 main(  ) 함수 1개와 하위 함수로 구성된다.또한 하위 함수 없이 main(  ) 함수 1개만도 사용 가능하다. 즉 C 프로그램은 main(  ) 함수에서부터 시작한다.❹ 중괄호main(  ) 함수 다음에 있는 중괄호({  })는 프로그램을 구성하는 명령문들의 블록을 의미하는것으로 main(  ) 함수의 시작과 끝을 나타낸다.❺ 일반 명령문프로그램에서 실행할 명령문을 실행 순서대로 기술하는 부분으로 실제로 프로그램이 실행할기능을 작성한다. 프로그램에서 문장의 실행 순서는 위에서 아래, 왼쪽에서 오른쪽이 기본이지만 경우에 따라서는 순서를 바꿀 수도 있다.❻ 함수의 반환return문으로 함수의 실행 결과를 반환한다. 이는 8장의 함수 부분에서 자세히 설명할 것이다. return문에 대해 다루기 전에는 위와 같은 형식으로 사용된다는 정도만 알고 넘어간다. Chapter 01 C 언어의 시작 027

P:14

04 형 변환 C 언어에서 변수 2개로 연산을 수행할 때 두 변수의 자료형이 다르면 하나의 자료형을 다른 자료형으로 변환하여 자료형을 같게 만든 후 다음 작업을 수행해야 한다. 예를 들어 정수형 변수와 실수형 변수를 더할 경우 형식이 다른 두 자료형을 통일할 필요가 있다. 이와 같이 자 료형을 바꾸는 것을 형 변환이라고 한다. 형 변환 방법에는 컴파일러가 자동으로 해주는 묵시 적 형 변환과 사용자가 강제로 지정하는 명시적 형 변환이 있다. 묵시적 형 변환은 다음과 같 이 데이터의 값을 잃지 않는 방향으로 이루어진다. char → short → int → unsigned → long → float → double 다음은 묵시적 형 변환의 예다. a가 정수형이고 b가 실수형이므로 데이터를 손실하지 않으면 서 연산하기 위해 a의 자료형이 자동적으로 float형으로 바뀐다. int a = 10; float b = 20.05, c; c = a + b; // a = 10.00이 되는데, 이는 정수형이 실수형으로 자동 변환된 것이다. 사용자가 강제로 형 변환을 시키는 명시적 형 변환의 경우, 캐스팅 연산자를 사용하여 형 변 환을 한다. 명시적으로 자료형을 변환하는 방법은 연산식 앞에 (  ) 를 붙이고 (  )  안에는 변환하 는 자료형을 넣는다. 다음은 float형의 변수 y를 int형으로 강제 변환한 예다. 캐 스팅은 변수형을 바꿀 때 사용하는 방법 또는 형 변환 자체를 의미한다. 또한 다음 예에서 형 변환을 시키는 (int)를 캐스팅 연산자라고 한다. float x; float y = 14.66; x = (int) y / 2; // y  =  14가 되는데, 이는 실수형이 정수형으로 강제 변환된 것이다.064 C로 시작하는 컴퓨터 프로그래밍

P:15

이 경우 실수형 y를 int형으로 바꾸지 않으면 x에는 7.33이 저장되지만, y를 정수형으로 캐스팅했기 때문에 y 값이 먼저 14로 바뀌어 x에 7.00이 저장된다.예제 2-6 묵시적 형 변환과 명시적 형 변환 프로그램 2-6.c 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int a = 10, b = 20, c; 06 float d = 5.6, e = 8.4, f; 07 08 c = d + e; 09 printf(\"c = d + e의 연산결과는 %.2f이다.

\", (float)c); 10 11 f = d + e; 12 printf(\"f = d + e의 연산결과는 %.2f이다.

\", f); 13 14 f = d + (int)e; 15 printf(\"f = d + (int)e의 연산결과는 %.2f이다.

\", f); 16 17 return 0; 18 }c = d + e의 연산결과는 14.00이다.f = d + e의 연산결과는 14.00이다.f = d + (int)e의 연산결과는 13.60이다.Press any key to continue Chapter 02 기본 자료형과 형 변환 065

P:16

요약 01 키워드 프로그램 언어에서 고유한 의미를 지닌 예약된 단어를 말하며 예약어라고도 한다. 02 식별자 키워드 외에 사용자가 필요에 따라 이름을 만들어 사용하는 단어로 작성 규칙은 다음과 같다. •영 문 대문자와 소문자(A~Z, a~z), 숫자(0~9), 밑줄( _   )을 포함한 63개 문자로만 구성할 수 있다. •첫 글자로 숫자를 사용할 수 없다. •대 문자와 소문자를 구별하며, 키워드는 사용할 수 없다. 03 상수 프로그램이 실행되어 끝날 때까지 값이 변하지 않는 자료를 의미하며 어떤 숫자, 하나의 문자 또는 문자열로 표현한다. 상숫값이 프로그램 실행 도중에 변하면 오류가 발생한다. 04 변수 프로그램에서 임시로 자료 값을 저장하는 장소다. 변수를 만들면 변수에 값을 저장할 수 있고 이 값이 계속 바뀌게 된다. 변수를 만들려면 먼저 변수를 선언해야 한다. 05 자료형 C 언어에는 정수형, 실수형, 문자형 등의 자료형과 프로그래머가 정의하여 사용하는 사용자 정 의 자료형이 있다. 06 여러 가지 자료형 int, long, short, unsigned는 정수형 변수를 선언할 때 사용되고, float, double은 실수형 변 수를 선언할 때 사용되며, char는 문자형 변수를 선언할 때 사용한다. 07 형 변환 다른 자료형끼리 연산을 할 때 하나의 자료형을 변환하여 자료형을 같게 만드는 것이다.066 C로 시작하는 컴퓨터 프로그래밍

P:17

연습문제01 식별자 작성 규칙에 대해 설명하시오.02 C 언어에서 다루는 특수문자 중 다음은 무엇을 의미하는지 설명하시오. ①

② \a ③ \f ④ \; \”03 정수형 변수 number를 선언한 후 초깃값으로 10을 할당하고, 정수형 상수 count를 선언한 후 초깃값으로 5를 할당하는 코드를 작성하시오.04 아스키코드가 무엇인지 설명하시오. 아스키코드를 정보화하는 데 필요한 비트 수는 얼마이며, 어떤 자료형으로 표현이 가능한지도 설명하시오.05 unsigned char 자료형이 표현할 수 있는 값의 범위를 설명하시오.06 형 변환이란 무엇이며, 묵시적 형 변환과 명시적 형 변환의 차이가 무엇인지 설명하시오.07 printf(  ) 함수의 변환기호를 사용하여 다음 내용을 출력하는 코드를 작성하시오. ① 소문자 f의 ASCII 값은 102이다. ② ASCII 76은 L이다. Chapter 02 기본 자료형과 형 변환 067

IT CookBook, C로 시작하는 컴퓨터 프로그래밍 개정3판 (2024)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Rueben Jacobs

Last Updated:

Views: 6524

Rating: 4.7 / 5 (57 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Rueben Jacobs

Birthday: 1999-03-14

Address: 951 Caterina Walk, Schambergerside, CA 67667-0896

Phone: +6881806848632

Job: Internal Education Planner

Hobby: Candle making, Cabaret, Poi, Gambling, Rock climbing, Wood carving, Computer programming

Introduction: My name is Rueben Jacobs, I am a cooperative, beautiful, kind, comfortable, glamorous, open, magnificent person who loves writing and wants to share my knowledge and understanding with you.