연산에 사용되는 두 자료 값이 서로 다른 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산하는 것이 C 컴파일러의 기본 방식이며 기억 장소의 크기가 같은 경우는 첫 번째로 char형과 short형은 int형으로 변환시키고 unsigned char형과 unsigned short 형은 unsigned형으로 변환하여 연산을 수행합니다.
두 번째로 첫 번째의 규칙을 적용시켜 변환된 자료형으로 다음과 같은 규칙을 적용시켜 작은 쪽이 큰 쪽으로 변환시킵니다.
int < unsigned < long < unsigend long < float < double
이러한 변환을 우리는 묵시적 변환이라고 합니다. 앞의 각 변수를 각각의 자료형으로 선언한 후 다음과 같은 혼합된 자료형을 연산하게 될 경우 어떤 결과가 나오는지 살펴보면 좋을 것 같습니다.
scanf() 함수
scanf() 함수는 "scan formatted"에서 온 말로 수치, 문자, 문자 열등을 지정한 서식에 따라 입력받은 함수입니다. 문자열을 입력받은 경우는 함수 gets()나 cgets()를 주로 사용하므로 scanf() 함수에서는 수치와 문자를 입력받는 것만 취급합니다. scanf() 함수는 자료를 읽어 들일 때 나타나는 탭(tab), 공백 개행(\n)에서 읽는 것을 중단합니다. 왜냐하면, 전체를 문자열로 읽어 들이지 않고 하나의 단어만을 읽어 들이기 때문입니다. 여기에서는 scanf() 함수의 사용법과 그 서식 문자열에 쓰이는 변환 문자의 종류에 대하여 설명합니다.
(1) 형식
int scanf( 제어문, arg1, arg2,...);
char * ctrl;
표준 입력에 문자를 입력하여 제어문으로 정의된 형식에 따라 문자열을 변환시켜 arg1, arg2,...로 표시되는 변숫값을 넘겨줍니다. 이 때문에 인수는 포인터여야 한다는 것이 조건입니다. 또한 정상적으로 format에 적합하게 입력한 자료의 개수를 함숫값으로 되돌려 줍니다. 기본 형식은 다음과 같습니다.
scanf("%", &x);
표준 입력 장치인 키보드로부터 % d의 형식에 맞추어서 읽어 들인 자료를 변수 x가 지정하는 기억 장소에 저장합니다.
(2) 변환 문자
sancf("% d"<- 변환 문자 , &x <- 포인터);
(3) scanf() 함수의 특징
- tab, 공백, 개행 문자는 scanf(제어문, arg1, arg2,...); 의 형식에서 제어문 내에 있을 때는 무시합니다.
- tab, 공백, 개행 문자는 키인 할 때에는 입력 항목의 구분 역할을 합니다.
- % 이외의 문자는 입력으로 입력된 탭, 공백, 개행 문자에 일치하여야 합니다.
- scanf() 함수는 정상적으로 format에 적합한 입력 자료의 개수를 함숫값으로 하여 반환합니다.
- scanf()를 사용하여 1자 입력(% c)을 반복 사용하는 경우에는 희망대로 입력 결과가 나오지 않는 경우도 있습니다.
배열(array)
변수가 선언되면 그 변수의 형(type)에 해당되는 메모리 내의 저장 영역이 확보되며, 만약 동일한 형의 여러 변수가 필요하면 그 변수는 배열로서 선언될 수 있다. 따라서 배열은 하나의 변수명에 동일형의 여러 개의 자료를 기억시킬 때 이용되며 사용되기 전에 미리 선언(declaration) 되어야 합니다.
선언된 배열은 컴파일 시 C 컴파일러에 의해 해당 기억 장소가 확보됩니다.
자료형은 배열에 기억시킬 자료가 만약 정수일 경우는 int, 문자일 경우는 char을 사용합니다. 변수명은 프로그래머에 의해 지정되는 임의의 변수로서 배 열명을 대표하며 원소의 개수는 배열의 크기를 나타내는 요소(element)로서 정수를 표기합니다.
예를 들어 int number [5];라고 선언하면 배열의 크기는 5이며, 5개의 원소를 가지는 기억 영역으로 구성됩니다. 여기서 첫 번째 원소 번호는 항상 0부터 시작하므로 마지막 원소번호는 원수 개수 -1 임을 알 수 있습니다.
2차원 배열은 1차원 배열과 같이 일련의 연속된 기억 영역이 만들어집니다. 따라서 배열의 순서는 두 개의 괄호 중에 먼저 우측 괄호 안의 원소 번호를 먼저 변화시켜 가는 방법으로 결정됩니다.
댓글