학이시습

[혼공C] 2주차_변수 알아보기 본문

혼공학습단/혼공C

[혼공C] 2주차_변수 알아보기

dbswndud 2024. 1. 14. 02:59

혼공C 커리큘럼

Chapter 3

01. 변수

변수는 데이터종류에 따라 int(정수), double(실수), char(문자), char배열(문자열)을 사용합니다.

변수 선언 방법

변수 선언하는 방법은 데이터의 종류에 맞는 자료형과 변수명을 나란히 쓰면 됩니다.

자료형 변수명;

 

 

변수를 선언한 후 초기화를 안 하고 냅둔(안 쓰는) 메모리를 쓰레기 메모리라고 합니다. 이 쓰레기 값 때문에 오류가 발생할 수 있기에 반드시 초기화를 해야 합니다.

초기화는 변수명과 대입 연산자(=), 값을 나란히 쓰면 됩니다.

변수명 = 값;

대입 연산자(=)는 오른쪽 값을 왼쪽의 저장(할당)한다는 의미입니다.

 

변수 선언과 대입 규칙

  • 중괄호의 블록({}) 안에 변수를 선언하여 선언한 위치부터 블록 끝까지 사용할 수 있습니다.
  • 컴파일러에 따라 변수의 선언 위치가 달라질 수 있습니다.
  • 변수의 자료형이 같으면 동시에 둘 이상의 변수를 선언할 수 있습니다.
  • 대입 연산자(=)는 연산자 왼쪽의 변수에 오른쪽의 값을 지정합니다.
  • 변수는 대입 연산자 왼쪽에서는 저장 공간이 되고, 오른쪽에서는 값이 됩니다.

정수 자료형

변수는 데이터를 저장하는 메모리의 공간이며 데이터 종류에 따라 다양한 형태를 사용합니다.

변수의 형태를 자료형 혹은 데이터형(data type)이라 하며 크게 정수형과 실수형으로 구분합니다.

데이터형 크기
char 1바이트
short 2바이트
int 4바이트
long 4바이트
long long 8바이트

 

어떤 자료형을 사용할지 고민이라면 다음 방법을 따르면 됩니다.

  • 특별한 경우가 아니면 정수형은 int를 사용합니다.
  • long형은 큰 값을 저장할 때 사용합니다.

자료형의 크기가 궁금하다면 sizeof 연산자로 확인하면 됩니다.

 

unsigned 정수 자료형

정수형은 양수만을 저장하면 두 배 더 넓은 범위의 값을 저장할 수 있습니다.

음수가 없는 데이터를 저장할 때 unsigned를 사용합니다.

unsigned형 변수는 연산하거나 대소를 비교할 때는 부호 비트를 고려하지 않고 항상 양수로 처리하므로 결과가 예상과 다를 수 있습니다. 따라서 unsigned 자료형은 항상 양수만 저장하고 %u로 출력하기를 권합니다.

 

실수 자료형 

실수 데이터형은 크기에 따라 float, double, long double로 구별합니다.

형은 값의 범위보다 유효 숫자의 개수에 주목할 필요가 있습니다.

데이터형 유효 숫자
float 7
double 15
long double 15이상

 

다음 방법을 따라 사용하면 좋습니다.

  • 정수형을 기본으로 사용하고 실수형은 꼭 필요한 경우만 사용합니다.
  • 실수형은 유효 숫자가 많은 double형을 기본으로 사용합니다.

문자열 저장

문자열을 변수에 저장할 때 char형을 배열 형태로 만들어 저장합니다.

char 배열명[문자열길이 + 1] = 문자열;

 

컴파일러가 문자열의 끝에 \0(널 문자)을 자동으로 추가하기 때문에 +1을 합니다.

char 배열은 문자열을 저장하는 변수의 역할을 하며 %s로 출력합니다.

 

char 배열에 초기화 이외에 문자열을 저장할 때는 strcpy 함수를 사용합니다. strcpy 함수를 사용하려면 소스 코드에 string.h 헤더 파일을 포함해야 합니다.

strcpy(변수명, "문자열")

 

strcy 함수를 사용한 코드가 컴파일되지 않을 때 다음 문장을 소스 코드 첫 줄에 추가합니다.

#define _CRT_SECURE_NO_WARNINGS

 

const를 사용한 변수

const를 사용해 변수를 선언하면 초기화된 값을 바꿀 수 없습니다.

const 자료형 변수명 = 값;

const를 사용하면 선언과 동시에 초기화해야 합니다.

 

장점

  • 복잡한 값을 의미 있는 이름으로 쓸 수 있습니다.
  • 값이 바꾸지 않음을 보장받을 수 있습니다.

예약어와 식별자

예약어(reserved 또는 Key word): 컴파일러와 약속된 단어

식별자: 필요에 따라 만들어 사용하는 단어

예를 들자면 변수 선언문에서 자료형 이름은 예약어이고, 변수명은 식별자입니다.

 

식별자는 만들어 사용하는 단어이므로 다음 규칙을 지켜야 합니다.

  • 알파벳 대문자 A~Z, 소문자 a~z, 숫자 0~9, _(밑줄, underline)로 만듭니다.
  • 숫자로 시작할 수 없습니다.
  • 대문자와 소문자는 서로 다른 식별자로 인식합니다.
  • 예약어는 식별자로 사용할 수 없습니다.
  • 중복 사용할 수 없습니다.

확인 문제

1. 다음 자료형 중에서 실수형에 표시를 하세요.

float long char double int unsigned short

 

2. 다음 프로그램의 실행결과를 예상해보세요.

#include <stdio.h>

int main(void) {
    int a = 0;
    
    a = a + 1;
    a = a + 2;
    a = a + 3;
    printf("a : %d", a);
    
    return 0;
}
a : 6

 

3. 국어, 영어, 수학 점수를 저장할 변수를 선언하여 세 과목의 합을 구하고 세 과목의 점수와 총점을 출력하는 프로그램을 작성하세요.

#include <stdio.h>

int main(void) {
	int kor = 70, eng = 80, mat = 90;
	int tot;

	tot = kor + eng + mat;
	printf("국어 : %d, 영어 : %d, 수학 : %d\n", kor, eng, mat);
	printf("총점 : %d", tot);
}

 

02. 데이터 입력

scanf 함수의 사용법

scanf 함수는 키보드에서 입력한 값을 변수에 저장할 때 사용합니다. &는 엠퍼센드(ampersand)라고 읽습니다.

scanf("%d", &a)

 

scanf 사용 유의점

scanf 함수에서 변수명을 지정할 때는 &를 붙여야 합니다.

더보기

&는 입력할 때 사용됩니다. (변수의 주소를 구하는 연산자입니다.)

scanf 함수에서 사용한 변환 문자와 맞는 형태의 데이터를 입력해야 합니다.

더보기

scanf 함수는 변환 문자와 입력 형태가 다르면 데이터를 입력하지 못할 수 있습니다.

만약 형태가 다르다면 scanf 함수 실행 이전의 변수의 값이 계속 사용됩니다. 결국 입력에 실패하면 별수에 있던 쓰레기 값이 그대로 출력됩니다.

 

scanf 함수의 응용

scanf 함수는 여러 개의 변환 문자를 나열하여 한 번에 2개 이상의 변수에 값을 입력할 수 있습니다.

2개 이상의 값을 입력할 때는 space bar를 눌러 공백으로 구분하거나 Tab 또는 Enter을 눌러 구분할 수 있습니다.

 

문자와 문자열의 입력

char형 배열에 문자열을 입력할 때는 배열명에 & 기호를 붙ㅇ지 않습니다.

스페이스나 엔터, 탭 등을 만나면 바로 전까지만 저장이 됩니다. 따라서 공백 없이 연속으로 입력해야 합니다.

 

vc++ 컴파일러에서는 scanf_s 함수를 지원합니다.

배열의 크기까지만 문자열을 제한하므로 안전한 입력이 가능하지만 다른 컴파일러에서 지원하지 않으면 코드의 호환성에 문제가 생길 수 있습니다.

 

확인 문제

1. 다음과 같이 변수가 선언되어 있을 때, scanf 함수의 사용법이 옳은 것을 고르세요. 

char sh;
short sh;
int in;
float ft;
double db;

① scanf("%d", &ch");

② scanf("%d", &sh");

③ scanf("%d%f", &in, &ft");

④ scanf("%f", &db");

 

2. 다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.

#include <stdio.h>

int main(void) {
    char fruit[20];
    int cnt;
    
    printf("좋아하는 과일 : ");
    scanf("%s",_____);
    printf("몇 개 : ");
    scanf("%d",_____);
    printf("%s를 %d개 드립니다.", fruit, cnt);
    
    return 0;
}
fruit
&cnt

 

3. 키보드로 문자를 입력하여 아스키 코드 값을 출력하는 프로그램을 작성하세요. 어떤 문자가 입력될지는 실행할 때 결정합니다.

#include <stdio.h>

int main(void) {
	char ch;
    
    printf("문자 입력 : ");
    scanf("%c", &ch);
    printf("%c문자의 아스키 코드 값은 %d입니다.", ch, ch);
}

 

 

Chapter 4 → https://yunju5090.tistory.com/10