60
프로그래밍 소개 학습목표 프로그램이란 무엇인지를 이해한다. 프로그래밍 언어가 왜 필요한지를 이해한다. 알고리즘을 소개한다. 프로그램이 개발되는 과정을 이해한다. CHAPTER 0 1 CONTENTS 1.1 프로그래밍의 소개 1.2 프로그래밍 언어의 종류 1.3 C언어 1.4 알고리즘 1.5 프로그램 개발 과정 1.6 비주얼 C++를 이용한 프로그램 작성 C PROGRAMMING

C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

프로그래밍소개

학 습 목 표

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

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

●알고리즘을 소개한다.

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

CH

AP

TE

R01

C O N T E N T S

1.1 프로그래밍의 소개

1.2 프로그래밍 언어의 종류

1.3 C언어

1.4 알고리즘

1.5 프로그램 개발 과정

1.6 비주얼 C++를 이용한 프로그램 작성

CPROGRAMMING

Page 2: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■컴퓨터는범용적인기계

컴퓨터가 가지고 있는 최 의 강점은 무엇일까? 먼저 컴퓨터와 가전 제품을 비교하

여보자. 가전제품은미리정해진한가지작업밖에못하는반면, 컴퓨터는프로그램

만바꾸어주면여러가지작업을할수있다. 이처럼컴퓨터의가장큰장점은범용적

인 기계라는 점이다. 예를 들어, 우리는 컴퓨터에서 문서 편집 프로그램을 실행시켜

문서를편집하기도하고동 상재생프로그램을실행시켜 화를보기도한다.

범용적인기계를만드는것은오랫동안인류의꿈이었다. 19세기에찰스배비지는

수천개의기어, 바퀴, 축, 레버등을사용하여어떤계산이든지할수있는해석기관

을 만들려고 하 다. 그러나 그 당시 기술로는 실현이 불가능하 다. 1940년 에 와

서야 진공관으로 구현한 전자식 스위치를 이용하여 전자 계산기를 만들 수 있었다.

이후로우리가알다시피컴퓨터는우리생활에불가결한존재가되었다.

프로그래밍소개CHAPTER01

C PROGRAMMING

1.1 프로그래밍의 소개

[그림 1-1]

프로그램만 바꾸어주면

컴퓨터는 다양한 작업을

할 수 있다.

Page 3: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■컴퓨터의구성요소

컴퓨터 시스템은 기본적으로 하드웨어와 소프트웨어로 구분된다. 하드웨어

(hardware)는 컴퓨터에설치되어 있는 모든 물리적인 장치를의미한다. 소프트웨어

(software)는 컴퓨터를 동작시키는 데 사용되는 다양한 종류의 프로그램을 부르는

용어이다.

컴퓨터 개발자들은 컴퓨터를 범용적인 장치로 만들기 위해서 하드웨어와 소프트웨

어를분리하 다. 1940년 에만들어진최초의컴퓨터인에니악(ENIAC)에서는하드

웨어와 소프트웨어가 분리되지 않았다. 에니악은 전선의 연결에 의하여 프로그램되

었다. 따라서 프로그램을 변경하려면 모든 전선의 연결을 바꾸어야 했다. 1950년

에 폰노이만이 프로그램을 컴퓨터 메모리에 저장하는 아이디어를 제시하 다. 그것

은획기적인아이디어 고이후로모든컴퓨터가폰노이만의방식을따르게되었다.

동일한 하드웨어상에서 소프트웨어를 바꾸어가면서 다양한 작업을 할 수 있는 것은

컴퓨터가가진가장강력한장점이다.

■프로그램안에들어있는것

프로그램 안에는 무엇이 들어 있을까? 프로그램 안에는 작업의 내용이 들어 있다.

즉, 작업의지시서가들어있다고생각할수있다. 컴퓨터에게무엇을어떻게시킬지

를 기록해놓은 문서가 프로그램(program)이다. 프로그램의 각 문장은 컴퓨터에게

작업을지시하는명령(instruction)으로되어있다. 명령은“숫자를더하시오”, “데

이터를저장하시오”와같은형식으로되어있다. 만약사용자에게두수를받아서두

수의 합을 출력하는 프로그램이라면 [그림 1-4]와 같은 내용이 프로그램 안에 들어

있을것이다. 프로그램을만드는작업을프로그래밍(programming)이라고하며프로

제1장 프로그래밍 소개 17

[그림 1-2]

하드웨어와 소프트웨어

[그림 1-3]

ENIAC의 프로그래밍 장면

Page 4: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

그램을만드는사람을프로그래머(programmer)라고한다.

■컴퓨터가이해하는언어

프로그램은 컴퓨터에게 해야 할 작업의 내용을 알려주는 문서이다. 그렇다면 어떤

언어를 사용해야만 컴퓨터가 작업 지시를 이해할 수 있을까? 컴퓨터는 사실 프로그

래머가 시키는 로만 하는 단순한 기계이니 사람의 언어를 이해할 것 같지는 않다.

즉, 한국어나 어등으로작업을기술한다면컴퓨터는전혀이해할수없을것이다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0118

[그림 1-4]

프로그램은

작업 지시서와 같다.

역사상 최초의 프로그래머는 누구일까? 프로그램을 최초로 만

든 사람은 여자로서 에이다 러브레이스(Ada Lovelace)이다.

에이다는 문호 바이런의 친딸로서 배비지의 해석기관에 매료

되어 해석기관을 위한 프로그램을 개발하 다. 에이다는 현 적

인 컴퓨터가 나오기 100년 전에 이미 서브루틴(subroutine),

루프(loop), 점프(jump) 등의 핵심적인 컴퓨터 프로그래밍 기

본 원리를 고안하 다. 서브루틴은 같은 공식을 여러 번 사용하

기 위해서, 루프는 같은 계산을 반복하기 위해서, 점프는 중간의

필요 없는 과정을 뛰어넘기 위해서 고안하 다. 여기에 추가로

어떤 조건이 일치할 경우, 다음 공식으로 넘어가는 if 구문을

생각해냈다. 이러한 것들은 배비지의 해석기관이 단순히 계산만

하는 기계가 아니라 주어진 조건에 따라 결정을 내리고 논리를

수행할 수 있다는 것을 의미하 다. 미국 국방성에서는 에이다

러브레이스를 기념하기 위하여 자신들의 언어를 에이다(ADA)

라고 이름지었다. 세계 최초의 프로그래머는 여자 던 것이다.

최초의프로그래머

Page 5: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

사실 컴퓨터가 알아듣는 언어는 한 가지뿐이다. 즉, 0과 1로 구성되어 있는

"001101110001010..."과 같은 이진수이다. 컴퓨터는 이진수의 개념 위에 만들어진

기계이다. 컴퓨터는 모든 것을 0과 1로 표현하고 0과 1에 의하여 스위치 회로들이

ON/OFF 상태로 변경되면서 작업을 한다. 즉, 0이면 회로를 OFF시키고 1이면 회로를

ON으로만든다. 이러한이진수형태의언어를기계어(machine language)라고한다.

이러한기계어는컴퓨터가가장좋아하는언어이다. 실제로초기의컴퓨터에서는이

러한기계어를사용하여프로그램을했었다.

그러나기계어는인간한테는상당히불편한언어이기때문에좀더편리한언어가

필요했다. 따라서 인간이 더 편리하고 알기 쉽게 지시를 내리기 위하여 프로그래밍

언어들이 만들어졌다. 이들 프로그래밍 언어들은 기계어와 인간이 사용하는 자연어

중간쯤에 위치한다. 인간이 프로그래밍 언어를 배워서 프로그램을 작성하면 컴파일

러라고 하는 통역을 담당하는 소프트웨어가 프로그램을 기계어로 바꾸어준다. 이것

은 어를말하는사람과한국어를말하는사람이중간에통역을두고이야기하는것

과비슷하다.

제1장 프로그래밍 소개 19

[그림 1-5]

컴퓨터는 한 로 된 작업 지

시서는 이해하지 못하는 반

면, 기계어로 된 작업 지시서

는 이해할 수 있다.

Page 6: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0120

[그림 1-6]

컴파일러는 프로그램을

기계어로 변환한다.

2진수의 각 자릿수는 0 아니면 1이다. 0은 스위치가 열린 상태(OFF)로 표현할 수 있고

1은스위치가닫힌상태(ON)로표현할수있다. 따라서여러개의스위치를늘어놓으면이진수를

나타낼수있다. 이진수는컴퓨터가받아들이기가아주쉽다. 컴퓨터에서는내부적으로는모든것

을 이진수 형태로 표현하여 처리한다.

이진법은 숫자를 표현하는 데도 사용되지만 컴퓨터 안에서 덧셈과 같은 연산을 수행하는 회로를

구현하는 데도 이용된다. 0과 1만을 이용하여 논리 처리를 하는 수학의 분야를 불 수(boolean

algebra)라고 한다. 이 불 수를 이용하면 몇 개의 스위치를 모아서 논리 회로(logic

circuit)를 만들어 각종 연산을 빠르게 하는 회로를 만들 수 있다. 컴퓨터에서 스위치는 트랜지

스터로 구현된다. 트랜지스터는 소형 전자 스위치로 생각하면 된다.

컴퓨터는왜십진수가아닌이진수를사용하는가?

Page 7: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

현재 많이 사용되는 프로그래밍 언어에는 FORTRAN, PASCAL, COBOL, C, C++, C#,

Object-C, Java 등이 있다. 프로그래밍 언어는 하나만 있으면 될 거 같은데 왜 그렇

게 많은 종류가 있을까? 그 이유는 각 언어마다 특징이 다르기 때문이다. 시장에 나

가보면 TV도여러회사에서나온제품들이경쟁하고있는것처럼프로그래밍언어도

다양한 용도에 맞는 여러 가지 언어들이 만들어지고 있는 것이다. 어떤 프로그래밍

언어를사용하더라도컴퓨터에일을시킬수있지만선택기준은주어진상황에서어

떤 프로그래밍 언어가 가장 작업을 효과적으로 간단하게 할 수 있느냐이다. <표 1-

1>에각언어들을간략하게기술하 다.

제1장 프로그래밍 소개 21

1.2 프로그래밍 언어의 종류

<표 1-1>

프로그래밍 언어

언어 특징 예제

FORTRAN

FORTRAN은 1950년 에 가장 먼저 만

들어진 언어로 수치 계산과 과학 기술

계산에적합하다.

PROGRAM HELLO

PRINT '(A)', 'Hello, World'

STOP

END

COBOL

COBOL은 1959년 만들어진 비즈니스

사무처리언어이다. 이언어는구어체

문장 형태로 기술할 수 있도록 설계되

었다.

IDENTIFICATION DIVISION.

PROGRAM-ID. HELLO-WORLD.

PROCEDURE DIVISION.

DISPLAY 'Hello, World'.

STOP RUN.

PASCAL

PASCAL은 1970년 에 니클라우스 비

르트에 의하여 개발된 절차적인 프로

그래밍 언어이다. 파스칼은 교육용 언

어로알려져있다.

program Hello(output);

begin

writeln('Hello, World')

end.

C

C언어는 1970년 초반, UNIX 운 체

제를 위하여 AT&T의 벨 연구소에서 일

하던 데니스 리치에 의하여 만들어졌

다.

int main(void)

{

printf("Hello, World\n");

return 0;

}

C++

C++는 1983년 벨 연구소의 스트로스

트럽에 의하여 개발된 언어로, C언어

에 클래스 개념을 비롯하여 여러 가지

객체지향적인 특징들을 추가한 언어

이다.

int main()

{

cout << "Hello, World" << endl;

return 0;

}

Java

Java는 1995년 선 마이크로시스템의

제임스 고슬링에 의하여 개발된 객체

지향 언어이다. 자바는 인터넷 웹페이

지상에서실행이가능하다.

public class Hello {

public static void main(String[] args)

{

System.out.println("Hello, World");

}

}

Page 8: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

C언어는 1970년 초반, UNIX 운 체제를 위하여 AT&T의 벨 연구소에서 일하던

Dennis Richie에의하여만들어졌다. 처음만들어진후, 벨연구소안에서만사용되

던 C언어는 차츰 외부에서도 인기를 얻기 시작하더니 현재는 가장 널리 사용되는 언

어중의하나가되었다. Dennis Ritchie는이공로로 1983년에 Ken Thompson과함께

컴퓨터분야의노벨상이라고불리는 Turing 상을수상하 다.

C언어의특징중에서중요한것들은다음과같다.

� C언어는간결한언어이다.

C언어에는꼭필요한기능만이들어있고, C언어의모든표기법은매우간결하다. 이

점은여러분들이학습을진행하면느낄수있을것이다. 간결성은 C언어의핵심적인

특징이다.

� C언어는효율적인언어이다.

C언어가효율적이라는의미는 C로작성된프로그램이크기가작으며실행속도가빠

르고메모리를효과적으로사용한다는것을말한다. C언어는거의어셈블리언어수

준의효율성을자랑한다. 이점은상업용프로그램을작성할때큰장점이된다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0122

1. __________은 과학 기술 계산에 주로 사용된다.

2. __________은 컴퓨터 교육에 사용할 목적으로 제작되었다.

3. __________은 C에 객체 지향 개념을 추가한 언어로서 C의 상위 집합이다.

4. __________은 기업의 사무 처리에 적합하다.

5. __________은 인터넷상에서 실행이 용이하도록 만들어진 언어이다.

6. C언어를 기초로 만들어진 표적인 2가지 언어는 __________과 __________이다.

중간점검

1.3 C언어

[그림 1-7]

Ken Thomson과

Dennis Ritchie가

클린턴 통령으로부터

National Medal of

Technology 상을 받는 장면

Page 9: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

� C언어는저수준의프로그래밍도가능하고고수준의프로그래밍도가능하다.

C언어는운 체제를만들었던언어이니만큼, 어셈블리언어만큼의구체적인하드웨

어제어가가능하다. 실제로 TV, 휴 폰, 세탁기등의여러가지전자기기안에들어

가는 임베디드(내장) 프로그램은 부분 C언어로 개발되고 있다. 예전에는 어셈블

리 언어로 작업을 하 지만 어셈블리 언어는 사용하는 CPU에 따라서 프로그램을 변

경시켜야 되는 치명적인 약점이 있다. C언어로 임베디드 프로그램을 작성하게 되면

유지 관리 및 다른 기기로의 이식도 쉬워진다. C언어는 포인터, 비트 단위의 조작으

로여러가지하드웨어장비를섬세하게제어할수있다.

또한 C언어는 모듈 단위의 프로그램 작성을 지원하고 분할 컴파일도 가능하기 때

문에 고수준에서의 프로그램 작성도 가능하다. 하향식(top-down) 설계, 구조화 프

로그래밍, 모듈화설계등의소프트웨어공학의다양한기법들을적용할수있다.

� C언어는이식성이뛰어나다.

이식성(portability)이란 한 번 작성된 프로그램을다른 CPU를 가진 하드웨어로쉽

게이식할수있다는뜻이다. 많은종류의 CPU에 하여 C 컴파일러가개발되어있기

때문에 C프로그램은상 적으로이식성이좋다. 즉, PC에서개발된프로그램도컴파

일만다시하면슈퍼컴퓨터에서수행시킬수있다.

� C언어는배우기가어렵다.

C언어는 초보자가 배우기가 어렵다고 하는데, 교육을 위하여 일부러 쉽게 만들어놓

은 언어가 아니라 지금도 산업 현장에서 사용되는 언어이므로 당연하다 할 것이다.

또한항상모든자유에는책임이따르듯이하드웨어를제어하기위하여꼭필요한요

소인포인터등을잘못사용하는경우가많다.

제1장 프로그래밍 소개 23

[그림 1-8]

C언어의 특징

Page 10: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

이제 우리는 프로그램이 컴퓨터 안에서 무슨 역할을 하는지도 알았고, 프로그래밍

언어를 사용하면 더욱 쉽게 프로그램을 작성할 수 있다는 것도 알았다. 그렇다면 프

로그래밍언어의규칙만학습하면프로그램을작성할수있는것일까? 다시말해, 프

로그래밍언어를어떻게사용하는지만배우면프로그램을작성할수있는것일까?

요리로예를들어보자. 자, 요리를만들기위해서오븐을준비하 다. 그리고오븐

을 어떻게 사용하는지도 배웠다. 그렇다면 음식 재료만 있으면 누구나 요리를 할 수

있는것일까?

한가지매우중요한것이빠져있다. 오븐의사용법을안다고해서누구나요리를만

들 수 있는 것은 아니다. “어떻게 요리를 만들 것인가?”가 빠져 있다. 즉, 요리를 만

드는 절차가 빠져 있는 것이다. 컴퓨터도 마찬가지이다. 컴퓨터에 명령을 내리는 프

로그래밍 언어만 안다고 해서 프로그램을 작성할 수 있는 것은 아니다. 주어진 문제

를어떤절차에따라서해결할것인가가빠져있으면프로그램을작성할수없다. 문

제를 해결하는 절차(또는 방법)가 바로 알고리즘(algorithm)이다. 이 책에서는 물

론어려운알고리즘은등장하지않는다. 하지만아무리간단한프로그램이라도어떤

절차에따라서주어진문제를해결할것인지를생각해보아야한다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0124

1. 이번 절에서 새롭게 등장한 용어들의 의미를 인터넷을 이용하여 찾아보자.

‘어셈블리 언어’, ‘모듈’, ‘임베디드 프로그램’, ‘소프트웨어 공학’

중간점검

1.4 알고리즘

[그림 1-9]

오븐(컴퓨터)이 준비되고

오븐에게 명령을 내리는 방법

(프로그래밍 언어)을 안다고

하더라도 요리를 하는 절차

(알고리즘)를 모르면 요리(프

로그램)를 만들 수 없다.

Page 11: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■알고리즘이란?

어떤 문제가 주어져 있고 이것을 컴퓨터로 해결하려고 한다

고가정하자. 제일먼저해야할일은문제를해결할수있는

절차를 고안하는 것이다. 예를 들면, 전화번호부에서 특정

한 사람(박철수라고 가정하자)의 전화번호를 찾는 문제를

생각하여보자. 한가지방법은전화번호부의첫페이지부터

시작하여 한 장씩 넘기면서 박철수를 찾는 것이다. 이 방법

은 엄청난 시간이 걸리는 방법으로 보통 이런 식으로 찾는

사람은 거의 없다. 또 하나의 방법은 전화번호부의 이름들

이정렬되어있음을이용하는방법이다. 전화번호부의중간

정도를 펼쳐서 거기에 있는 이름들과 박철수를 비교하여 앞

부분으로 가든지 뒷부분으로 간다. 다시 찾아야 할 범위의

중간 부분에 있는 이름과 박철수를 비교한다. 이러한 과정을 박철수란 이름을 찾을

때까지 되풀이한다. 이러한 방법은 프로그래밍 언어와는 무관하다. 즉, C언어를 사

용하건 Java를사용하건사용되는방법은동일하다.

이렇게문제를풀기위하여컴퓨터가수행하여야할단계적인절차를기술한것을

알고리즘(algorithm)이라고 한다. 알고리즘을 프로그래밍 언어로 구현하면 프로그

램이 된다. 알고리즘은 흔히 요리법(recipe)에 비유된다. 우리는 요리를 요리법에

따라만들어본적이있을것이다. 예를들어, 빵을만드는알고리즘은다음과같다.

빵을만들때도순서가잘못되면빵이만들어지지않는다. 빵을만드는방법은 어,

독일어, 프랑스어로도정확하게표현할수있듯이알고리즘은어떤프로그래밍언어

로도동일하게표현할수있다. 같은빵을만드는방법도여러가지가있을수있듯이

하나의문제에 하여알고리즘은여러개가있을수있다. 이경우프로그래머는가

장효율적인알고리즘을선택하여구현하여야할것이다.

① 빈 그릇을 준비한다.

② 이스트를 가루, 우유에 넣고 저어준다.

③ 버터, 설탕, 계란을 추가로 넣고 섞는다.

④ 따뜻한 곳에 놓아두어 발효시킨다

⑤ 170~180도의 오븐에서 굽는다

제1장 프로그래밍 소개 25

[그림 1-10]

알고리즘은 요리법과 같다.

Page 12: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■알고리즘의예

간단한 예를 들어서 알고리즘을 설명하여보자. 많이 사용되는 예제가 1부터 10까지

의 합을 구하는 문제이다. 다음과 같이 몇 가지의 방법을 생각할 수 있다. 각각의 방

법은하나의알고리즘이된다.

■순서도

그렇다면 알고리즘은 어떻게 기술하는 것이 좋을까? 물론 우리말로 기술할 수도 있

고 아니면 어로 기술할 수도 있다. 입문 단계에서 많이 사용되는 방법은 순서도를

사용하는 것이다. 순서도는 플로 차트(flow chart) 또는 흐름도라고도 하는 것으로

프로그램에서의논리순서또는작업순서를그림으로표현하는방법이다. 프로그래

머는 항상 순서도를 통해 자신의 논리를 가시화하는 것이 좋다. 보통의 순서도는 단

순한 기하학적 기호를 사용한다. 즉, 처리는 직사각형, 판단은 마름모, 입출력 처리

는평행사변형기호를쓴다.

① 1부터 10까지의 숫자를 직접 하나씩 더한다.

1 + 2 + 3 + … + 10 = 55

② 두 수의 합이 10이 되도록 숫자들을 그루핑하여 그룹의 개수에 10을 곱하고 남은 숫자 5를더한다.

③ 공식을 이용하여 계산할 수도 있다.

10*(1+10)/2=55

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0126

[그림 1-11]

순서도 작성에 사용되는 기호

Page 13: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

예를들어, 프린터고장을처리하는알고리즘은다음과같다.

순서도의단점은알고리즘이복잡해지면기술하기가힘들어진다는점이다.

이제부터는 실제로 컴퓨터에서 실행되는 프로그램을 작성하여보자. 먼저 전체적인

과정을살펴보자.

제1장 프로그래밍 소개 27

[그림 1-12]

순서도의 예: 프린터 고장을

처리하는 알고리즘

1. 친구에게 전화를 거는 알고리즘을 만들어보라.

2. 세탁기를 이용하여 세탁을 하는 알고리즘을 만들어보라.

중간점검

1.5 프로그램 개발 과정

Page 14: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

①에디트(edit) 단계

컴퓨터에 작업을 지시하는 문서를 만들어야 한다. C언어를 이용하여 원하는 작업의

내용을 기술한 것을 소스 코드(source code)라고 한다. 소스 코드가 파일에 저장된

것을 소스 파일이라고 한다. 소스 파일 이름은 프로그래머가 마음 로 지정할 수 있

다. 다만파일의확장자는항상‘.c’이어야한다.

②컴파일(compile)과링크(link) 단계

컴파일러를이용하여소스파일에저장된소스코드를기계어로변환한다. 컴파일러

는 소스 파일의 문장을 분석하여 문법에 맞도록 작성되었는지를 체크한다. 만약 오

류가발견되면사용자에게오류를통보하고컴파일은종료된다. 이런경우에프로그

래머는 에디팅 단계로 되돌아가서 소스 파일을 수정하여야 한다. 만약 오류가 없다

면 컴파일러는 각 문장들을 기계어로 변환한다. 이 기계어로 되어 있는 파일은 오브

젝트파일(object file)이라고불린다. 오브젝트파일은윈도우즈에서는‘.obj’확

장자를 가지고 있다. 예를 들어, test.c를 컴파일하면 test.obj라는 이름의 오브젝

트파일이생성된다.

링크(link)란 서로 연관된 오브젝트 파일들을 라이브러리 파일들과 연결하여 하

나의실행파일(execute file)을만드는절차이다. 링크가끝나면비로소실행가능

한파일인‘test.exe’가생성된다.

③실행(execute) 단계

실행 파일을 컴퓨터에서 실행시키면서 자신이 원하는 작업을 올바르게 하고 있는지

확인하는단계이다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0128

[그림 1-13]

프로그래밍의 순서

Page 15: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■필요한도구

프로그램을 제작하려면 어떠한 도구가 필요할까? 먼저 소스 파일을 만드는 데는 텍

스트에디터가필요하다. 메모장과같은에디터도사용할수있다. 소스파일을컴파

일하여서 실행 파일로 만들려면 컴파일러가 필요하다. 컴파일러는 비용을 지불하고

구입하여야 하지만 입문자들을 위한 컴파일러는 무료로 제공된다. 표적인 컴파일

러가 바로 우리가 사용하려고 하는 비주얼 C++이다. 또 오류를 찾아내는 데 필요한

디버거가있다.

예전에는 에디터, 컴파일러, 디버거 등이 별도의 분리된 프로그램이었다. 따라서 프

로그래머들은 매번 여러 개의 프로그램을 실행시켜야 했다. 프로그램 개발은 통합

개발환경(IDE: integrated development environment)과같은소프트웨어도구들

이 등장하면서 더욱 간편하고 효율적으로 프로그램을 작성할 수 있게 되었다. 통합

개발 환경은 프로그램 개발에 필요한 기능인 에디팅, 컴파일, 실행, 디버깅 기능을

하나의프로그램안에모두넣어서프로그램개발을쉽게해주는도구를의미한다.

■비주얼 C++

윈도우즈에서의 표적인통합개발도구는마이크로소프트사의비주얼 C++(Visual

C++)이다. 비주얼 C++의최신버전은비주얼 C++ 2008이다. 여기에서는사용자의수

준에맞추어서몇가지의제품을제공하고있다. 특이한점은학생및초보자가쉽게

배울수있는비주얼 C++ 익스프레스에디션(Express Edition)을제공하고있다. 이

것은 인터넷에서 무료로 다운로드받아서 설치할 수 있다(http://www.microsoft.

com/express/vc/).

제1장 프로그래밍 소개 29

Page 16: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

비주얼 C++는 C언어와 C++ 언어를이용하여윈도우형태를비롯하여여러가지형태

의 응용 프로그램을 개발할 수 있도록 하여주는 통합 개발 도구이다. 여기서 우리가

만들려고 하는 형태는 콘솔(console) 프로그램이다. 콘솔 프로그램은 콘솔을 이용

하여 텍스트 형태로 입력과 출력을 하는 매우 간단한 프로그램이다. 주로 문자 입출

력만이 가능하며 윈도우나 그래픽은 불가능하다. 너무 실망할 필요는 없고 항상 중

요한것은화려한외양보다내용이다.

먼저 간단한 C 프로그램을 에디터로 입력하여 소스 파일로 만들고 컴파일과 링크한

다음, 실행시켜보자.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0130

[그림 1-14]

비주얼 스튜디오 2008

정답은 소스 파일이다. 소스 파일만 있으면 컴파일러를 수행시켜서 오브젝트 파일, 실행 파일을

만들 수 있다. 하지만 소스 파일을 삭제하면 컴파일이 불가능하다. 따라서 반드시 소스 파일을 잘

보관하여야 한다. Visual C++에서는 프로젝트와 워크스페이스 파일도 같이 보관하는 것이 좋다.

이러한 파일들은 다시 만들 수도 있지만 번거로운 작업이 된다.

소스파일과오브젝트파일, 실행파일중에서반드시보관하여야하는파일은무엇일까?

Page 17: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■비주얼 C++의실행

먼저[시작]을클릭하고[모든프로그램]에서[Microsoft Visual C++ 2008 Express

Edition]을찾아서실행시키거나바탕화면에서비주얼 C++ 아이콘을찾아서더블클

릭한다. 초기화면은다음과같다.

제1장 프로그래밍 소개 31

정답은 실행 파일이다. 실행 파일은 독립적인 파일이다. 즉, 다른 파일들이 없어도 독립적으로 수

행될 수 있다. 구매자들은 실행 파일만 있으면 얼마든지 실행할 수 있다. 또한 C 컴파일러도 필요

없다. 만약 소스 파일을 구매자한테 준다면 구매자가 소스를 변경하여 다른 게임을 만들 수 있기

때문에 조심하여야 한다. 업체들이 소스 파일을 공개하지 않는 것은 이런 이유 때문이다.

만약 여러분이 게임 프로그램을 작성하 다고 가정하자. 프로그램을 판매하여 이익을

얻으려고 한다. 그런 경우에 여러분은 소스 파일, 오브젝트 파일, 실행 파일 중에서 어떤 파

일을구매자한테주어야할까?

1. 프로그램 작성 단계에는 _______ , _______ , _______이 있다.

2. 프로그램 개발에 필요한 도구를 묶어서 제공하는 것을 _____________이라고 한다.

중간점검

1.6 비주얼 C++를 이용한 프로그램 작성

Page 18: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■프로젝트의생성

비주얼 C++를 사용하여 프로그램을 작성하려면 먼저 솔루션과 프로젝트에 하여

이해를하여야한다. 솔루션(solution)은 하나의애플리케이션을생성하기 위한 프

로젝트들의그루핑이다.

프로젝트(project)란 하나의 실행 파일을 만드는 데 필요한 모든 파일들을 묶어

놓은 것이다. 프로젝트에는 소스 파일, 리소스 파일, 외부 파일과 같은 것들이 포함

된다. 먼저 [파일] → [새로만들기] → [프로젝트] 메뉴를선택하여서새로운프로

젝트를만들어보자. 프로젝트를생성하면솔루션은자동으로생성된다.

[파일] → [새로 만들기] → [프로젝트]를 선택하면 다음과 같은 화면이 등장한다.

프로젝트형식으로는 [일반]을선택하고템플릿은 [빈프로젝트]를선택한다. 이어

서새로운프로젝트의이름을입력한다. 프로젝트가저장되는폴더는 [찾아보기]버

튼을클릭하여서변경할수있다. 솔루션의이름은자동으로입력된다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0132

Page 19: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■소스파일의생성

프로젝트를 만들었으므로 이제는 소스 파일을 생성시켜보자. 소스 파일을 프로젝트

에 추가하기 위해서는 [프로젝트] 메뉴에서 [새 항목 추가]를 실행한다. 그러면 다

음과같은화면이등장한다. 여기서 [코드]와 [C++ 파일(.cpp)]을선택하고파일이

름을 입력한다. 우리가 작성하려고 하는 것은 C++ 파일이 아니고 C 파일이지만 걱정

할 것은 없다. 파일 이름을 입력할 때 확장자를 .c로 하면 된다. 만약 확장자를 지정

하지않으면확장자가 .cpp인소스파일이기본적으로생성된다.

제1장 프로그래밍 소개 33

Page 20: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0134

■소스코드의입력

왼쪽 상단에 있는 솔루션 탐색기에 보면 리소스 파일, 소스 파일, 헤더 파일의 세 가

지 폴더가 보인다. 우리가 만든 test01.c는 소스 파일 폴더에 들어 있다. test01.c

파일을 더블클릭하면 test01.c가 열리면서 에디터가 실행되어 오른쪽 화면에서 소

스코드를입력할수있다.

이 상태에서 오른쪽 윈도우에 소스를 입력하면 된다. 다음의 소스를 주의하여서 그

로입력하여보자. 소스코드를입력할때는흔히한두 자는틀리기쉽다. 그러나

한 자만틀려도프로그램은컴파일되지않는다. 따라서처음에는다음을참조하여

코드를보이는 로그 로입력하도록하자.

소스코드를입력할때주의하여야할사항을살펴보자.

● C에서는 문자와 소문자를 구별한다. 따라서 문자와 소문자를 정확하게 구별

하여입력하여야한다. 즉, main과 Main은서로다르다.

●주어진소스코드를입력할때한 자라도틀리지않게철자에주의하여야한다.

[그림 1-15]

소스 코드를 오른쪽과 같이

입력하여야 한다.

Page 21: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

하나의 기호만 틀려도 실행이 불가능하다. stdio.h라고 해야 할 것을 stdio,h로

입력하면안된다. 컴퓨터는믿을수없을만큼멍청하다.

●소스코드에서의각문장은세미콜론(;) 기호로끝나야한다. ; 기호는마침표역

활을한다.

●각문장과문장사이에는공백이있어도된다. 또한문장은들여쓸수있다. 그러

나일단은주어진 로입력하도록하자.

화면을 캡처한 그림에서도 알 수 있지만 단어들이 파란색, 붉은색, 검은색으로 나타

난다. 만약자신이입력한단어가그림의색상과다른경우에는다시한번확인을하

여야한다. 그림과완전히 100% 동일한경우에만올바르게컴파일된다.

■컴파일과링크

소스 코드를 다 입력하 으면 컴파일과 링크를 하여 실행 파일을 만들어보자. 컴파

일과링크를하려면 [빌드] 메뉴의 [솔루션빌드]를선택하면된다. 소스파일은자

동으로저장된다.

제1장 프로그래밍 소개 35

Q 비주얼 C++를사용하여프로그램을작성하는경우에반드시비주얼 C++에서지원

되는에디터만을이용해야되는가?

A 다른 에디터를 이용해도 된다. 단, 에디터를 이용하여 파일을 저장할 때 파일의 확장

자가 c로끝나야된다. 확장자가 c인파일은프로젝트의 [소스파일]이라고되어있

는 부분에 추가할 수 있다. [소스 파일] 위치에서 마우스 오른쪽 버튼을 누르고 [추

가] 메뉴를 선택하면 삽입시킬 파일을 물어본다.

Page 22: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

화면은컴파일과링크과정에서오류와경고의숫자가 0이라는것을나타낸다. 만약

여러분이 입력하는 과정에서 철자를 잘못 입력하게 되면 오류와 경고가 0이 아닐 수

가있다. 이경우에는입력한소스코드를다시한번교과서와비교해보고오류를수

정한다음, 다시빌드를하여야한다.

만약 철자를 하나 잘못 입력하 다고 가정하자. 문장 끝의 ;을 :으로 잘못 입력했

다고하면, 컴파일러는다음과같은오류메시지를출력하게된다.

위의오류메시지를보면 test01.c의 5번라인에서구문오류가발생했다는것을알

수있다. 프로그래머는오류메시지에서오류설명을보고소스코드를수정할수있

어야한다.

■프로그램실행

지금까지 작성한 프로그램을 실행시키려면 [디버그] 메뉴의 [디버깅하지 않고 시

작] 메뉴 항목을 선택한다. 만약 실행 시간 오류가 없다면 다음과 같은 MS-DOS 창이

뜨고 여기에 Hello World!가 출력된다. 이 상태에서 아무 키나 누르면 프로그램이

종료되고다시비주얼 C++로되돌아간다.

실행 화면에서“계속하려면 아무 키나 누르십시오...”는 프로그램의 출력이 아니

고 계속 진행하려면 아무 키나 누르라는 안내 메시지이다. 이 메시지는 프로그램을

실행시켰을 때 항상 나오는 메시지이다. Hello World!가 예제 프로그램의 출력이

된다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0136

독자들중에서는혹시왜프로그램의출력이명령프롬프트에텍스트로나오는지궁금해하는사람도있을

것이다. C언어가만들어진 1970년 에는주로텍스트로입력과출력을하 다. 따라서 C 프로그램은기본적

으로 텍스트 입력과 출력을 가정한다. 하지만 그래픽 프로그램을 C언어로 작성하지 못한다는 의미는 절

아니다. 비주얼 C++에서도프로젝트의유형을 [Win32]로하면윈도우에서실행되는그래픽프로그램을작

성할수있다.

참고

Page 23: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

위와 같은 화면이 나오면 프로그램이 성공적으로 실행된 것이다. 이 작은 프로그램

에 한설명은 2장에서자세하게살펴보자.

제1장 프로그래밍 소개 37

Q Visual C++ 2008 버전에서는 소스 파일, 오브젝트 파일, 실행 파일이 어디에 저

장되는가?

A 소스 파일은‘/지정폴더/솔루션/프로젝트/’에 저장된다.

위의 예에서는 C:/source/chapter01/test01/test01/에 test01.c가 저장된다.

오브젝트 파일과 실행 파일은 앞의 폴더 안의 debug 폴더에 저장된다.

1. 새로운 프로젝트를 생성하고 프로젝트에 소스 파일을 추가하는 메뉴는 무엇인가?

2. 프로젝트에 속하는 소스 파일을 컴파일하여 실행하는 메뉴는 무엇인가?

3. C언어에서는 문자와 소문자를 구별하는가?

중간점검

Page 24: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

Q 컴퓨터는왜십진수가아닌이진수를사용하나?

A 이진수의각자릿수는 0아니면 1이다. 0은스위치가열린상태(OFF)로표현할수

있고 1은스위치가닫힌상태(ON)로표현할수있다. 따라서여러개의스위치를

늘어놓으면이진수를나타낼수있다. 이진수는컴퓨터가받아들이기아주쉽다.

컴퓨터에서는내부적으로모든것을이진수형태로표현하여처리한다.

Q 지금은객체지향언어시 라고한다. 그래도 C언어를공부하여야하는가?

A C언어는 현재 많이 사용되는 객체지향 언어인 C++, 자바의 어머니 격이 되는 언

어이다. 지금도 전자 기기 안에 내장되는 임베디드 프로그램은 C언어를 많이 사

용한다. 그리고 많은 응용 프로그램들이 스크립트 언어로 C언어와 유사한 언어

들을제공한다(예를들어서 MATLAB). 결론적으로프로그래머가되려고하면 C언

어는필수라고할수있다.

Q 왜이름이 C언어인가?

A C언어라고 이름 붙여진 이유는 이전에 존재하 던 B언어에서 많은 특징들을 따

왔기때문이다. B언어는 BCPL이라는언어의간략화된버전이었다고한다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0138

Q & A

Page 25: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

1. 컴퓨터가사용하는진법은? ( )

① 2진법 ② 8진법 ③ 10진법 ④ 16진법

2. 소스프로그램을오브젝트프로그램으로변환하는도구는무엇인가? ( )

①링커 ②컴파일러 ③에디터 ④디버거

3. 다음중에서 C언어의특징으로올바른것을모두선택하여라. ( )

①비교적간결한언어에속한다.

②개발된프로그램을다른컴퓨터로옮기기쉽다.

③하드웨어제어가가능하다

④객체지향프로그래밍이가능하다.

4. 문제를해결하는절차를시각적으로표현하는것은무엇인가? ( )

①구조도 ②순서도 ③의사코드 ④설명도

5. 다음의프로그램개발과정을순서 로적어라. ( )

①소스코드를컴파일한다.

②에디터를이용하여소스코드를작성한다.

③논리적인오류를추적하기위하여디버깅한다.

④오브젝트파일들을모아서링크한다.

⑤프로그램을실행한다.

⑥알고리즘을설계한다.

6. 컴퓨터를이용하여문제를해결하기위한단계(절차)를무엇이라고하는가? ( )

①알고리즘 ②객체지향 ③구조적방법 ④자료구조

7. 프로그래밍언어의문법을위반하 을경우에발생하는오류는? ( )

①컴파일시간오류 ②실행시간오류

③논리적인오류 ④링크시간오류

8. 순서도(flowchart)에서처리를나타내는기호는? ( )

① ② ③ ④

제1장 프로그래밍 소개 39

Exercise

Page 26: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

9. 다음중에서 C언어를개발한사람은누구인가? ( )

① Dennis Ritchie ② Kernighan

③ Niklaus Wirth ④ Bjarne Stroustrup

10.컴퓨터에서십진법이아닌이진법이사용되는이유를설명하여라.

11. 인텔의 CPU에서 사용되는 명령(instruction)에서 3가지를 선택하여 무슨 일을

하는명령어인지를조사하여라.

12.주판, 계산자, 계산판 등의 고 의 계산하는 기계들하고 현 의 컴퓨터와 결정

적인차이점은무엇인가?

13.컴퓨터를이용하여문제를해결할때, 문제를해결하는방법을인간이구체적으

로 고안하여 알려주어야 한다면, 왜 컴퓨터를 사용하는 것인가? 인간이 직접 하

는편이낫지않을까? 컴퓨터를사용하는경우의장점을들어라.

14.임베디드시스템이란어떤것인가? 인터넷에서자료를찾아서정리하여라.

15. 주어진두수의평균을구하는알고리즘을작성하여라.

16.사용자로부터 원의 반지름을 입력받고, 반지름에 2를 곱하여 지름을 구하고, 여

기에 3.14를곱하여원주를구하는알고리즘을순서도를이용하여기술하여라.

17. 사용자에게입력받은 5개의정수중에서최솟값을찾는문제에 한알고리즘을

작성하여라.

18. 1부터 10까지의 숫자들이 있다. 이들 숫자들은 순서 로 되어 있지 않다. 이들

숫자들을크기순서 로정렬시키는알고리즘을생각할수있는가?

19.두 개의 숫자 중에서 큰 수를 반환하는 연산만 지원되는 컴퓨터가 있다. 이 컴퓨

터에서 3개의 숫자 중에서 제일 큰 수를 찾으려고 하면 어떤 알고리즘을 사용해

야하는가? 순서도로그려보아라.

20.두 개의 컵에 우유와 주스가 각각 담겨 있다. 우유와 주스를 교환하기 위한 알고

리즘을고안하여라. 사용가능한세번째컵이있다고가정하여라.

21.소스파일, 오브젝트파일, 실행파일의차이점을설명하여라.

22.컴파일러와링커가하는일을정리하여라.

23. 어의문장을예로들어서문법적인오류와논리적인오류를설명하여라.

24.다음소스에는많은오류가있다. 오류를찾아내서수정하여라.

/* 첫 번째 프로그램 * /include <stdio.h>int Main(void);{printf("Hello World!\n")return 0;}

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0140

Page 27: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

기초사항

학 습 목 표

●프로그램의 각 구성 요소들을 간단히 학습한다.

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

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

CH

AP

TE

R02

C O N T E N T S

2.1 첫 번째 프로그램

2.2 화면 출력

2.3 연산이 있는 프로그램

2.4 입력과 출력이 있는 프로그램

2.5 오류 수정 및 디버깅

2.6 응용 프로그램

CPROGRAMMING

Page 28: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

1장에서 컴파일하고 실행시킨 소스 코드를 분석하여보자. 이 프로그램은 "Hello

World!"라고 하는 문자열을 화면에 출력하는 프로그램이다. 이 프로그램은 전통적

으로 C 프로그램의 세계에 들어오는 사람들이 처음으로 작성하는 프로그램이 되어

왔다. 프로그램의구성요소들을설명하여보자.

실행 결과

■주석

위의 문장은 주석(comment)이라고 불린다. 주석이란 프로그램에 한 설명이다. 주

석은 /*로 시작하여서 */로 끝난다. 주석은 컴파일러에 의하여 무시되기 때문에 프

로그램의 동작에는 전혀 향을 끼치지 않는다. 무엇이든지 적어놓을 수 있으며 한

줄 또는 여러 줄이 될 수 있다. 그렇다면 도 체 주석은 어디에 필요한 것인가? 주석

은 컴퓨터를 위한 것이 아니고 프로그램을 읽는 사람을 위한 것이다. 주석은 프로그

램의가독성을높인다. 주석에는보통프로그램의구조와동작을설명해주는문장들

/* 첫 번째 프로그램 */

Hello World!

/* 첫 번째 프로그램 */#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}

12345678

hello.c

기초사항CHAPTER02

C PROGRAMMING

2.1 첫 번째 프로그램

주석

헤더 파일 포함

함수의 시작

실행되는 문장

함수의 종료

Page 29: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

이 들어간다. 개 작성자, 작성 목적, 작성 일자, 코드 설명 등이 주석에 포함된다.

/와 *은반드시붙여서쓰도록한다.

현재의 C 프로그램에서는 더욱 편리한 새로운 타입의 주석을 사용할 수 있다. 바로

이중 슬래시 //이다. 이중 슬래시는 //부터 줄의 끝까지가 주석이라는 것을 나타

낸다.

좋은 주석은 코드를 그 로 설명하지 않는 것이라고 한다. 좋은 주석은 코드를 작성

한 의도를 명확히 나타낸다. 주석은 프로그래머가 무엇을 하려고 하는지를 훨씬 높

은수준에서설명하여야한다.

■헤더파일포함

#으로시작하는문장은전처리기지시자이다. 전처리기(preprocessor)는보통본격

적으로컴파일하기전에사전정지작업을하는컴파일러의일부분이다. #include는

소스 코드 안에 특정 파일을 현재의 위치에 포함시키라고 지시한다. 이러한 파일들

#include <stdio.h>

// 이 줄은 전체가 주석이다.

printf("Hello World!"); // 문자열을 화면으로 출력

제2장 기초 사항 43

/* ... */

/* 한 줄로 된 주석 */

/* 여러

줄로

된 주석 */

문법

[그림 2-1]

주석

Page 30: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

은 헤더 파일(header file)이라고 불리며, 헤더 파일은 컴파일러가 필요로 하는 정

보를가지고있다. 전처리기지시자문장끝에는세미콜론을붙이면안된다.

stdio.h라는파일은입출력함수에 한정보를가지고있는헤더파일이다. 헤더

파일들은 일반적으로 .h 확장자를 가지고 있다. 부분의 프로그램에서 한 개 이상

의 헤더 파일을 사용한다. 우리는 부분의 경우, stdio.h 헤더 파일을 포함시킬 것

이다. 헤더파일은보통소스파일의시작부분에포함시킨다.

■줄바꿈및들여쓰기

hello.c의 3번째 줄은 비어 있는데 이는 프로그램을 보기 쉽게 하기 위하여 빈 줄을

의도적으로 둔 것이다. 문장과 문장 사이에는 얼마든지 빈 줄을 둘 수 있다. 빈 줄은

프로그램의실행결과에는아무런 향을끼치지않는다.

여기서 잠깐 들여쓰기(indentation)에 하여 설명을 하고 지나가자. 들여쓰기

는 소스 코드의 가독성을 높이기 위하여 같은 수준에 있는 문장들을 왼쪽 끝에서 몇

자 안으로 들여보내거나 적당한 공백 문자를 삽입하는 것이다. 들여쓰기를 잘하면

소스 보기가 매우 편해진다. 반면에 들여쓰기를 하지 않으면 똑같이 실행되기는 하

지만읽기에불편한프로그램이된다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0244

[그림 2-2]

헤더 파일이

#include 위치에 삽입된다.

#include <헤더 파일>

#include <stdio.h>#include <memory.h>

문법

Page 31: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■함수

1장에서 프로그램은 작업 지시서와 같다고 이야기하 다. 그렇다면 작업을 지시하

는문장들은어디에들어가게될까? 바로다음과같은공간안에작업을지시하는문

장들을넣으면된다.

위의문장은실제로는 main() 함수를정의하는문장이다. 함수(function)란특정한

작업을수행하는코드의집합이다. 함수는입력이주어지면출력을만들어내는가상

적인기계와같다.

하나의 프로그램은 여러 개의 함수들로 이루어진다. 그러나 우리는 당분간 main()

함수만을 사용할 것이다. main() 함수는 특별한 의미가 있다. 왜냐하면 모든 C 프로

그램은 main()에서 시작하기 때문이다. 따라서 모든 C 프로그램에는 반드시 하나의

main() 함수가있어야한다.

int main(void){

}

제2장 기초 사항 45

[그림 2-3]

줄바꿈 및 들여쓰기

작업을 지시하는 부분

[그림 2-4]

함수

Page 32: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

함수는 6장에서 자세하게 기술되겠지만 일단 간단하게 함수에 한 설명을 하여보

자. int main(void)은 함수의 이름과 함수의 입출력을 나타낸다. int, main, void는

C언어에서 모두 미리 정해진 단어로 키워드라고 하는데, int는 출력 타입이고, main

은 함수 이름이며, void는 입력 타입이다. 따라서 int main(void)는 함수 main은

void 형태의입력을받아서처리하여출력을 int 형태로내보낸다는것을의미한다.

void는 비어 있다는 뜻이므로 이는 입력이 없다는 것을 말한다. int는 정수 타입을

나타내므로출력은정수형태임을알수있다.

함수의구성요소를다시정리하여보면다음과같다.

함수의시작과끝은{과 }로나타낸다. {과 } 사이에함수의몸체부분이들어간다. 함

수의 몸체에는 작업을 수행하는 문장들이 들어간다. 예를 들어, 만약 함수가 화면에

출력하는작업을한다면화면에메시지를출력하는문장들이 {과 } 사이에들어간다.

■문장

그렇다면이제함수의몸체에들어가서작업을지시하는문장(statement)에 하여

살펴보자. 문장은 하나의 작은 처리를 나타낸다. 프로그램이 어떻게 동작하느냐는

어떤 문장이 함수 안에 포함되느냐에 달려 있다. 문장을 이용하여 화면에 값들을 출

력할수도있고수학적인계산을할수도있다.

한 문장의 끝에는 마침표를 찍듯이 소스 코드 문장의 끝에는 반드시 ;(세미콜

론)을 찍어야 한다. 문장들은 기본적으로 처음부터 차례 로 실행된다. 즉, 예제에

서 살펴보면 먼저 printf("Hello World!"); 문장이 실행되고 다음에 return 0; 문

장이실행된다.

int main(void){

printf("Hello World!\n");return 0;

}

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0246

[그림 2-5]

main() 함수

함수의 이름

함수의 출력 타입

함수의 입력 타입함수의 시작

함수의 끝

함수의 몸체

[그림 2-6]

함수의 구성 요소

Page 33: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

printf("Hello World!"); 문장은 printf() 함수를 호출하여 콘솔 화면에 텍스트

Hello World!를출력하는문장이다. 함수를호출한다고하는것은이미작성되어있

는함수를사용한다는뜻이다. printf() 함수는컴파일러가우리에게제공하는함수

로써 콘솔 화면에 텍스트나 데이터 값들을 출력할 때 사용하는 라이브러리 함수이

다. 일반적으로 printf 함수는 큰따옴표 사이에 있는 문자들을 그 로 화면에 출력

한다. 큰따옴표로둘러싸인텍스트를문자열(string)이라고한다. 예제프로그램에

서 "Hello World!"가바로문자열이다. 화면출력은상당히중요한작업이기때문에

다음절에서상세하게살펴보자.

return은함수가작업을끝내고작업의결과를반환할때사용된다. return 0; 문

장이실행되면 main() 함수는작업을끝내고외부로 0값을반환한다. 여기서외부라

고하는것은이프로그램을실행시킨윈도우 XP와같은운 체체를가리킨다. 보통

0의값은프로그램이정상적으로종료했음을나타낸다.

화면출력은어떤프로그램에서도중요하다. 보통프로그램은결과를어딘가에출력

하여야 하기 때문이다. 요즘은 윈도우에다가 그래픽으로 출력하는 것이 세이지만

그래픽을 사용하려면 약간은 복잡한 과정을 거쳐야 한다. C언어는 전통적으로 콘솔

화면에텍스트를출력하는기능을기본으로제공한다. 바로 printf()가출력을담당

하는라이브러리함수이다. 라이브러리함수란프로그래머가사용할수있도록컴파

일러가 기본적으로 제공하는 함수들을 의미한다. 라이브러리에 있는 함수들은 누구

든지사용할수있다.

int main(void){

printf("Hello World!");return 0;

}

제2장 기초 사항 47

순차적으로 실행된다.

printf()에서 f는

formatted를 의미한다. 즉,

형식(format)을 지정하는

출력 함수라는 의미이다.

printf() 함수는 프린트에

프라고읽으면된다.

참고

1. 주석이 하는 역할은 무엇인가?

2. 주석을 여러 줄로 하려면 어떤 스타일을 사용하여야 하는가?

3. #include 문은 어떤 동작을 하는가?

4. 모든 문장의 끝에 있어야 하는 기호는?

중간점검

2.2 화면 출력

Page 34: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0248

[그림 2-7]

라이브러리 함수는

컴파일러가 프로그래머한테

제공하는 함수들이다.

[그림 2-8]

printf() 함수

즉, 우리가 다음과 같은 문장을 작성하면 컴퓨터는 따옴표 안의 텍스트를 화면에 출

력한다.

라이브러리에는많은 함수들이 기본으로 제공되고 있는데, 그중에서 printf()는 콘

솔화면에출력을하기위한함수이고, 뒤에나오는 scanf()는키보드에서의입력을

위한함수이다.

■줄바꿈기호

앞에서 화면에 문자열을 출력하는 아주 간단한 프로그램을 작성하여보았다. 우리가

만든첫번째프로그램을약간만확장시켜보자. 우선출력을다음과같이한줄이아

닌두줄로하려면어떻게할까?

실행 결과

첫번째예제에서는 printf("...");에있는큰따옴표안의텍스트가화면에출력되

었다. 그리고 main() 함수안에들어있는문장들은순차적으로수행된다고하 다.

따라서 비슷한 문장을 하나 더 만들어서 추가하여 실행하면 원하는 결과를 얻을 수

있을것이다.

Hello World!Kim ChulSoo

Page 35: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

실행 결과

하지만 실행 결과는 우리가 원하는 것과 약간 다르다. Hello World!를 출력한 후에

다음 줄에 Kim ChulSoo를 출력하려면 화면에서 줄을 바꾸어주어야 한다. 줄바꿈 문

자는 \n으로표현된다. \n처럼역슬래시(\)가먼저나타나면특별한의미를가진다.

\와 n이합쳐진 \n은줄바꿈(newline)을의미한다. \n은화면의커서를다음줄의시

작 위치로 옮긴다. 여기서 커서라고 하는 것은 마우스의 커서가 아니고 MS-DOS 창과

같은콘솔화면에서의커서를의미한다.

따라서줄바꿈문자를이용하여서위의프로그램을다시작성해보면다음과같다.

Hello World!Kim ChulSoo

/* 첫 번째 프로그램의 응용 */#include <stdio.h>int main(void){

printf("Hello World!");printf("Kim ChulSoo");

return 0;}

123456789

hello1.c

제2장 기초 사항 49

순차적으로 실행된다.

[그림 2-9]

\n은 화면에서 줄을 바꾸는 데

사용되는 특수한 문자이다.

Page 36: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

실행 결과

■화면에여러줄을출력한다.

이제까지배운것을바탕으로화면에구구단의일부를다음과같이출력하여보자.

실행 결과

여기에서도 마찬가지로 main() 안의 문장들은 순차적으로 실행되므로 다음과 같이

문장을배치하면된다.

/* 첫 번째 프로그램의 응용 */#include <stdio.h>

int main(void){

printf("3 X 1 = 3\n");printf("3 X 2 = 6\n");printf("3 X 3 = 9\n");

return 0;}

1234567891011

gugu.c

3× 1 = 33× 2 = 63× 3 = 9

Hello World!Kim ChulSoo

/* 첫 번째 프로그램의 응용 */#include <stdio.h>

int main(void){

printf("Hello World!\n");printf("Kim ChulSoo\n");

return 0;}

12345678910

hello2.c

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0250

줄바꿈 문자

순차적으로 실행된다.

Page 37: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

앞에서출력문만있는아주간단한프로그램을살펴보았다. 그러나일반적인프로그

램은 외부로부터 데이터를 받아서, 데이터를 처리한 후에, 결과를 화면에 출력한다.

이번장에서는이러한일반적인구조를가지는프로그램을작성하여보자.

이프로그램들을난이도순으로학습하여보자. 첫번째프로그램은두개의정수를

가지고 덧셈 연산을 실행한 후에, 연산 결과를 화면에 출력한다. 이 프로그램에서는

데이터들을메모리에저장하기위하여변수라는새로운개념을사용한다. 이프로그

램을 통해 덧셈 연산을 실행하는 문장을 배우고, printf() 함수를 사용하여 변수의

값을 출력하는 방법도 살펴본다. 먼저 소스 프로그램을 전체적으로 살펴본 다음에

각구성요소별로좀더자세히설명한다.

실행 결과

두수의 합: 300

/* 두 개의 숫자의 합을 계산하는 프로그램 */#include <stdio.h>

int main(void){

int x; // 첫 번째 정수를 저장할 변수

int y; // 두 번째 정수를 저장할 변수

int sum; // 두 정수의 합을 저장하는 변수

x = 100;y = 200;

sum = x + y;

printf("두수의 합: %d", sum);

return 0;}

12345678910111213

14151617

add1.c

제2장 기초 사항 51

1. 줄바꿈 문자인 "\n"이 하는 역할은 무엇인가?

2. main() 함수 안의 문장들은 어떤 순서 로 실행되는가?

중간점검

2.3 연산이 있는 프로그램

덧셈 연산

변수 선언

변수에 값을 할당

변수의 값을 출력

Page 38: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■변수

위의 문장들은 변수를 정의하는 문장이다. 변수(variable)란 프로그램이 사용하는

데이터를일시적으로저장할목적으로사용하는메모리공간이다.

변수를 요리에 비유하여 이야기하면 그릇이라고 할 수 있다. 요리는 여러 가지 재

료를 이용하여 만든다. 요리를 하려면 외부에서 음식 재료를 받아서 어딘가에 놓아

야한다. 이때필요한것이그릇이다. 재료들을일단은그릇에놓아야다음에사용할

수 있는 것이다. 프로그램에서 변수도 그릇과 마찬가지의 역할을 한다. 어떤 처리를

하려면 먼저 입력 데이터 값들을 어딘가에 저장해야 한다. 이때 필요한 것이 변수이

다. 변수는데이터값을일시적으로저장하는역할을한다.

변수는 데이터 값을 저장하고 있는 상자로 생각하면 이해가 쉽다. 이 상자는 컴퓨터

안의메인메모리안에만들어진다. 앞으로는변수를상자로그리기로하자.

변수는 어떤 데이터를 저장하느냐에 따라 여러 가지 타입이 있다. 상자도 여러 가지

int x; // 첫 번째 정수를 저장하는 변수

int y; // 두 번째 정수를 저장하는 변수

int sum; // 두 정수의 합을 저장하는 변수

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0252

[그림 2-10]

프로그램에서의 변수는

요리에서의 그릇과 같다.

그릇에 음식 재료들이

담기듯이 변수에는

데이터들이 저장된다.

[그림 2-11]

변수와 상자

Page 39: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

크기가있는것처럼변수도담을수있는데이터의종류나범위에따라여러가지타

입이 있다. 예를 들면, 정수를 저장할 수 있는 변수도 있고 실수나 문자를 저장할 수

있는 변수도 있다. 작은 상자에 큰 물건을 넣을 수 없는 것처럼 변수도 큰 값을 작은

값을저장하는변수에저장할수는없다.

상자와상자를구분하기위해서는각각의상자에이름을붙이는것이편리하듯이각

각의 변수들도 자신만의 이름을 가지고 있다. 우리는 이 이름을 사용하여 변수들을

구분한다.

■변수선언

C언어에서 변수를 사용하려면 먼저 변수를 선언하여야 한다. 변수 선언이란 컴파일

러에게 지금부터 이러이러한 변수를 사용하겠다고 미리 말을 해두는 것이다. 또 어

떤타입의데이터가그변수에저장되는지도컴파일러에게미리알리는것이다.

변수를 선언하는 방법은 자료형(즉 변수가 무엇을 저장할 것인지)과 변수의 이름

(앞으로어떤이름으로불릴지)을적어주는것이다. 그형식은다음과같다.

제2장 기초 사항 53

[그림 2-12]

변수는 저장할 수 있는

데이터의 종류나 범위에 따라

여러 가지 종류가 있다.

[그림 2-13]

변수들은 자신만의 이름을

가지고 있다.

[그림 2-14]

변수들은 사용하기 전에 미리

선언하여야 한다. 선언한다는

것은 컴파일러에게 미리 변수

들을 소개하는 것과 같다.

Page 40: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

자료형(data type)이란 변수가 저장할 데이터가 정수인지 실수인지, 아니면 또 다

른어떤데이터인지를지정하는것이다. 자료형에는정수형, 실수형, 문자형이있다.

정수형은 12나 -35 같은 정수를 나타내는 자료형으로 정수의 범위에 따라 다시

short, int, long으로나누어진다. 실수형은소수점을가지는실수값을나타내며실

수의 범위에 따라 float와 double로 나누어진다. 문자형은 하나의 문자를 나타내는

자료형으로 char뿐이다.

예제프로그램에서는 3개의정수를저장할수있는변수가필요하다. 이들변수들을

x, y, sum이라는 이름으로 생성하 다. 이들 변수들은 모두 정수를 저장하면 되므로

정수형으로선언하 다.

모든 변수는 함수의 처음 부분에서 선언하여야 한다. 변수를 선언하는 것도 하나의

문장이므로반드시세미콜론으로끝나야한다.

변수가 선언되면 메모리의 공간이 확보되며 이 공간에 이름이 매겨지게 된다. 아

직까지값은저장되지않았다. 즉 [그림 2-16]과같은상태이다.

int x; // 첫 번째 정수를 저장하는 변수

int y; // 두 번째 정수를 저장하는 변수

int sum; // 두 정수의 합을 저장하는 변수

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0254

자료형 변수 이름;

int i;float sum;double x, y;

문법

[그림 2-15]

표준 자료형의 종류

[그림 2-16]

변수를 선언하면

메모리 공간에 값들을

저장할 수 있는 상자가

만들어진다고 볼 수 있다.

Page 41: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■상수

상수(constant)란 그 값이 프로그램이 실행되는 동안 변하지 않는 수 또는 변경 불

가능한 수를 의미한다. 3, 123, 3.141592 등이 상수이다. 예제 프로그램 add.c에서

100과 200이 바로 상수이다. 상수가 왜 필요한지 생각하여보자. 연봉을 계산하는 프

로그램을 작성한다고 해보자. 연봉을 계산하려면 1년은 12달로 되어 있으므로 월급

에 12를곱하여야한다. 12와같은숫자도프로그램에반드시필요하다. 따라서 12와

같은것들이상수가된다.

상수는 변수와 반 되는 개념이다. 변수는 프로그램 도중에 변경될 수 있는 수이다.

반면상수는처음부터끝까지그값이변하지않는다. 상수는변수들의초기값을설

정할때도필요하고각종산술적인연산에서도필요하다.

상수에는 정수 상수도 있고 실수 상수도 있다. 실수 상수는 일상생활에서 사용하

는 로 3.141592와같이표기하면된다. 이것이외에도문자를나타내는문자상수,

문자열을 나타내는 문자열 상수 등이 있다. 문자 상수는 하나의 변하지 않는 문자를

나타내는 것으로 작은따옴표를 사용하여 'a'와 같이 표기한다. 문자열 상수는 큰따

옴표를사용하여 "Hello World!"와같이나타낸다.

■ 입연산

변수는 값을 저장하기 위하여 선언한다. 그렇다면 변수에 값을 저장하는 방법은 무

엇일까? 위의 문장처럼 = 연산자를 이용하면 된다. = 연산자를 입 연산자(또는 할

당 연산자)라고 한다. 즉, 변수에 값을 입한다는 의미이다. =의 좌변에는 값을 저

장할수있는변수가위치하고우변에는저장될값이위치한다.

x = 100;y = 200;

제2장 기초 사항 55

[그림 2-17]

변수와 상수

Page 42: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

여기서 =는수학적인등호가아니라는것에유의해야한다. 따라서다음의문장도가

능하다.

위의 문장은 변수 x의 값에 1을 더하여 다시 x에 저장하라는 의미이다. 따라서 위의

문장이실행되면변수 x의값이하나증가하게된다.

■산술연산

컴퓨터는 기본적으로 계산을 하는 기계이다. 따라서 프로그램 안에서 산술 연산을

할수있다는것은매우당연하다. 산술연산을하려면먼저산술연산을수행하는연

산자들을알아야한다. <표 2-1>에서산술연산자들을요약하 다.

사칙 연산자들은 이항 연산자라고 불리는데, 두 개의 피연산자를 가지고 있기 때문

이다. 여기서 주의해야 할 사항은 곱셈의 경우 반드시 * 기호를 사용하여야 한다는

것이다. 만약 수학에서처럼 x와 y를 곱하는 것을 xy로 쓰게 되면 컴파일러는 이것을

새로운변수이름 xy로생각할것이기때문이다.

예제프로그램에서의연산을보면다음과같다.

sum = x + y;

x = x + 1;

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0256

[그림 2-18]

C에서는 = 연산자가 변수에

값을 저장하는 연산자이다.

연산 연산자 C 수식 수학에서의 기호

덧셈 + x + y x + y

뺄셈 - x - y x - y

곱셈 * x * y xy

나눗셈 / x / y x ÷ y

나머지 % x % y x mod y

<표 2-1>

산술 연산자의 요약

Page 43: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

변수 x에 들어 있는 정수와 변수 y에 들어 있는 정수를 더해서 변수 sum에 입하

다. 여기서 +가연산자이고피연산자는 x와 y이다. 덧셈의결과는 입연산자인 =을

통하여변수 sum에저장된다.

■변수값출력

printf()는 문자열을 출력할 수 있을 뿐 아니라 형식을 지정하여 상수나 변수의 값

을 출력하는 기능도 가지고 있다. 만약 변수 sum이 가지고 있는 값을 printf() 함수

를이용하여출력하려면다음과같이하면된다.

여기서 "%d"는 %d를 출력하라는 의미가 아니고 출력 형식을 지정한다는 의미이다.

즉, 변수 sum의 값이 %d의 위치에서 정수형으로 출력이 된다는 의미이다. 여기서

"%d"를 형식 제어 문자열이라고 하고 %d와 같은 것을 형식 지정자라고 한다. 기본적

인형식지정자는다음과같은것들이있다.

형식 지정자와 변수들은 1개 이상일 수 있고 중간에 문자열이 있을 수 있다. 이 경우

에는형식지정자와변수들이다음과같이 응된다. 즉, 형식지정자의자리에변수

의값이 치되어서출력된다고생각하면된다.

제2장 기초 사항 57

[그림 2-19]

산술 연산의 과정: 먼저 x와

y에서 값을 가져와서 덧셈 연

산이 수행되고 그 결과 값이

sum에 저장된다.

printf(형식 제어 문자열, 변수);

printf("%d", sum);

형식

<표 2-2>

형식 지정자의 종류

형식 지정자 의미 형태

%d 정수형태로출력 100

%f 실수형태로출력 3.141592

%c 문자형태로출력 A

%s 문자열형태로출력 Hello

Page 44: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

여기서 주의할 점은 형식 지정자와 변수의 타입은 반드시 일치하여야 한다는 점이

다. 즉, 다음과같이정수형변수를실수형태로출력하라고하면오류가발생한다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0258

[그림 2-20]

printf()에서의

형식 제어 문자열

[그림 2-21]

형식 지정자와

변수의 자료형이 다르면

오류가 발생한다.

Page 45: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

이번에는 고정된 정수를 더하는 것이 아니라 사용자로부터 2개의 정수를 받아서 더

해보자. 먼저, 입력 단계에서 사용자로부터 2개의 정수를 받아서 변수에 저장한다.

다음으로, 처리단계에서 2개의정수를서로합하여변수에저장하고, 출력단계에서

변수에저장된합을화면에출력한다. 간단한프로그램이지만순서도를이용하여알

고리즘을나타내면[그림 2-22]와같다.

여기서 처음으로 사용자로부터 값을 입력받는 방법이 등장한다. 사용자로부터 정수

를입력받기위해서는 scanf()라고하는라이브러리함수가필요하다.

// 사용자로부터 입력받은 2개의 정수의 합을 계산하여 출력

#include <stdio.h>

int main(void){

int x; // 첫 번째 정수를 저장할 변수

int y; // 두 번째 정수를 저장할 변수

int sum; // 2개의 정수의 합을 저장할 변수

printf("첫번째 숫자를 입력하시오:"); // 입력 안내 메시지 출력

scanf("%d", &x); // 하나의 정수를 받아서 x에 저장

printf("두번째 숫자를 입력하시오:"); // 입력 안내 메시지 출력

scanf("%d", &y); // 하나의 정수를 받아서 x에 저장

12345678910

111213

14

add2.c

제2장 기초 사항 59

2.4 입력과 출력이 있는 프로그램

[그림 2-22]

예제 프로그램에 한 순서도

키보드로부터 값을 입력받는다.

scanf()는 스캔 에프라고

읽는다.

참고

Page 46: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

실행 결과

프로그램 설명

■scanf()

scanf() 함수는 키보드로부터 입력된 데이터를 지정된 형식으로 변환하여 변수에

저장하는 라이브러리 함수이다. scanf() 함수의 사용 방법은 printf() 함수와 매우

유사하다. 일반적인형식은다음과같다.

키보드에서정수를입력받아서변수 x에저장하는문장은다음과같다.

1 주석으로프로그램의동작설명

2 입출력라이브러리 printf()와 scanf() 함수를사용하기위한헤더파일

4 main() 함수정의

5 main() 함수몸체시작

6 사용자가입력하는첫번째숫자를저장할변수선언

7 사용자가입력하는두번째숫자를저장할변수선언

8 두개의숫자의합을저장할변수선언

10 사용자가숫자를입력하도록안내메시지출력

11 사용자로부터숫자를받아서변수에저장

13 사용자가숫자를입력하도록안내메시지출력

14 사용자로부터숫자를받아서변수에저장

15 두개의숫자를더하고그합을 sum에저장

16 두개의숫자의합을출력

18 main() 함수결과값반환

19 main() 함수몸체끝

첫번째 숫자를 입력하시오: 10두번째 숫자를 입력하시오: 20두수의 합: 30

sum = x + y; // 변수 2개를 더한다.

printf("두수의 합: %d", sum); // sum의 값을 10진수 형태로 출력

return 0; // 0을 외부로 반환

}

1516171819

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0260

scanf(형식 제어 문자열, &변수1);

scanf("%d", &x);

형식

Page 47: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

첫 번째 인수인 "%d"는 형식 지정자로써 어떤 유형의 데이터를 받을 것인지를 지정

한다. "%d"는정수형을나타내는데, printf()에서의형식지정자와그의미가같다.

두번째인수인 &x는입력을받을변수를나타낸다.

변수이름앞에 &(앰퍼샌드)기호가있다는것에유의하여야한다. 조금어려운이

야기지만 변수는 메모리에 저장되고 각각의 변수는 주소를 가지고 있다. 변수 이름

앞에 &를 붙이면 변수의 주소를 의미한다. 예를 들어, &x라고 쓰면 이것은 변수 x의

주소이다. scanf()는 printf()와 달리 변수에 값을 저장하여야 하기 때문에 변수의

주소를받아야한다. 인터넷에서제품을구입하고집으로배달시키려면쇼핑몰에구

매자의주소를가르쳐주어야하는것과비슷하다. 다시말해, scanf()가키보드에서

값을받은다음, 이것을변수에저장하려면변수의주소가있어야하는것이다. 현재

는 scanf()를 사용하려면 변수 이름 앞에 반드시 & 기호를 붙여야 한다는 것으로 알

아두자.

scanf()가 호출되면 컴퓨터는 사용자가 숫자 입력을 마칠 때까지 기다린다. 사용자

가 정수를 입력하고 엔터키를 누르면 비로소 정수가 변수에 저장되어서 scanf() 호

출이 끝난다. 위의 프로그램에서는 두 개의 정수를 사용자로부터 받는데 거의 같은

동작을되풀이한다. 다만정수가저장되는변수만달라진다.

일반적으로사용자한테서값을입력받기전에안내메시지를출력하고 scanf()를

이용하여 값을 읽는다. 이러한 방식은 컴퓨터와 사용자 간의 상호 화적인 동작을

수행하도록한다.

printf("첫번째 숫자를 입력하시오:");scanf("%d", &x);

scanf("%d", &x);

제2장 기초 사항 61

[그림 2-23]

데이터를 키보드에서 받아서

변수에 저장하기 위해서는

scanf()가 변수의 주소를 알

아야 한다.

Page 48: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

scanf()의 형식 지정자는 부분이 printf()와 같다. 예를 들어서 실수를 입력받으

려면형식지정자로 %f를사용해야한다.

여기서 ratio는 float형의 변수로 선언되었다. 하지만 double형을 입력받으려면

%lf를사용해야한다. %lf만제외하면모든형식지정자는 printf()와유사하다.

만약 한 번에 여러 개의 입력 값을 받으려면 다음과 같이 하면 된다. 여기서도

printf()와마찬가지로형식지정자의타입과변수의타입은일치하여야한다.

double scale = 0.0;scanf("%lf", &scale);

float ratio = 0.0;scanf("%f", &ratio);

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0262

[그림 2-24]

scanf()의 동작

Q printf(), scanf()는라이브러리 함수이다. C 컴파일러는 많은라이브러리 함수

들을 제공한다고 하 다. 그러면 프로그래머는 어떤 라이브러리 함수들이 제공되

는지알수있을까?

A C에서 제공하는 라이브러리들은 개 표준화되어 있다. 따라서 이 책에서 사용하는

함수들은 어떤 C 컴파일러에서도 사용이 가능한 것들이다. 지원되는 라이브러리들

의 목록은 컴파일러의 HELP 파일에서 찾을 수 있다. 이 책에서는 부록에 수록되어

있다. 라이브러리에서 제공하는 함수들은 최 한 활용하는 편이 좋다.

Page 49: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

여기서 형식 지정자가 %C인 경우를 제외하면 scanf()는 모든 여백을 건너뛴다. 즉,

스페이스나탭, 줄바꿈은무시한다.

■오류의종류

프로그램을 작성하는 과정에는 많은 오류들이 발생할 수 있다. 오류가 없는 완벽한

프로그램을 만드는 것은 생각보다 매우 어렵다. 여러분들이 구입한 휴 폰 안에 내

장된 프로그램들이 얼마나 많은 오류를 일으켰는지를 생각해보자. 오류를 발생하는

시간에따라서나누어보면다음과같다.

●컴파일시간오류: 부분문법적인오류

●실행시간오류: 실행되는도중에발생하는오류

●논리오류: 논리적으로잘못되어서결과가의도했던 로나오지않는오류

오류를삼각성의정도에따라서나누어보면다음과같다.

●에러(error): 컴파일, 링크가불가능한심각한오류

●경고(warning): 컴파일, 링크가가능하고실행도가능하나잠재적인문제를일으

킬수있는경미한오류

경고의 경우, 수정하지 않아도 문제가 없는 경우가 종종 있지만 가능하면 경고 메시

지도나타나지않도록프로그램을작성하여야한다.

제2장 기초 사항 63

2.5 오류 수정 및 디버깅

[그림 2-25]

오류의 종류

형식지정자를 %c로하면엔

터키도 하나의 문자로 받을

수있다.

참고

Page 50: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■예제

가장 많이 하는 실수 중의 하나인 문장의 끝에 세미콜론을 생략한 경우를 살펴보자.

위의소스를컴파일하면다음과같은에러메시지가표시된다.

실행 결과

일반적으로에러메시지에는다음과같은정보가출력된다.

●에러가발견된파일의이름

●에러가발견된라인의번호

●발견된에러의내용(설명)

문장의 끝에 세미콜론을 생략한 경우, [그림 2-26]과 같은 에러 메시지가 발생한다.

에러메시지를보면 7번째라인의 return 앞에 ;을빠뜨렸다는것을알수있다.

1>------ 빌드 시작: 프로젝트: test, 구성: Release Win32 ------1>컴파일하고 있습니다...1>error.cpp1>.\error.cpp(7) : error C2143: 구문 오류 : ';'이(가) 'return' 앞에 없습니다.

1>빌드 로그가 "file://c:\source\error\error\Release\BuildLog.htm"에 저장

되었습니다.

1>test - 오류: 1개, 경고: 0개========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========

/* 에러가 발생하는 프로그램*/#include <stdio.h>

int main(void){

printf("Hello World!\n")return 0;

}

12345678

error.c

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0264

Q 경고메시지를무시하면어떤일이발생하는가?

A 경고 메시지에 따라 어떤 것은 무시해도 좋다. 그러나 부분의 경우, 잘못된 부분이

있기때문에발생하는것이므로반드시경고메시지가나오지않도록소스를수정하

는 것이 중요하다. 비주얼 C++에서는 경고 메시지의 수준을 설정할 수 있도록 되어

있다. 초보자인 경우에는 경고 메시지의 수준을 낮추어 놓는 것도 좋은 방법이다. 수

준을 낮추어 놓으면 매우 사소한 오류도 볼 수 있다.

문장의 끝에 세미콜론이 빠져 있다.

[그림 2-26]

에러 메시지

7번째 라인에서 오류

Page 51: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

■‘연봉계산’프로그램

조금더복잡한문제를다루어보자. 10년동안월급을모두저금할경우, 얼마나모을

수있는지를계산하는프로그램을작성해보자. 먼저사용자에게월급의액수를입력

받는다. 월급에 12를곱하여연봉을계산하고다시여기에 10을곱하여 10년동안저

축할수있는금액을계산한다.

실행 결과

월급을 입력하시오: 20010년 동안의 저축액: 24000

/* 저축액을 계산하는 프로그램 */#include <stdio.h>

int main(void){

int salary; // 월급

int deposit; // 저축액

printf("월급을 입력하시오: ");scanf("%d", &salary);

deposit = 10 * 12 * salary;

printf("10년 동안의 저축액: %d\n", deposit);

return 0;}

1234567891011121314151617

deposit.c

제2장 기초 사항 65

1. 오류를 심각성의 정도에 따라 분류하여보자.

2. 작성된 프로그램이 C언어의 문법을 지키지 않았으면 어떤 오류에 속하는가?

중간점검

2.6 응용 프로그램

입력 단계

처리 단계

출력 단계

Page 52: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

프로그램 설명

■‘원의면적구하기’프로그램

앞에서 배운 프로그램의 구성 요소들을 이용하여 새로운 프로그램을 작성하여보자.

사용자로부터원의반지름을입력받고, 이원의면적을구한다음, 화면에출력한다.

역시 입력 단계, 처리 단계, 출력 단계로 구성되어 있다. 원의 면적을 구하려면 실수

형 계산을 하여야 한다. 따라서 실수형 변수를 선언하여 사용하여보자. 본격적인 변

수와자료형에 한논의는다음장에서하게된다.

/* 원의 면적을 계산하는 프로그램*/#include <stdio.h>

int main(void){

float radius; // 원의 반지름

float area; // 면적

printf("반지름을 입력하시오: ");scanf("%f", &radius);

area = 3.14 * radius * radius;

printf("원의 면적: %f\n", area);

return 0;}

1234567891011121314151617

circle.c

1 주석으로프로그램의동작설명

2 입출력라이브러리 printf()와 scanf() 함수를사용하기위한헤더파일

4 main() 함수정의

5 main() 함수몸체시작

6 월급을저장할변수선언

7 저축액을저장할변수선언

9 사용자가월급을입력하도록안내메시지출력

10 사용자로부터 월급을 받아서 변수 salary에 저장, 여기서 정수 형식으로 입력받는

다. 형식 지정자 %d는 정수 형식을 나타낸다. scanf() 함수를 호출할 때는 변수의 이

름앞에 &를적는것을잊지말자.

12 10년 동안의 저축액을 구한다. C에서 곱셈 연산자는 *이다. 10년*12달*월급으로 계

산한다.

14 10년동안의저축액을출력한다. 정수형변수의값을출력하여야하므로형식지정자

로 %d가사용되었다.

16 main() 함수결과값반환

17 main() 함수몸체끝

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0266

Page 53: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

실행 결과

프로그램 설명

1 주석으로프로그램의동작설명

2 입출력라이브러리 printf()와 scanf() 함수를사용하기위한헤더파일

4 main() 함수정의

5 main() 함수몸체시작

6 원의반지름을저장할변수선언

7 원의면적을저장할변수선언

9 사용자가원의반지름을입력하도록안내메시지출력

10 사용자로부터원의반지름을받아서변수 radius에저장, 여기서실수형식으로입력

받는 것에 주의하라. 형식 지정자 %f는 실수 형식을 나타낸다. scanf() 함수를 호출

할때는변수의이름앞에 &를적는것을잊지말자.

12 원의면적을구한다. C에서곱셈연산자는 *이다. 3.14는원주율을나타낸다. 원의면

적을 구하는 공식은 rr 2이지만 C에서는 특별히 거듭제곱을 구하는 연산자는 없다.

따라서곱셈을두번해주어야한다.

14 원의 면적을 출력한다. 실수형 변수의 값을 출력하여야 하므로 형식 지정자로 %f가

사용되었다.

16 main() 함수결과값반환

17 main() 함수몸체끝

반지름을 입력하시오: 5.0원의 면적: 78.500000

제2장 기초 사항 67

Page 54: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

Q 왜 C언어의주석은중첩하여서쓸수없는가?

A C언어의 주석은 PL-1이라는 언어에서 그 형식을 빌려왔기 때문이다. 주석이 들

어 있는 코드 전체를 주석 처리하고 싶으면 뒤에서 학습하게 될 #if 0와 #endif

라는전처리지시자를사용하여야한다.

#if 0int timer; /* 타이머를 나타내는 변수 */...#endif

Q 주석을많이사용하면프로그램의크기가늘어나는가?

A 주석은컴파일단계에서모두제거된다. 따라서주석의양과오브젝트코드의크

기와는전혀상관이없다. 주석은실행 파일에아무런 향을끼치지않는다. 주

석은순수하게프로그램을읽는사람들을위한것이다.

Q 소스 코드 안의 단어 사이의 공백과 문장과 문장 사이의 빈 줄은 어떤 역할을 하

는가?

A 소스코드안의공백이나빈줄은프로그램의실행결과에아무런 향을끼치지

않는다. 이것도주석과마찬가지로프로그램을읽기쉽게하기위하여사용된다.

Q 프로그램을작성할때한줄에반드시하나의문장만있어야되는가?

A 많은 개발자들이 한 줄에 보통 하나의 문장만을 두지만 꼭 그럴 필요는 없다. 다

음과같이한줄에여러개의문장을놓는것도가능하다.

int x; int y; int sum;

컴파일러는 ;만 있으면 하나의 문장으로 인식한다. 다만 가독성을 위해서는 한

줄에하나의문장만두는것이바람직하다.

Q 비주얼 C++에서자동으로소스를정리하여주는자동포매팅기능이있는가?

A 먼저자동포매팅하고싶은소스 역을마우스로선택하고 Edit→ Advanced→

Format Selection(Alt+F8)을 선택하면 전문가가 포맷하는 것처럼 소스를 자동

으로들여쓰기한다.

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0268

Q & A

Page 55: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

Q 왜 scanf()를사용할때는변수이름앞에 &를붙여야하는가?

A 본문에서도설명하 지만 scanf() 함수가변수를받아서변수안에값을저장하

기 위해서는 반드시 변수의 메모리 주소가 필요하다. 변수의 주소는 바로 변수

앞에 &를 붙이면 된다. 택배를 이용하여 물건을 배달시키기 위해서는 받는 사람

의주소가필요한것과마찬가지라고생각하자.

제2장 기초 사항 69

Page 56: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

1. _______은 프로그램의 동작을 설명하는 로써 프로그램의 가독성을 높이기 위

한것이다.

2. 함수의 이름을 적어서 함수 안에 들어 있는 문장들을 수행시키는 것을 _______

(calling)이라고한다.

3. _______은코드의일부분이들어있는텍스트파일로 .h의확장자를가진다.

4. _______이란데이터의종류(타입)를말한다. 정수형, 실수형, 문자형등이있다.

5. _______은 "Hello"처럼따옴표안에문자들을나열한것이다.

6. _______은줄바꿈을나타내는특수문자이다.

7. _______은 printf()에서변수의값을 10진정수형식으로출력할것을지시한다.

8. _______문장은함수를종료하고결과값을반환하는문장이다.

9. _______함수는 키보드에서 데이터를 받아서 지정된 형식으로 변환시켜주는 라

이브러리함수이다.

10.변수에값을넣는연산을 _______연산이라고한다.

11. 프로그램언어에서특별한의미로사용되는예약된단어들을 _______라고한다.

12.다음중 C 프로그램에 하여잘못설명한것을모두고르면? ( )

① C 프로그램은적어도하나의함수를가진다.

② C 프로그램에서반드시있어야하는함수는 main()이다.

③적어도하나의변수는반드시선언하여야한다.

④반드시 stdio.h를포함하여야하는것은아니다.

13.주석에 하여잘못설명한것은? ( )

①주석은어디에나붙일수있다.

②주석이많아지면실행파일의크기가커진다.

③주석은 /*로시작하여 */로끝난다.

④ C언어에서도 // 스타일의주석을사용할수있다.

14.다음중 C에서지원하는자료형의이름이아닌것은? ( )

① char ② long ③ integer ④ float

15. printf() 함수에서정수형변수를출력하는데사용되는형식지정자는? ( )

① %i ② %d ③ %n ④ %f

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0270

Exercise

Page 57: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

16.변수에관한설명으로올바르지않은것을모두고르면? ( )

①변수는함수안이면어디서나선언할수있다.

②변수의이름을지을때키워드와동일하게하면안된다.

③변수는선언과동시에초기값을줄수도있다.

④변수는밑줄문자(_)로시작할수도있다.

17. 함수에관한설명으로올바르지않은것은? ( )

①함수안의문장들은호출(call)을해야만이실행된다.

② C언어의함수중에서가장먼저실행되는함수는 main()이다.

③ printf()나 scanf()도함수이다.

④함수안에다른함수가포함될수있다.

18.다음코드에주석을붙여라. 아래코드가하는일은무엇인가?

19.다음코드는인치를mm로변환하는프로그램이다. 빈칸을채워라.

/* 첫 번째 프로그램의 응용 */#include ___________int main(void){

float inch, mm;printf("인치단위로 입력:");scanf("%f", ____________);mm = inch * 25.4;printf("%f 인치 = %f mm", inch, mm);return 0;

}

#include <stdio.h> //______________________________________________

int main(void) //______________________________________________{

int x, y; //______________________________________________

scanf("%d %d", &x, &y); //________________________________printf("덧셈: %d\n", x + y); //________________________________printf("뺄셈: %d\n", x - y); //________________________________printf("곱셈: %d\n", x * y); //________________________________printf("나눗셈: %d\n", x / y); //________________________________return 0; //________________________________

}

제2장 기초 사항 71

Page 58: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

20.잠시 컴파일러가 되었다고 가정하자. 다음 소스 파일이 컴파일되어 실행되는 것

인지를말하고, 컴파일이되지않는다면어디가문제인지오른쪽빈칸에적어라.

/ * 첫 번째 프로그램 * / ____________________________

#include stdio,h ____________________________

integer main(void) ____________________________

{ ____________________________

int x ____________________________

x = 20; ____________________________

print(현재 x의 값은 %d입니다. ); ____________________________

return 0; ____________________________

} ____________________________

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0272

Page 59: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

1. 사용자로부터세개의정수를입력받은후, 평균값을계산하여화면에출력하는

프로그램을작성하여보자.

먼저 문제를 해결하는 알고리즘을 순서도를 사용하여 작성하여보자. 순차적인

처리만을이용하면된다. 빈칸을채워라.

정수를 입력하시오: 10정수를 입력하시오: 20정수를 입력하시오: 30

평균은 20입니다.

제2장 기초 사항 73

Programming

Page 60: C 01 프로그래밍소개–¸어...그렇다면알고리즘은어떻게기술하는것이좋을까? 물론우리말로기술할수도있 고아니면영어로기술할수도있다

다음단계는순서도를프로그램으로변환한것이다. 빈칸을채워라.

입력은 scanf() 함수를사용하고출력은 printf() 함수를사용하면된다.

2. 센티미터를 인치로 변환하는 프로그램을 작성하여보자. 프로그램의 입력과 출

력은다음과같다.

3. 온스로 표시된 무게를 그램으로 변경하는 프로그램을 작성하여보자. 1온스는

28.3그램이다.

4. 달의중력은지구의약17%라고한다. 자신의몸무게를입력받아서달에서의몸

무게를계산하는프로그램을작성하여보자.

몸무게를 입력하시오: 70 달에서의 몸무게는 16kg입니다.

온스를 입력하시오: 3.8 3.8온스는 ____그램입니다.

센티미터를 입력하시오: 2.542.54cm는 1인치입니다.

#include <stdio.h>int main(void){______________________________; // 정수 변수 x, y, z, avg 선언

printf("정수를 입력하시오: "); // 사용자에게 안내 메시지 출력

scanf("%d", &x); // 첫 번째 정수를 x로 읽어들인다.______________________________; // 사용자에게 안내 메시지 출력

______________________________; // 두 번째 정수를 x로 읽어들인다.______________________________; // 사용자에게 안내 메시지 출력

______________________________; // 세 번째 정수를 x로 읽어들인다.______________________________; // 평균 계산

printf("평균은 %d입니다.\n", avg); // 평균 출력

return 0;}

누구나 쉽게 즐기는 C언어 콘서트

CHAPTER 0274