Developer

2.(c언어) 자료형과 변수 그리고 출력 본문

Programming Language/C

2.(c언어) 자료형과 변수 그리고 출력

DPhater 2020. 8. 1. 20:08

다양한 값을 다루기 위해 변수가 필요하므로 변수에 대해서 알아보자.

C언어의 변수 선언은 아래와 같이 선언한다.

자료형 변수이름;

ex)int a; //정수형 변수 a를 선언한다.

자료형

우선 자료형에 대해서 알아보자

C언어에 있는 자료형의 종류는 아래의 표와 같다.(window)

자료형

크기

범위

char

1byte

-128

~ 127

short

2byte

-32,768

~ 32,767

int

4byte

-2,147,483,648

~ 2,147,483,647

long

4byte

-2,147,483,648

~ 2,147,483,647

long long

8byte

-9,223,372,036,854,775,808

~ 9,223,372,036,854,775,807

float

4byte

1.175494e-38

~ 3.402823e+38

double

8byte

2.225074e-308

~ 1.797693e+308

char, short, int, long, long long 은 정수 자료형, float, double 은 실수 자료형이다.

또한 위의 자료형들은 범위를 보면 알겠지만 모두 부호가 있는 자료형이다.

부호가 있는 자료형은 해당 자료형 앞에 signed라는 부호 키워드를 추가해 정의할 수 있는데 signed의 경우 생략이 가능하다. 그렇다면 부호가 없는 자료형은 무엇일까 signed에서 유추할 수 있다. 바로 unsigned이다.

자료형 앞에 unsigned를 추가해 주면 부호가 없는 자료형을 뜻하고 범위는 0에서부터 시작하게 된다.

char는 문자 한 개를 저장할 때 사용하는 자료형인데 해당 문자를 직접 저장하는 것이 아닌 해당 문자에 해당하는 정수값을 저장하는 것이다. 각 정수값과 문자의 매칭은 아스키(ASCII) 코드표를 참조하면 된다.

그리고 void라는 자료형도 있는데 이는 형태가 없는 자료형으로 추후에 포인터, 함수의 반환값 등 다양하게 사용된다.

ASCII 코드

변수

자료형에 대해 알아보았으니 이제 변수를 선언해보자.처음에 작성되어 있듯이 변수의 선언은

자료형 변수이름;

여기에서 주의할 점이 있는데 변수의 이름의 경우 몇 가지 규칙을 지켜야 한다.

1. 첫 글자는 숫자를 사용해서는 안 된다.

2. C언어의 키워드(int, if, double...)은 사용할 수 없다.

3. 대소문자를 구분해야 한다.(ex. int a와 int A는 다른 변수)

4. 영어, 숫자, _(밑줄 문자)만 사용하자.

자 이제 변수를 직접 선언해보자

 

#include<stdio.h>
int main(){
    int num1;  //정수형 변수 num1이라는 이름으로 선언
    int num2=20; //정수형 변수 num2를 선언해 20으로 초기화
    int num3,num4,num5;  //,(콤마)로 구분해 여러개 동시에 선언
    num3=1;   //num3라는 변수에 1이라는 값 할당
    num4=5;
    num5=9;

    printf("%d %d %d %d\n",num2,num3,num4,num5);
    return 0;
}

코드1 실행 결과

정수형 변수 5개를 선언하고 printf함수를 사용해 화면에 변수의 들은 값들을 출력하는 소스이다. 구문의 끝마다 세미콜론(;) 작성을 잊지 말자!!!!!!

printf함수의 사용법이 이전에 Hello World를 출력하는 것과 많이 달라 보인다.

printf함수는 ""(큰따옴표)안의 내용을 화면으로 출력해주는 역할을 하는데 큰따옴표안에 %d와 같은 서식 지정자가 있다면 ,(콤마) 뒤에 있는 변수로 해당 부분이 바뀌게 된다. %d는 정수를 출력할 때 사용하는 서식 지정자이다. 하나의 예를 보면서 이해해보자.

 

#include<stdio.h>
int main(){
    printf("this is %d",1);
    return 0;
}

코드2 실행 결과

괄호 안에 "this is %d",1 이 들어있는데 this is는 화면에 그대로 출력되고 서식지정자 %d는 콤마 뒤의 1로 바뀌어 출력된다. 예에서는 %d에 직접 정수 1을 지정해 줬지만 변수를 넣어주어도 된다. 또한 이전 코드처럼 여러 개의 서식 지정자를 한 번에 사용할 수 있으며, 해당 서식 지정자 개수만큼 콤마로 구분해서 값이나 변수를 작성해 주어야 한다.

코드 1로 다시 돌아가자 초기화와 할당이라는 말이 있다.

값 할당의 경우 = 기호를 사용한다. C에서 =기호는 같다는 뜻이 아니다. 값을 할당할 때 사용하는 기호이다. 따라서 num3=1;은 num3라는 변수에 1이라는 값을 할당(저장) 하겠다는 뜻이다.

초기화란 값의 선언과 동시에 값을 할당해 주는 것으로 int num2=20; 처럼 작성하며 정수형 변수 num2를 선언하고 해당 변수에 20을 저장하겠다는 뜻이다.

 코드 1에서 num1변수는 초기화도 값 할당도 하지 않았다. num1을 출력하면 컴파일러마다 다르게 작동한다. dev c++의 경우 0으로 자동 초기화가 이루어지고 visual studio 2019의 경우 초기화가 되지 않은 변수라며 error가 나온다.

쉽게 생각해서 num1에는 우리가 모르는 값 즉 쓰레기 값이 들어있다고 생각하면된다. 다른 연산에서 초기화 되지않은 변수를 사용하게 되면 프로그램에서 어떤 문제를 일으킬지 모르기 때문에 주의하자.

코드 1의 printf함수를 살펴보자.

printf("%d %d %d %d\n",num2,num3,num4,num5);

서식 지정자가 4개가 있으므로 ,로 구분된 4개의 값이 정수형태로 대신 출력된다.

따라서 num2에 들어있는 20

num3에 들어있는 1

num4에 들어있는 5

num5에 들어있는 9 가 차례대로 출력되는 것이다.

서식 지정자 이외는 그대로 화면에 출력되므로 띄어쓰기(공백) 또한 똑같이 출력된다.

서식 지정자의 종류를 살펴보자.

서식 지정자

출력 형태

%d

부호 있는 10진 정수 (4byte)

%lld

부호 있는 10진 정수 (8byte)

%u

부호 없는 10진 정수

%o

8진수 정수

%x

16진수 정수

%p

포인터 정수(16진수)

%f

float,double형 실수

%Lf

long double형 실수

%c

문자 한개

%s

문자열

다른 자료형의 변수 선언도 코드1과 같이 선언해주면 되고, 출력은 서식 지정자를 확인해 출력하면 된다.

왜 굳이 힘들게 서식지정자를 만들면서 출력하는지 짜증 날 것이다. printf("2009년 3월 2일"); 이라고 출력을 하게되면 분명 숫자도 정상적으로 출력이된다. 하지만 이는 숫자로서의 2009가아닌 문자열 2009가 출력되는 것이다.

또한 서식지정자가 없다면 변수에 있는 값을 출력하고 싶을때 printf("this is num1"); 안에 들어있는 num1이 변수인지 아니면 문자열 num1인지 구분할 방법이 없어진다. 따라서 서식지정자를 사용하여야 한다.

자료형부분은 정수,실수,문자 편에서 다 자세하게 다루어 볼것이다.

정리

1. 변수의 선언은 자료형 변수이름 의 형식으로 선언한다.

2. 변수를 출력하고 싶을 때에는 서식 지정자를 사용한다.

3. 초기화되지 않은 변수를 주의하자

4.구문의 끝마다 세미콜론(;)을 입력하자!!!

'Programming Language > C' 카테고리의 다른 글

6.(C언어) 진법, 음수표현  (0) 2020.08.01
5.(C언어) 자료형_문자  (0) 2020.08.01
4.(C언어) 자료형_실수  (0) 2020.08.01
3.(C언어) 자료형_정수  (0) 2020.08.01
1.(c언어) Hello World!  (0) 2020.08.01
Comments