Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 산술연산
- face recognition
- 반복실행구조
- bitwise
- 종합
- 16진수
- 10진수
- 비트단위논리연산
- OpenCV
- 출력
- 2진수
- 비교연산
- input()
- 기초 100제
- 아스키코드
- 선택실행구조
- 딥러닝
- Docker
- 파이썬
- 입출력
- codeup
- 불 자료형
- 2차원배열
- 진수
- 문자열
- 8진수
- 기초100제
- 불 연산
- 코드업
- 논리연산
Archives
- Today
- Total
DeepFlowest
[C] 03_변수와 데이터 입력 본문
728x90
반응형
SMALL
* 본 포스팅은 혼자 공부하는 C언어 (서현우 지음)를 읽고 정리한 내용입니다.
* 본 포스팅에 포함된 코드는 본인이 작성한 것이므로 책과 다를 수 있습니다.
- 변수 : 데이터를 저장 하는 공간
- 변수 선언을 통해 메모리에 저장 공간을 확보한다.
- 정수 : int
- 실수 : double
- 문자 : char
- 문자열 : char
1. 변수 선언 방법
- 프로그램에서 데이터를 메모리에 저장해 놓으면 필요할 때마다 꺼내 사용할 수 있다.
- 이때 변수 선언을 통해 메모리에 저장 공간을 확보한다.
- 다음은 int형 변수 선언 방법이다.
int a;
- int : 자료형
- a : 변수명
==> 정수를 저장할 공간을 a라 이름 붙여 메모리에 4바이트 할당하겠다고 컴파일러에게 알려주는 것이다.
==> 변수명은 메모리에 붙이는 임시 주소와 같은 개념이다.
- 컴퓨터의 메모리 공간은 재활용 된다. 프로그램이 종료되면 사용하던 메모리 공간을 반납하고 새로 실행된 프로그램이 그 공간을 사용한다. 이 때 종료된 프로그램이 어떤 값을 메모리에 남겨 놓았는지 알 수 없다.
- 새 프로그램에서 이 값은 의미가 없으므로 이를 쓰레기 값이라고 하는데, 이 값때문에 오류가 생길 수 있으므로 반드시 원하는 값으로 바꾸는 초기화 과정이 필요하다.
- 초기화 방법은 다음과 같다.
a = 10;
// 오른 쪽 값(10)을 왼쪽(a)에 저장한다는 의미
[변수 선언과 대입 규칙]
- 중괄호의 블록({})안에 변수를 선언하며 선언한 위치부터 블록 끝까지 사용할 수 있다.
- 컴파일러에 따라 변수의 선언 위치가 제한될 수 있다.
- 변수의 자료형이 같으면 동시에 둘 이상의 변수를 선언할 수 있다. int a, b, c;
- 대입 연산자(=)는 연산자 왼쪽의 변수에 오른쪽의 값을 저장한다.
#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. 정수 자료형
- 변수 : 데이터를 저장하는 메모리의 공간이며 데이터의 종류에 따라 다양한 형태를 사용한다.
- 이와 같은 변수의 형태를 자료형 혹은 데이터형이라 하며, 크게 정수형과 실수형으로 구분한다.
- 같은 정수형이라도 메모리 저장 공간의 크기에 따라 char, short, int, long, long 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자리의 범위 내의 값을 사용하는 게 좋음.
- 다음과 같은 방법으로 사용하기
- 정수형을 기본으로 사용하고 실수형은 꼭 필요한 경우만 사용.
- 실수형은 유효 숫자가 많은 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