1. 변수
- 프로그램에서 데이터를 메모리에 저장해 놓으면 필요할 때 마다 사용이 가능함
- 위와 같은 경우를 위해서 변수를 선언하여 메모리에 저장공간을 확보
int a;
- 여기서 int는 자료형, a는 변수명 이라고 부름
int a; //현재 a에 쓰레기 값이 들어있는 상태
a = 10
//or
int a = 10;
- 위와 같이 변수를 선언 후 값을 넣을 수도 있고 아래와 같이 선언과 동시에 초기화도 가능함
- 변수를 선언하면 메모리에 저장공간이 생기는데, 처음 그 안에 어떤 값이 있는지는 알 수 없음
- 컴퓨터의 메모리 공간은 재활용 되기 때문에, 이전에 어떤 값이 메모리 공간에 남겨져있는지 모름
- 이렇게 선언만 했을 경우 새 프로그램에서 처음 a 에 들어간 값은 의미가 없으므로 쓰레기값(garbage value)라고 부름
1-1. 변수 선언과 대입 규칙
- 1) 중괄호의 블록 {} 안에서 변수를 선언하며, 변수를 선언한 위치부터 블록 끝까지 사용 가능 (전역변수 예외)
- 2) 변수의 자료형이 같으면 동시에 둘 이상의 변수 선언 가능
int a, b, c; // 3개 변수 동시 선언
- 3) 대입 연산자(=)는 연산자 왼쪽의 변수에 오른쪽 값을 저장
- 4) 변수는 대입 연산자 왼쪽에서는 저장공간이 되고, 오른쪽에서는 값이 됨
- 만약 오른쪽에서 변수를 사용하면 변수에 저장 된 값이 복사되어 왼쪽 변수에 저장
- 만약 오른쪽에서 수식을 사용하면 연산을 수행한 수 그 결과 값이 변수에 저장
int a, b;
a = 10; //a라는 이름의 저장공간에 10이라는 값이 들어감
b = a; //a라는 저장공간의 값이 복사되어 b에 들어감
2. 변수의 자료형
2-1. 정수 자료형
- 크기 순서대로
- short(2byte) -> int(4byte) -> long(4byte or 8byte) -> long long(8byte)
- 여기서 독특한게 long 자료형인데, windows os에서는 4byte이지만 다른 운영체제에서는 8byte가 할당된다고 함.
- 아래 링크는 레퍼런스 마소 공식 페이지
- https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170
2-2. 정수 자료형 signed와 unsigned
- 기본적으로 정수자료형은 signed 이다.
- signed 는 말 그대로 부호가 있음을 의미
- int의 경우 -2147483648 ~ 2147483647 까지의 범위를 가지는데,
- unsigned int의 경우는 0 ~ 4294967295의 범위를 가짐
- 사용법은 위의 자료형에 unsigned 만 붙이면 됨
2-3. 실수 자료형
- 크기 순서대로
- float(4bye) -> double(8bye) -> long double(8 이상)
- float은 유효숫자가 7자리 double은 15자리 long double은 15이상이라 double형을 주로 사용한다고 함
#include <stdio.h>
int main(void)
{
float ft = 1.234567890123456789; // big number anyway
double db = 1.234567890123456789; //same
printf("float형 변수의 값 : %.20f\n", ft);
printf("double형 변수의 값 : %.20lf\n", db); //find diff
return 0;
}
더보기
//결과값
float형 변수의 값 : 1.23456788063049316406
double형 변수의 값 : 1.23456789012345669043
- 실수형은 저장하는 값에 따라 숫자가 반드시 정확하게 표현할 수 없을 수 있음
- IEEE 754가 현재 부동소수점을 표현하는 표준 (자세한 원리는 아래나 추후 다른 글에서)
- ref : https://ko.wikipedia.org/wiki/IEEE_754
IEEE 754 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한
ko.wikipedia.org
2-4. 문자 자료형 및 문자열 표현
- 문자 자료형은 char (1byte)나 unsigned char 로 표현함
- 문자열은 char의 배열이나 포인터(추후)의 형태로 표현할 수 있음
#include <stdio.h>
int main(void)
{
char fruit[20] = "strawberry";
printf("딸기 : %s\n", fruit);
printf("딸기쨈 : %s %s\n", fruit, "jam");
return 0;
}
더보기
//결과값
딸기 : strawberry
딸기쨈 : strawberry jam
2-5. const
- 변수는 저장공간이므로 언제든지 값이 바뀔 수 있음
- 이런 변수를 상수화 하는 예약어가 const
- const <자료형> <변수명> = <값> 의 형태로 사용함
- const는 수정이 불가능하기 때문에 반드시 선언과 동시에 초기화 해줘야 함
#include <stdio.h>
int main(void)
{
int income = 0;
double tax;
const double tax_rate = 0.12;
income = 456;
tax = income * tax_rate;
printf("세금은 %.1lf입니다.\n", tax);
return 0;
}
- 위 코드에서 const가 붙은 tax_rate은 수정이 불가능 함
3. Scanf를 통한 데이터 입력
3-1. 사용법과 유의점
- scanf 함수는 c에서 키보드에서 입력한 값을 변수에 저장할 때 사용
- 입력 받고 싶은 변수의 형태에 맞는 변환 문자를 사용
- 입력을 받은 변수 앞에 &(엠퍼샌드 라고 읽음)를 붙이면 됨
scanf("%d", &a);
- 위 경우는 a라는 정수형 변수에 정수 값을 키보드로 부터 입력 받겠다는 뜻
- 유의점 (1) : scanf 함수에서 변수명을 지정할 때 &를 붙여야함 (변수의 주소를 참조하기 때문)
- 유의점 (2) : 변환문자와 맞는 형태의 데이터를 입력해야함
- 키보드로 입력하는 데이터는 모두 문자로 처리됨
- scanf 함수는 변환 문자를 보고 정수로 변환할지, 실수로 변환할지, 그냥 문자로 입력할 지 판단하는데
- 변환 문자와 다른, 예상치 못한 데이터가 입력되면 scanf함수는 실행을 중단
- scanf 함수는 여러개의 변환 문자를 나열해, 2개 이상의 변수에 값 입력 가능
scanf("%d%lf", &a, &b); //a는 정수 b는 실수 데이터 입력
- 입력시 구분은 white space (공백 문자)인 space나 tab, enter로 구분함
3-2. 문자와 문자열 입력
- char형 변수에 문자를 입력할 때는 키보드로 입력하는 모든 문자가 대상이 됨
- 위에서 언급한 white space도 문자로 전달됨
- 문자열은 char 배열에 %s 변환 문자를 사용해 입력하는데, 문자열은 &를 붙이지 않음 (배열자체가 주소이므로)
#include <stdio.h>
int main(void)
{
char grade;
char name[20];
printf("학점 입력 : ");
scanf("%c", &grade);
printf("이름 입력 : ");
scanf("%s", name);
printf("%s의 학점은 %c입니다.\n", name, grade);
return 0;
}
더보기
//결과값
학점 입력 : A (enter 입력)
이름 입력 : 김철수 (enter 입력)
김철수의 학점은 A입니다.
학점 입력 : A (enter 입력)
이름 입력 : 김철수 (enter 입력)
김철수의 학점은 A입니다.
- 마지막으로 주의할 점으로 문자열은 마지막에 널('\0')문자가 들어가야 하므로
- 넣고 싶은 문자열의 길이보다 최소 1크게 배열을 선언해야함
- 또한 공백문자 단위로 끊기기 때문에 이름을 "김 철수" 라고 입력했다면 name 변수에 "김"만 들어가게 됨
'Language > C' 카테고리의 다른 글
혼공C (6장) - 반복문 (while, do while, for) (0) | 2024.03.20 |
---|---|
혼공C (5장) - 선택문, 조건문 (if, else if, else, switch, case) (0) | 2024.03.20 |
혼공C (4장) - 연산자 (형변환, sizeof, 복합대입, 비트연산) (0) | 2024.03.08 |
혼공C (2장-기초) - printf 함수, 제어 문자, 변환 문자 (0) | 2023.07.30 |
혼공C (2장-기초) - Main함수, 주석 (0) | 2023.07.29 |