변수
C는 다양한 데이터 타입을 제공한다. 프로그래밍의 가장 기본적인 도구이다.
- 변수의 정의
변할 수 있는 수, 즉 고정되어 있지 않은 수라는 뜻
변수명을 작성하는 법칙
의미를 잘 설명할 수 있는 이름
변수명의 길이에는 제약이 없지만 3~10자 내외로 작성하는 것이 좋음
대소문자 구성을 일관되게 하는 것이 좋음
변수명은 보통 짧은 영어 단어를 활용
- 변수의 종류
변수는 메모리 위치를 기억한다. 그러나 실제로 컴파일러가 변수를 참조할 때는 메모리 번지를 참조하는 것이 아니라 번지에 기억된 값을 참조한다.
- 변수의 선언
선언이란 컴파일러에게 앞으로 어떠한 이름을 가진 어떤 타입의 변수를 사용하겠으니 준비해 달라고 부탁하는 것
입출력
입출력을 통해 변수의 값을 확인하거나 처리 결과가 어떻게 나오는지 보기위해 입출력 명령을 사용할 수 있어야 함
- printf
printf의 구조
printf에서 사용할 수 있는 서식들
- scanf
scanf 구조
- 그 외의 입출력 함수들
clrscr() :
Clear Screen의 약자이며 이름 그대로 화면을 깔끔하게 지우고 커서를 화면 좌상단으로 옮김
gotoxy(x, y) :
콘솔 화면은 일반적으로 가로로 80개의 문자를 표시할 수 있고 세로로 25줄을 출력할 수 있음. 콘솔은 80*25의 바둑판 같은 좌표 공간이라고 할 수 있는데 각 위치는 x축과 y축의 좌표를 가짐. gotoxy 함수는 커서의 위치 즉, 다음 문자열이 출력될 좌표값을 바꿈
wherex(), wherey() :
gotyxy가 화면의 현재 위치를 바꾸는데 비해 이 두 함수는 화면의 현재 위치를 조사함.
puts("문자열") :
puts 함수는 문자열만 출력할 때 사용한다. printf로도 문자열을 출력할 수 있지만 puts는 서식을 다루지 않기 때문에 훨씬 더 간편하며 속도도 빠르다는 장점이 있음.
gets(변수) :
gets 함수는 문자열을 입력받아 인수로 주어진 변수에 저장하는데 gets(str)은 scanf("%s",
str)과 유사함.
putch(c) :
문자 하나만 출력하는 함수.
getch() :
getch 함수는 문자 하나만 입력받음.
delay(n) :
이 함수는 출력 함수는 아니지만 출력과 관계가 있음. 인수로 주어진 n만큼 시간을 지연시키는데 1/1000초 단위로 아무 것도 하지 않고 대기함.
exit(0) :
프로그램을 강제로 종료함.
kbhit() :
키보드의 키가 눌러져 있는지 아닌지만을 조사함. 눌러져있으면 true값을 리턴하고 그렇지 않을 경우에는 false값을 리턴함.
setcursortype(커서형태) :
콘솔창에서는 주로 문자를 입출력하는데 다음 입출력될 위치는 커서가 가리킴.
정수형
- 정의
정수란 부호는 있지만 소수점 이하를 표현하지 못하는 수임.
- 정수형의 길이
수학의 정수는 음양으로 무한대의 값을 표현할 수 있지만 유한한 메모리를 가진 컴퓨터는 이런 무한한 값을 표현하지 못하며 자신에게 할당된 메모리양만큼의 값만 기억할 수 있음.
- 정수형 상수
간단하게 아라비아 숫자와 부호로 직접 그 값을 표기하면 됨.
실수형
- 종류
실수란 소수점 이하를 가지는 수이며 정수보다는 한 단계 더 확장된 범위를 포괄함.
형태
- 실수형 상수
소수부를 가지면 실수형 상수로 인식됨. 실생활에서 직접 사용하는 표기법임.
문자형
- 문자
문자형이란 문자 하나를 표현하는 자료형임. 컴퓨터는 원래 숫자밖에 모르기 때문에 문자도 숫자로 기억함. 이때 인코딩 방식이 있는데 통상 아스키 코드 방식을 많이 사용함.
char 종류
- 확장열
따옴표 안에 직접 입력할 수 없는 문자가 있음.(ex : 개행코드)
- 문자열
문자열은 일련의 문자가 연속되어 있는 것이며 문자의 집합이 곧 문자열임. 사람의 이름이나 에러 메시지 등과 같은 일반적인 문장을 문자열이라고 함.
- 3중 문자
3중 문자란 세 개의 연속된 문자를 하나의 문자로 대체하는 표현임.
열거형
- 정의
열거형이란 변수가 가질 수 있는 가능한 값들을 나열해 놓은 타입임. 어떤 변수가 가질 수 있는 값의 종류가 일정한 범위로 정해져 있다면 정수형 대신 열거형을 쓰는 것이 더 편리함.
장점
기억이 용이함
소스의 가독성이 높아짐
열거형은 정수형보다 안전
- 태그
열거형은 내부적으로 정수형으로 처리되지만 값의 범위가 엄격하게 정해지는 별도의 타입임. 그래서 열거형 타입을 먼저 정의하고 이 타입으로부터 변수를 선언하는 방법이 더 많이 사용됨.
유도형의 소개
유도형은 기본현의 조합에 의해 만들어지는 타입들이며 기본현 변수 여러 개를 모아서 또는 기본형을 약간 변형하여 만들어지는 타입
- 배열
배열은 가장 흔한 자료 구조이면서 또한 가장 실용적임.
배열 선언의 예
int array[5]; // 정수형 변수 5개의 집합인 배열 array를 선언
배열의 메모리상 구조
- 구조체
동일한 타입의 집합인 배열과는 달리 구조체는 서로 다른 타입의 집합임. 이때 구조체에 속하는 개별 변수들을 멤버라고 함. 정수형 변수와 실수형, 문자형 등의 기본형 변수뿐만 아니라 배열이나 구조체 같은 큰 변수도 멤버가 될 수도 있음.
구조체의 예
구조체의 메모리상 구조 예
- 포인터
정수형이나 실수형의 일반적인 변수들은 수치값을 저장함. 이에 비해 포인터형은 번지를 기억한다는 면에서 일반적인 변수와는 조금 다름. 데이터가 보관되어 있는 메모리 위치를 기억하고 있기 때문에 직접 값을 조작할 수도 있고 주변의 다른 값까지도 손댈 수 있음. 또한 위치는 단순히 4바이트의 번지이기 때문에 함수의 인수로 전달하거나 받기도 효율적이며 함수로 포인터를 전달하면 포인터가 가리키는 메모리를 함수가 직접 조작하는 것이 가능함.
- 사용자 정의형
언어가 지원하는 데이터 타입이 아무리 풍부해도 프로그램의 특수한 요구를 다 수용할 수는 없음. 그래서 C는 기존 타입들로부터 사용자가 새로운 타입을 정의하는 방법을 제공함.
사용자 정의형 기본 형식
- 논리형
논리형은 참 또는 거짓 둘 중의 하나의 값을 가지는 타입임. C 문법은 논리형을 별도의 기본형 타입으로 인정하지 않는데 그래서 C 컴파일러들은 열거형이나 사용자 정의형으로 논리형 타입인 BOOL을 만들어서 사용함.
논리형 선언의 예