책정리/혼자 연구하는 C,C++ 1

3장 변수

GONII 2015. 2. 18. 20:46
  • 변수

    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진 정수로 출력한다.
8진 정수로 출력한다.
16진 정수로 출력한다. 대문자 X를 쓰면 A~F까지의 숫자도 대문자로 출력
부호없는 10진 정수로 출력한다.
1개의 문자를 출력

문자열을 출력

고정 소수점 형식의 실수로 출력

부동 소수정 형식의 실수로 출력

%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=&num;

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