DeepFlowest

[C] 03_변수와 데이터 입력 본문

프로그래밍 언어/C

[C] 03_변수와 데이터 입력

Orange57 2021. 1. 26. 20:41
728x90
반응형
SMALL

* 본 포스팅은 혼자 공부하는 C언어 (서현우 지음)를 읽고 정리한 내용입니다.

* 본 포스팅에 포함된 코드는 본인이 작성한 것이므로 책과 다를 수 있습니다.


 

  • 변수 : 데이터를 저장 하는 공간
  • 변수 선언을 통해 메모리에 저장 공간을 확보한다.
  • 정수 : int
  • 실수 : double
  • 문자 : char
  • 문자열 : char

1. 변수 선언 방법

  •  프로그램에서 데이터를 메모리에 저장해 놓으면 필요할 때마다 꺼내 사용할 수 있다.
  • 이때 변수 선언을 통해 메모리에 저장 공간을 확보한다.
  • 다음은 int형 변수 선언 방법이다.
int a;

- int : 자료형

- a  : 변수명

==> 정수를 저장할 공간을 a라 이름 붙여 메모리에 4바이트 할당하겠다고 컴파일러에게 알려주는 것이다.

==> 변수명은 메모리에 붙이는 임시 주소와 같은 개념이다.

 

  • 컴퓨터의 메모리 공간은 재활용 된다. 프로그램이 종료되면 사용하던 메모리 공간을 반납하고 새로 실행된 프로그램이 그 공간을 사용한다. 이 때 종료된 프로그램이 어떤 값을 메모리에 남겨 놓았는지 알 수 없다.
  • 새 프로그램에서 이 값은 의미가 없으므로 이를 쓰레기 값이라고 하는데, 이 값때문에 오류가 생길 수 있으므로 반드시 원하는 값으로 바꾸는 초기화 과정이 필요하다.
  • 초기화 방법은 다음과 같다.
a = 10;

// 오른 쪽 값(10)을 왼쪽(a)에 저장한다는 의미 

[변수 선언과 대입 규칙]

  1. 중괄호의 블록({})안에 변수를 선언하며 선언한 위치부터 블록 끝까지 사용할 수 있다.
  2. 컴파일러에 따라 변수의 선언 위치가 제한될 수 있다.
  3. 변수의 자료형이 같으면 동시에 둘 이상의 변수를 선언할 수 있다.   int a, b, c;
  4. 대입 연산자(=)는 연산자 왼쪽의 변수에 오른쪽의 값을 저장한다.
#include <stdio.h>

int main(void)
{
    int a;
    int b,c;
    double da;        // double형 변수 da 선언
    char ch;          // char형 변수 ch 선언

    a = 10;
    b = a;
    c = a+20;
    da = 3.5;         // double형 변수 da에 실수 3.5 대입
    ch = 'A';         // char형 변수 ch에 문자 'A' 대입

    printf("변수 a의 값 : %d\n", a);
    printf("변수 b의 값 : %d\n", b);
    printf("변수 c의 값 : %d\n", c);
    printf("변수 da의 값 : %.1lf\n", da);
    printf("변수 ch의 값 : %c\n", ch);

    return 0;
}
===========================================================================
실행 결과 : 
변수 a의 값 : 10
변수 b의 값 : 10
변수 c의 값 : 30
변수 da의 값 : 3.5
변수 ch의 값 : A

2. 정수 자료형

  • 변수 : 데이터를 저장하는 메모리의 공간이며 데이터의 종류에 따라 다양한 형태를 사용한다.
  • 이와 같은 변수의 형태를 자료형 혹은 데이터형이라 하며, 크게 정수형과 실수형으로 구분한다.
  • 같은 정수형이라도 메모리 저장 공간의 크기에 따라 charshortintlonglong long으로 구분한다.
  • char : 1바이트 (=8비트)
  • short : 2바이트
  • int : 4바이트
  • long : 4바이트
  • long long : 8바이트
  • 얼만큼의 값을 저장할 수 있는지는 다음 공식에 따라 계산한다.

  • 예를들어) char형은 크기가 1바이트로 8비트이고, 값의 저장 범위는

       이고, -128~127의 값을 저장할 수 있다.

#include <stdio.h>

int main(void)
{
    //char형 변수 ch1을 선언과 동시에 ‘A’로 초기화
    //문자로 초기화, 저장된 값은 문자의 아스키 코드 값
    // ch1에 문자 'A'를 저장하지만, 그 아스키 코드 값이 65이므로 결국 ch1에 65를 저장한 것과 같다.
    char ch1 = 'A';   
    //char형 변수 ch2을 선언과 동시에 65로 초기화
    // 문자 'A'의 아스키 코드 값에 해당하는 정수로 초기화
    char ch2 = 65;
    
    printf("문자 %c의 아스키 코드 값 : %d\n", ch1, ch1);
    printf("아스키 코드 값이 %d인 문자 : %c\n", ch2, ch2);

    return 0;
}
==========================================================================
결과 : 
문자 A의 아스키 코드 값 : 65
아스키 코드 값이 65인 문자 : A
  • char, short, int, long, long long 등의 정수형 자료형은 저장 값의 범위가 다르지만 출력할 때는 모두 %d를 사용한다.
  • 단, long형은 소문자 l(엘)을 붙여서 %ld로 출력하고 
  • long long형은 2개 붙여서 %lld로 출력 한다.
  • 특별한 경우가 아니면 정수형은 int를 사용
  • long형은 큰 값을 저장할 때 사용
#include <stdio.h>

int main(void)
{
    short sh = 32767;  //short형 변수 sh를 선언과 동시에 32767로 초기화
    int in = 2147483647;
    long ln = 2147483647;
    long long lln = 123451234512345;
    

    printf("short형 변수 출력 : %d\n", sh);
    printf("int형 변수 출력 : %d\n", in);
    printf("long형 변수 출력 : %ld\n", ln);
    printf("long long형 변수 출력 : %lld\n", lln);   // long long형은 lld로 출력
    
    // 자료형의 크기 : sizeof 연산자
    printf("long long형의 크기 : %d바이트\n", sizeof(long long));
    return 0;
}
=============================================================================
결과 :
short형 변수 출력 : 32767
int형 변수 출력 : 2147483647
long형 변수 출력 : 2147483647
long long형 변수 출력 : 123451234512345

3. unsigned 정수 자료형

  • 정수형은 보통 양수와 음수를 모두 저장하지만, 양수만을 저장하면 두 배 더 넓은 범위의 값을 저장할 수 있다.
  • 따라서 나이와 같이 음수가 없는 데이터를 저장할 때는 unsigned를 사용 한다.
  • unsigned가 없으면 자동으로 signed로 선언 된다.
  • p,60 추가 설명 필요
#include <stdio.h>

int main(void)
{
    unsigned int a;
    a = 4294967295;        // 큰 양수 저장
    printf("%d\n", a);     // %d로 출력
    
    a = -1;                // 음수 저장
    printf("%u\n", a);     // %u로 출력

    return 0;
}
================================================
결과 : 
-1
4294967295

4. 실수 자료형

  •  크기에 따라 float, double, long double로 구별하며, 값을 저장할 수 있는 범위가 다름.
  • float형은 유효 숫자 7자리, double형은 15자리의 범위 내의 값을 사용하는 게 좋음.
  • 다음과 같은 방법으로 사용하기
  1. 정수형을 기본으로 사용하고 실수형은 꼭 필요한 경우만 사용.
  2. 실수형은 유효 숫자가 많은 double형을 기본으로 사용.
#include <stdio.h>

int main(void)
{
    // float형 변수 ft를 선언과 동시에 1.234567890123456789로 초기화
    float ft = 1.234567890123456789;
	
    // double형 변수 db를 선언과 동시에 1.234567890123456789로 초기화
    double db = 1.234567890123456789;
    
    printf("float형 변수의 값 : %.20f\n", ft);

    printf("double형 변수의 값 : %.20lf\n", db);

    return 0;
}
=========================================================
결과 : 
float형 변수의 값 : 1.23456788063049316406
double형 변수의 값 : 1.23456789012345669043

5. 문자열 저장

  • 문자열은 char 형을 배열 형태로 만들어 저장.
  • 문자열의 길이보다 배열의 크기를 하나 더 크게 잡아야 함( 컴파일러가 문자열의 끝에 \0(널 문자)를 자동으로 추가하기 때문 )
#include <stdio.h>

int main(void)
{
    // 길이가 20인 char형 배열 fruit을 선언과 동시에 “strawberry”로 초기화
    char fruit[21] = "strawberry";
    printf("딸기 : %s\n", fruit);
	
    printf("딸기쨈 : %s %s\n",fruit,"jam");

    return 0;
}
=============================================================
결과 : 
딸기 : strawberry
딸기쨈 : strawberry jam
  •  배열에는 대입 연산자(=)를 사용할 수 없음( 대입 연산은 대상 자료형의 크기가 일정해야 하는데 char 배열은 선언에 따라 크기가 달라지기 때문)
  • char배열에 초기화 이외에 문자열을 저장할 때는 strcpy함수를 사용
  • strcpy를 사용하기 위해서는 string.h헤더파일을 불러와야 함.
#include <stdio.h>
#include <string.h>

int main(void)
{
    char fruit[20] = "strawberry";   // strawberry로 초기화
    printf("%s\n", fruit);           // strawberry 출력
	
    strcpy(fruit, "banana");
    printf("%s\n", fruit);

    return 0;
}
==========================================================
결과 : 
strawberry
banana

6. const를 사용한 변수

  • 원래 변수는 저장 공간이므로 언제든지 그 값을 바꿀 수 있다. 그러나 const를 사용한 변수는 예외
  • 변수를 선언할 때 그 앞에 const를 붙이면 초기화된 값을 바꿀 수 없다.
  • const를 사용하면 이후에는 값을 바꿀 수 없으므로 반드시 선언과 동시에 초기화해야 한다.( 초기화하지 않으면 변수의 쓰레기 값이 계속 사용되며, 만약 초기화 이후에 값을 바꾸고자 하면 컴파일 과정에서 에러가 발생)
#include <stdio.h>

int main(void)
{
    int income = 0;                   // 소득액 초기화
    double tax;                       // 세금
	
    const double tax_rate = 0.12;
    
    //tax_rate = 0.15;                // 에러 발생
    income = 456;                     // 소득액 저장
    tax = income * tax_rate;          // 세금 계산
    printf("세금은 : %.1lf입니다.\n", tax);

    return 0;
}
=======================================================
결과 : 
세금은 : 54.7입니다.

7. scanf 함수의 사용법

  • scanf() 함수는 키보드에서 입력한 값을 변수에 저장할 때 사용
  • scanf() 함수 사용법 : 변수의 형태에 맞는 변환 문자를 사용하고 입력할 변수 앞에 &기호 붙이기.
#include <stdio.h>

int main(void)
{
    int a;
    scanf("%d", &a);
    printf("입력된 값 : %d\n", a);  // 입력한 값 출력

    return 0;
}
=====================================================
결과 : 
10
입력된 값 : 10
  • scanf 함수는 여러 개의 변환 문자를 나열하여 한 번에 2개 이상의 변수에 값을 입력할 수 있다.
#include <stdio.h>

int main(void)
{
    int age;                               // 나이는 정수형
    double height;                         // 키는 실수형

    printf("나이와 키를 입력하세요 : ");        // 입력 안내 메시지 출력
    scanf("%d%lf", &age, &height);
    printf("나이는 %d살, 키는 %.1lfcm입니다\n", age, height);   // 입력값 출력

    return 0;
}
==============================================================
결과 : 
나이와 키를 입력하세요 : 17 187.5
나이는 17살, 키는 187.5cm입니다

8. 문자와 문자열의 입력

  • char형 변수에 문자를 입력할 때는 키보드로 입력하는 모든 문자가 대상이 된다.
  • 즉, 스페이스(공백 문자)나 엔터(개행 문자)도 하나의 문자로 전달된다.
  • 문자열은 char 배열에 %s 변환 문자를 사용하여 입력하는데, 문자열을 입력할 때는 배열명에 & 기호를 붙이지 않는다.
#include <stdio.h>

int main(void)
{
    char grade;
    char name[21];

    printf("학점 입력 : ");
    scanf("%c", &grade);
    
    printf("이름 입력 : ");
    scanf("%s", name);
    printf("%s의 학점은 %c입니다.\n", name, grade);

    return 0;
}
==================================================
결과 : 
학점 입력 : A
이름 입력 : 홍길동
홍길동의 학점은 A입니다.

 

 


출처 : 혼자 공부하는 C언어 (서현우 지음), 엘리스 아카데미 - 혼자 공부하는 C언어

 

728x90
반응형
LIST

'프로그래밍 언어 > C' 카테고리의 다른 글

[C] 04_연산자  (0) 2021.01.30
[C] 02_상수와 데이터 출력  (0) 2020.10.14
[C] 01_컴파일과 컴파일러  (0) 2020.10.13
Comments