-
변수
1.1 변수의 정의
변수 : 변할 수 있는 수, 상수의 반대 개념, 수치, 문자열, 포인터 같은 좀 더 복잡한 값도 저장 (한마디로 데이터 저장)
주기억 장치(RAM)의 역할 : 메모리에 기록된 값을 처리하여 입출력
컴퓨터는 연산 대상 메모리의 위치를 구분하기 위해 숫자로 된 번지(Address)라는 개념을 사용
숫자로 된 번지에 별도의 이름을 붙여 놓은 것이 변수
- 의미를 잘 설명할 수 있는 이름을 주는 것이 좋다.(구분하기 쉽다.)
- 변수명의 길이에 제약이 없지만 3~10자 내외로 작성하는 것이 좋다.
- 대소문자 구성을 일관되게 하는 것이 좋다.
- 짧은 영어 단어를 활용한다.
1.2 변수의 종류
구분 |
타입 |
설명 |
기본형 |
정수형 문자형 실수형 열거형 void 형 |
정수 문자 실수 가능한 값들에 대한 나열형 타입이 정해지지 않은 자료형 |
유도형 |
배열 구조체 공용체 포인터 함수형 |
같은 타입의 자료 집합 다른 타입의 자료 집합 메모리를 공유하는 자료 집합 대상체의 번지를 가리키는 타입 함수의 번지를 가리키는 타입 |
1.3 변수의 선언
타입 변수명=초기값,변수명, 변수명, ….;
-
입출력
2.1 printf
printf("서식문자열", 인수, 인수,….);
-
예제 (printf1)
#include <Turboc.h>
void main()
{
int value = 12;
char ch='s'
printf("값은 %d 이며 문자는 %c이다 \n", value, ch);
}
서식 |
의미 |
설명 |
%d 또는 %i %o %x 또는 %X %u %c %s %f %e 또는 %E %g 또는 %G %p %n %% |
Decimal, Integer Octal heXadecimal Unsigned Character String Float
Pointer
|
10진 정수로 출력한다. 문자열을 출력 고정 소수점 형식의 실수로 출력 부동 소수정 형식의 실수로 출력 %e, %f 중 더 짧은 형식으로 출력 포인터의 번지값을 출력 출력된 문자 개수를 포인터 변수에 대입 % 문자 자체를 출력 |
-
예제 (printf2)
#include <Turboc.h>
void main(void)
{
int num=23;
printf("-->%d<--\n", num);
printf("-->%5d<--\n", num);
printf("-->%05d<--\n", num);
printf("-->%-5d<--\n", num);
}
-
예제 (printf3)
#include <Turboc.h>
void main(void)
{
double pie=3.14;
printf("-->%f<--\n", pie);
printf("-->%10f<--\n", pie);
printf("-->%.2f<--\n", pie);
printf("-->%10.2f<--\n", pie);
printf("-->%010.2f<--\n", pie);
printf("-->%-10.2f<--\n", pie);
}
정수 : %[-][0][총자리수]d
실수 : %[-][0][총자리수][.소수점 이하 자리수]f
2.2 scanf
데이터를 입력 받아 변수에 저장
scanf("서식문자열, &변수, [&변수, ….];
예제 scanf
#include <Turboc.h>
void main() { int a,b; int sum;
printf("첫 번째 숫자를 입력하세요 : "); scanf("%d", &a); printf("두 번째 숫자를 입력하세요 : "); scanf("%d", &b); sum=a+b; printf("입력한 두 수의 합은 %d입니다.\n", sum); } |
2.3 그 외의 입출력 함수들
-
clrscr()
Clear Screen의 약자, 화면을 깔끔하게 지우고 커서를 화면 좌상단으로 이동
-
gotoxy(x,y)
커서를 x축, y축으로 이동, 우하단(79,24)
#include <Turboc.h>
void main() { clrscr(); gotoxy(37,12); printf("center\n"); } |
-
wherex(), wherey()
현재 커서위치 정보 표시
gotoxy(wherex()+2, wherey()+3); // 현재 위치에서 x+2, y+3만큼 커서 이동
-
puts("문자열")
문자열만 출력
자동 개행 (개행 문자 사용시 두줄 개행)
puts(str) 변수명 입력 가능
- gets(변수)
#include <Turboc.h>
void main() { char addr[128];
printf("주소를 입력하세요 : ") ; scanf("%s", addr); printf("입력받은 주소 값은 : %s\n", addr); } |
-
putch(c)
문자 하나만 출력는 함수
-
getch()
문자 하나만 입력받는 함수
-
delay(n)
인수로 주어진 n만큼 시간을 지연시키는 함수 (1/1000초)
-
exit(0)
프로그램을 강제 종료하는 함수
-
kbhit()
키가 눌러져 있는지 아닌지만을 조사 (눌러져있으면 : 참(true))
-
setcursortype(커서형태)
괄호 안의 인수로(NOCURSOR)를 전달하면 커서가 사라짐
(NORMALCURSOR)이면 커서가 나타남
-
정수형
3.1 정의
-
정수(Integer)
부호는 있지만 소수점 이하를 표현하지 못하는 수
정수형 타입
-
타입 |
크기(바이트) |
부호 |
범위 |
int |
4 |
o |
-2147483648 ~ 2147483647 |
short int |
2 |
o |
-32768 ~ 32767 |
long int |
4 |
o |
-2147483648 ~ 2147483647 |
unsigned int |
4 |
x |
0 ~ 4294967295 |
ungsigned short int |
2 |
x |
0 ~ 65535 |
부호가 없어도 상관없다면 unsigned형을 쓰는 것이 좋다.
3.2 정수형의 길이
- 예제 overflow
#include <Turboc.h>
void main() { short a,b,c; unsigned short s,t,u;
a=20000; b=30000; c=a+b; printf ("%d+%d=%d\n",a,b,c);
s=20000; t=30000; u=s-t; printf("%d-%d=%d\n", s,t,u); } |
변수의 저장 용량을 넘어서는 현상을 오버플로우(Overflow)라고 한다
수학적인 연산을 할 때는 항상 주의하여 타입 결정 해야됨.
- 예제 int64
#include <Turboc.h>
void main() { __int64 a,b,c; a=111111111; b=111111111; c=a*b; printf("%I64d\n", c); } |
64비트 정수형 사용
3.3 정수형 상수
- 8진수 : 0으로 시작 (027, 032)
- 16진수 : 0x로 시작 (0x12a, 0x24ab)
-
실수형
4.1 종류
타입 |
바이트 수 |
범위 |
유효자리수(십진) |
float |
4 |
3.4*10-38 ~ 3.4*1038 |
7 |
double |
8 |
1.7*10-308 ~ 1.7*10308 |
15 |
long double |
10 ~ 16 |
1.2*10-4932 ~ 3.4*104932 |
19 |
부호 |
지수부 |
가수부 |
자료형 |
1bit |
8bit |
23bit |
float |
1bit |
11bit |
52bit |
double |
4.2 실수형 상수
소수부를 가지면 실수형 상수
부동 소수점 표기법 : 3.14e-1
- 예제 float
#include <Turboc.h> void main() { double d; d=123.456;
printf("고정 소수점 : %f\n", d); printf("부동 소수점 : %e\n", d); printf("일반형 : %g\n", d); } |
-
문자형
5.1 문자
문자 하나를 표현하는 자료형
컴퓨터는 숫자밖에 모르기 때문에 문자도 숫자로 기억
아스키(ASCII)코드 방식을 많이 사용
타입 |
크기(바이트) |
부호 |
범위 |
signed char |
1 |
o |
-128~127 |
unsigned char |
1 |
x |
0~255 |
- 예제 charcontext
#include <Turboc.h>
void main() { char ch; ch='A'; putch(ch); } |
5.2 확장열
키보드로 직접 입력할 수 없는 문자들을 표현
확장열 |
코드 |
설명 |
\a |
0x07 |
벨 소리 |
\b |
0x08 |
백 스페이스 |
\t |
0x09 |
탭 |
\n |
0x0a |
개행 |
\x## |
0x## |
16진 코드 |
\### |
0### |
8진 코드 |
\\ |
0x5c |
백슬레쉬 |
\' |
0x27 |
홀따옴표 |
\" |
0x22 |
겹따옴표 |
\? |
0x3f |
물음표 |
5.3 문자열(String)
일련의 문자가 연속되어 있는 것이며 문자의 집합
겹따옴표로 감싸서 표현 ("문자열")
배열을 선언하고 배열에 문자열 상수를 저장
char str[6]="korea";
k |
o |
r |
e |
a |
\0 |
5.4 3중 문자
세 개의 연속된 문자를 하나의 문자로 대체하는 표현
3중문자 |
대체문자 |
??= |
# |
??' |
^ |
??( |
[ |
??< |
{ |
??- |
~ |
??/ |
\ |
??! |
| |
??) |
] |
??> |
} |
- 예제 Trigraph
??=include <Turboc.h>
void main() ??< int ar[5]=??<1,2,3,4,5??>; printf("Trigraph Test ??=1. num is %d\n", ar??(1??)); ??> |
-
열거형(enum)
6.1 정의
변수가 가질 수 있는 가능한 값들을 나열해 놓은 타입
enum {멤버, 멤버, ....) 변수;
enum {EAST, WEST, SOUTH, NORTH} mark;
-
열거형의 장점
- 기억이 용이하다
- 소스의 가독성이 높아진다.
- 정수형보다 안전하다.
6.2 태그(tag)
열거형 타입에 대해 붙여지는 이름을 태그(tag)라고 함
int, double과 마찬가지로 타입의 자격을 가진다
-
태그 선언 형식
enum 태그명 {멤버, 멤버, ...};
enum fruit {APPLE, ORANGE, BANANA };
- 예제 enum
#include <Turboc.h>
void main() { enum fruit {APPLE, ORANGE, BANANA}; fruit a; a=ORANGE; printf("a=%d\n", a); } |
-
유도형의 소개
기본형의 조합에 의해 만들어지는 타입
기본형 변수 여러 개를 모아서 또는 기본형을 약간 변형하여 만들어지는 타입
7.1 배열 (Array)
동일한 타입을 가지는 자료들의 집합
배열을 구성하는 각 개별 변수를 요소(Element)라고 함
-
배열 선언 형식
타입 배열명[크기][크기]...;
- 타입 : 배열의 요소가 어떠한 값을 담는지 지정 (int, char, double, 유도형, 사용자타입)
- 배열명 : 변수명과 동일, 명칭 규칙에 맞게 작성
- 크기 : 요소의 개수가 몇개인가를 [ ] 괄호 안에 상수로 지정 (1개 : 1차원배열, 2개이상 : 다차원배열)
int array[5] ;
array[0] |
array[1] |
array[2] |
array[3] |
array[4] |
- 예제 Array
#include <Turboc.h>
void main() { int score[5]; int i; int sum=0;
for (i=0; i<5; i++) scanf("%d", &score[i]); for (i=0; i<5; i++) sum=sum+score[i]; printf("%d", sum); } |
7.2 구조체 (Struct)
서로 다른 타입의 집합
공용체(Union)과 유사하지만 멤버끼리 기억 공간을 같이 공유한다는 점이 다르다
-
구조체 선언 형식
struct {
멤버 목록
} 변수명;
- 예제 Struct
#include <Turboc.h>
void main() { struct { char name[10]; int age; double height; } friend;
friend.age=28; printf("%d\n", friend.age); } | ||
name |
age |
height |
10byte |
4byte |
8byte |
7.3 포인터
포인터형은 번지를 기억한다는 점에서 일반적인 변수와 조금 다르다.
데이터가 보관되어 있는 메모리 위치를 기억하고 있기 때문에 직접 값을 조작할 수도 있고, 주변의 다른 값까지도 손댈 수 있다.
-
포인터 선언
타입 *변수명;
int *pi;
* : 포인터가 가리키는 번지의 값을 읽는다.
& : 변수가 기억되어 있는 메모리 번지를 읽는다.
- 예제 Pointer
#include <Turboc.h>
void main() { int num=629; int *pi;
pi=# printf("num 의 값은 %d입니다.\n", *pi); } |
-
포인터라는 간접적인 방법을 사용하는 이유
한 단계 더 중간 과정을 거치게 되면 그 과정에서 유용한 조작이 가능하기 때문
중간과정 = 레이어
- 예제 Pointer2
#include <Turboc.h>
void main() { double num1, num2; double *pd;
num1=3.14; pd=&num1; num2=*pd; printf("num2의 값은 %f입니다.\n", num2); } |
7.4 사용자 정의형
-
사용자 정의형 타입 기본 형식
typedef 타입정의 타입이름 ;
typedef int jungsoo; // int형에 대한 단순한 별명을 만듬, int i;==jungsoo i;
typedef enum{true, false} bool;
typedef int *pint;
typedef int arint[10];
typedef struck {int a; double b;} myst;
7.5 논리형
참 또는 거짓 둘 중의 하나의 값을 가지는 타입
'책정리 > 혼자 연구하는 C,C++ 1' 카테고리의 다른 글
5장 연산자 (0) | 2015.02.19 |
---|---|
4장 제어문 (0) | 2015.02.18 |
2장 첫 번째 예제 (0) | 2015.02.18 |
1장 프로그래밍 입문 (0) | 2015.02.17 |
목차 (0) | 2015.02.17 |