|
|||||||||||||||||||||
앞서 살펴본 프로그램
예제들은 변수 선언시나 배정문을 통해서 변수에 특정 초기값을 설정하였다. 그러나 변수에 대한 초기 값을 사용자가 프로그램 실행시에
제공할 수 있다. C 언어는 이를 위해서
scanf() 함수를 제공한다. scanf() 함수의 형태는 printf() 함수의 형태와 유사하다. 다음은 scanf() 함수의 예이다.
scanf() 함수에서 첫 번째 인자는 제어 스트링이다. 제어 스트링은 printf()와 마찬가지로 형식 코드를 포함한다. 위에서 형식 코드 %d는 다음번째 인자 &n에 대응된다. 형식 코드의 역할은 사용자 입력한 값을 해석하는 방식을 알려준다. 위의 scanf() 함수는 사용자가 입력한 값을 십진수 정수로 해석하여, 그 결과를 n의 변수에 저장한다. &n에서 &는 주소 연산자로서 변수 n에 대해서 할당되어 있는 기억공간의 주소를 반환하는 주소 연산자(address operator)이다. 주소 연산자는 포인터를 다루는 11주차 강의에서 자세히 다룬다. 여러분이 키보드를 통해서 프로그램에 값을 입력할 때, 입력된 값은 문자들의 시퀀스(sequence)이고, 이것이 프로그램에 전달된다. 이러한 문자 시퀀스를입력 스트림(input stream)이라 한다. 가령, 사용자가
키보드 상에서 1, 2, 3의 키를 순차적으로 눌렀을 때, 입력 스트림은 ('3', '2', '1')로 구성된다.
즉, 가장 먼저 누른 키 값이 입력 스트림의 가장 오른쪽에 위치하고, 다음에 누른 키 값이 입력 스트림의 오른쪽부터 왼쪽 방향으로
순서대로 위치하는 것을 알 수 있다. scanf() 함수는 입력 스트림을 해당 형식 코드에
따라서 적절히 해석하고, 해석된 결과를 명세된 변수에 저장한다.
다음은 scanf()를 사용한 간단한 프로그램이다.
사용자로부터 값을 입력받아 그대로 화면에 출력한다.
위 프로그램의 실행 과정을 단계별로 살펴보자.
|
한 개의 scanf() 문으로 두 개 이상의 값을 입력받을 수 있다. 다음 프로그램은 두 개의 정수를 입력받아서 그 곱을 출력하는 프로그램이다.
이제 사용자는 두 개의 값을 공백으로 구분하여 연속으로 입력하면 된다. 그러면 처음 입력된 값은 n에 저장되고, 두 번째 입력된 값은 m에 저장된다. 다음은 위 프로그램의 scanf() 문의 수행 과정을
보여준다.
다음은 다양한 형식코드를 포함한 scanf()의 예이다.
위의 scanf() 수행시 사용자가 4개의 값을 공백으로 구분하여 입력하면, 입력 순서대로 값이 char, int, float, double 타입으로 해석되어 c, n, f, d이 변수에 저장된다.
따라서 한 개의 scanf()가 여러 개의 값을 입력받을 경우에, 값의 입력 순서와 제어 스트링에 나열된 형식 코드의 순서가 일치하도록 주의해야 한다.
|
2.
프로그램 예제
|
|
지금까지 프로그램 예제를 여러 개 살펴보았다. 본 강좌에서는 주어진 문제에 대한 프로그램을 문제 분석, 설계, 구현의 과정을 거쳐서 작성하였다. 여러분은 가능한 이러한 과정을 거쳐서 프로그램을 작성하는 것이 매우 중요하다. 지금은 문제가 비교적 간단하여 분석, 설계 과정을 거치지 않고 직접 구현 단계로 들어가서 프로그램을 작성할 수도 있겠지만(이 경우 분석, 설계 과정이 머리 속에서 이루어질 것이다), 문제가 복잡해지면 이러한 체계적인 문제 해결과정을 거치지 않으면 프로그램을 작성하는 것이 매우 어려워진다. 문제 해결과정에서 가장 중요한 것은 알고리즘을 설계하는 것이다. 여러분도 어느 정도 느끼겠지만, 알고리즘이 설계되면, C 프로그램 작성은 단순히 알고리즘의 각 단계를 C 언어 문장으로 번역하는 정도의 수준으로 이루어진다. 알고리즘을 잘 설계할 수 있는 방법은 없는가? 그것은
문제를 잘 분석하는 것이다. 문제 분석을 토대로, 문제의 입력과
출력을 생각하고, 입력으로부터 출력을 계산하는 과정을 단계적으로 기술하면 된다. 이러한 일련의 과정을 다양한 문제에 대해서 반복적으로
숙달함으로써 여러분은 어렵지 않게 알고리즘을 기술할 수 있는 방법을 터득할 수 있다고 본다. |
|