3 - Data Type
<학습하기>
5. 캐스팅 연산자
수식의 데이터형을 바꾸는 연산자.
C언어에서 사용할 수 있는 데이터형
-정수(int)
소수점을 포함하지 않는 숫자데이터
ex) 0, 10, 7, -123
기본적으로 10진수를 사용하나, 필요에 따라 8진수 또는 16진수를 사용할 수 있다.
- 컴퓨터가 실제로 사용하는 것은 2진수.
- 그러나 2진수를 실제로 사용하는 것은 힘들기에 2진수와 가까우면서도
10진수에 가까운 8진수 또는 16진수를 사용.
8진수
0으로 시작하며 0~7까지의 숫자로 이루어진 숫자데이터.
ex) 0123 (8진수 123)
16진수
0x로 시작하며 0~9까지, A~F까지의 문자로 이루어진 숫자데이터.
A~F는 10~15까지의 숫자에 대응.
ex) 0x123 (16진수 123)
같은 정수 데이터라도 크기에 따라 여러가지가 있다.
short - 2바이트
int - 4바이트 (가장 많이 사용)
long - 4바이트
-실수(double)
소수점을 포함하는 숫자데이터
ex) 0.0, 3.14, ...
크기에 따라 다음과 같은 형이 있다.
float - 4바이트
double - 8바이트 (가장 많이 사용)
-문자(char)
단일따옴표(')로 감싸인 하나의 문자.
ex) 'A', '0', '%', ...
숫자 0 이 아닌 문자로 인식.
문자데이터는 실제로는 ASCII코드로 변환되어 저장된다. (아스키코드)
단, 한글은 Uni 코드로 할당되어 있기 때문에 문자데이터로 사용할 수 없다.
(다른 시스템에서는 사용 가능할 수도 있음.)
-문자열
이중따옴표 (")로 감싸인 일련의 문자.
모든 문자가 가능하므로 한글도 문자열이 될 수 있다.
ex) "Hello", "안녕하세요", ...
-변수
데이터를 담을 수 있는 상자로서, 다른 데이터를 담아 여러 작업을 할 수 있다.
형식
자료형 변수이름;
자료형 변수이름 = 초기값;
(자료형은 char, float 따위의 것)
ex)
int age;
나이를 저장하는 전수형 변수. 초기값이 없으므로 지금은 어떤 값이 들어있을지 모른다.
double height = 170;
키를 저장하는 실수형 변수로, 170이라는 값으로 초기화.
char alphabet = 'A';
-이름 규칙
필수
1. 이름을 지을 때는 영문자, 숫자만 가능하며 특수문자 중에 밑줄(_)만 가능.
2. 첫 글자는 숫자가 와서는 안된다. 영문자나 _으로 시작해야한다. (숫자로 인식하기 때문)
3. 영문자는 대소문자를 구분한다. (Abc와 abc는 다른 이름.)
4. C에서 특별한 의미를 갖는 예약어는 사용 금지. (int, double, for, if, ...)
권고 (관습적으로 지키는 것들)
5. 변수이름은 소문자로 시작하며 그 이름은 대문자로 시작한다.
6. 밑줄로 시작하는 이름은 주로 컴파일러가 필요에 의해 사용하기에
프로그램에서는 만들지 않는 것이 좋다.
7. 한글이름을 쓸 수는 있지만, 쓰지 않는 쪽이 좋다.
-변수를 선언할 때의 주의점
변수선언은 반드시 함수의 앞 또는 블럭의 앞에서만 가능하며,
다른 명령어 이후에는 변수를 선언할 수 없다.
그러므로 함수 중간에서 변수를 만들고 싶으면 새로운 블럭을 만들어 주어야 한다.
(은근 짜증.. C++에서는 사라짐 -ㅅ-)
-포맷화된 입력함수 : scanf
키보드 입력을 포맷에 맞춰 특정한 타입으로 변환해서 지정된 변수에 저장한다.
형식
scanf(포맷 문자열, &변수, &변수, ...);
포맷문자열에는 다음과 같은 것을 포함한다.
-정수형 변환
&hd : 입력문자열을 short형 데이터로 바꿔 변수에 저장.
&d : 입력문자열은 int형 데이터로 바꿔 변수에 저장.
%ld : 입력 문자열을 long형 데이터로 바꿔 변수에 저장.
ex)
int intVar;
short shortVar; //선언
scanf("%d %hd , &intVar, &shortVar);
입력 : 10 20 >>10을 int로 변환해서 intVar에, 20을 short로 변환해서 shotVar에 저장.
-실수형 변환
%f : 입력문자열을 float형 데이터로 바꿔 변수에 저장.
%lf : 입력 문자열은 double형 데이터로 바꿔 변수에 저장.
-기타
%c : 입력문자열을 char형 데이터로 바꿔 변수에 저장.
%s : 입력문자열을 문자열 데이터로 바꿔 변수에 저장. >>get와 비슷한 기능.
-포맷화된 출력함수 : printf
데이터를 지정된 포맷에 맞춰 콘솔창에 출력하는 함수.
형식
printf(포맷 문자열, 수식, 수식, ...) //scanf와 달리 앤드(&)표시가 필요가 없다.
포맷문자열에는 다음과 같은 것을 포함한다.
%d : 정수형 수식을 출력.
%f : 실수형 수식을 출력.
%c : 문자데이터 출력.
%s : 문자열데이터 출력.
%% : %기호를 출력.
포맷문자열 이외의 문자열들은 그대로 출력한다.
단, puts와 달리 printf는 출력후 줄바꿈을 하지 않는다.
줄바꿈을 하기 위해서는 escape character 필요.
-escape character
화면에 출력되지는 않으면서 특별한 기능을 하는 문자.
일종의 문자이므로 문자변수나 문자열 안에 들어갈 수 있따.
역슬래쉬(\)와 영문자의 조합으로 이루어진다.
혁식
\n : 줄바꿈문자.
\t : 탭문자. (tab)
\0 : 문자열 끝을 표시하는 문자.
\\ : \문자를 의미.
연산자
하나 이상의 데이터를 조작하여 다른 데이터를 만들어내는 작업.
float - 4바이트
double - 8바이트 (가장 많이 사용)
-문자(char)
단일따옴표(')로 감싸인 하나의 문자.
ex) 'A', '0', '%', ...
숫자 0 이 아닌 문자로 인식.
문자데이터는 실제로는 ASCII코드로 변환되어 저장된다. (아스키코드)
단, 한글은 Uni 코드로 할당되어 있기 때문에 문자데이터로 사용할 수 없다.
(다른 시스템에서는 사용 가능할 수도 있음.)
-문자열
이중따옴표 (")로 감싸인 일련의 문자.
모든 문자가 가능하므로 한글도 문자열이 될 수 있다.
ex) "Hello", "안녕하세요", ...
-변수
데이터를 담을 수 있는 상자로서, 다른 데이터를 담아 여러 작업을 할 수 있다.
형식
자료형 변수이름;
자료형 변수이름 = 초기값;
(자료형은 char, float 따위의 것)
ex)
int age;
나이를 저장하는 전수형 변수. 초기값이 없으므로 지금은 어떤 값이 들어있을지 모른다.
double height = 170;
키를 저장하는 실수형 변수로, 170이라는 값으로 초기화.
char alphabet = 'A';
-이름 규칙
필수
1. 이름을 지을 때는 영문자, 숫자만 가능하며 특수문자 중에 밑줄(_)만 가능.
2. 첫 글자는 숫자가 와서는 안된다. 영문자나 _으로 시작해야한다. (숫자로 인식하기 때문)
3. 영문자는 대소문자를 구분한다. (Abc와 abc는 다른 이름.)
4. C에서 특별한 의미를 갖는 예약어는 사용 금지. (int, double, for, if, ...)
권고 (관습적으로 지키는 것들)
5. 변수이름은 소문자로 시작하며 그 이름은 대문자로 시작한다.
6. 밑줄로 시작하는 이름은 주로 컴파일러가 필요에 의해 사용하기에
프로그램에서는 만들지 않는 것이 좋다.
7. 한글이름을 쓸 수는 있지만, 쓰지 않는 쪽이 좋다.
-변수를 선언할 때의 주의점
변수선언은 반드시 함수의 앞 또는 블럭의 앞에서만 가능하며,
다른 명령어 이후에는 변수를 선언할 수 없다.
그러므로 함수 중간에서 변수를 만들고 싶으면 새로운 블럭을 만들어 주어야 한다.
(은근 짜증.. C++에서는 사라짐 -ㅅ-)
-포맷화된 입력함수 : scanf
키보드 입력을 포맷에 맞춰 특정한 타입으로 변환해서 지정된 변수에 저장한다.
형식
scanf(포맷 문자열, &변수, &변수, ...);
포맷문자열에는 다음과 같은 것을 포함한다.
-정수형 변환
&hd : 입력문자열을 short형 데이터로 바꿔 변수에 저장.
&d : 입력문자열은 int형 데이터로 바꿔 변수에 저장.
%ld : 입력 문자열을 long형 데이터로 바꿔 변수에 저장.
ex)
int intVar;
short shortVar; //선언
scanf("%d %hd , &intVar, &shortVar);
입력 : 10 20 >>10을 int로 변환해서 intVar에, 20을 short로 변환해서 shotVar에 저장.
-실수형 변환
%f : 입력문자열을 float형 데이터로 바꿔 변수에 저장.
%lf : 입력 문자열은 double형 데이터로 바꿔 변수에 저장.
-기타
%c : 입력문자열을 char형 데이터로 바꿔 변수에 저장.
%s : 입력문자열을 문자열 데이터로 바꿔 변수에 저장. >>get와 비슷한 기능.
-포맷화된 출력함수 : printf
데이터를 지정된 포맷에 맞춰 콘솔창에 출력하는 함수.
형식
printf(포맷 문자열, 수식, 수식, ...) //scanf와 달리 앤드(&)표시가 필요가 없다.
포맷문자열에는 다음과 같은 것을 포함한다.
%d : 정수형 수식을 출력.
%f : 실수형 수식을 출력.
%c : 문자데이터 출력.
%s : 문자열데이터 출력.
%% : %기호를 출력.
포맷문자열 이외의 문자열들은 그대로 출력한다.
단, puts와 달리 printf는 출력후 줄바꿈을 하지 않는다.
줄바꿈을 하기 위해서는 escape character 필요.
-escape character
화면에 출력되지는 않으면서 특별한 기능을 하는 문자.
일종의 문자이므로 문자변수나 문자열 안에 들어갈 수 있따.
역슬래쉬(\)와 영문자의 조합으로 이루어진다.
혁식
\n : 줄바꿈문자.
\t : 탭문자. (tab)
\0 : 문자열 끝을 표시하는 문자.
\\ : \문자를 의미.
연산자
하나 이상의 데이터를 조작하여 다른 데이터를 만들어내는 작업.
구글에서 C언어 연산자를 찾으면 꽤 많이 나온다.... 그때그때 필요할 때마다 참고!
1. 사칙 연산자.
+, -, *, /, %
% : 나머지 연산자.
ex) 10%3 =1
/ : 나누기 연산자.
10/3 = 3
둘 다 정수형일 경우 정수형 알고리즘에 의해 정수값이 나옴.
10.0/3 = 3.33333333...
10/3.0 = 3.33333333...
둘 중 하나라도 실수라면 실수형 알고리즘에 의해 실수값이 나옴.
2. 대입 연산자 : =
우측항의 값을 계산해서 좌측변수에 대입하라.
ex) varA = varA+1
varA의 값을 가져와 varA+1을 계산해서 varA에 대입하라.
3. 할당 연산자
+=, -=, *=, %=
특정변수의 값에 연산을 해서 다시 특정변수에 넣는 식을 간략화한 연산자.
varA = varA+1; => varA+=1;
varV = varV*2; => varV*=2
4. 증감 연산자
특정변수의 값을 1만큼 더하거나 1만큼 빼는 연산자.
varA+=1; => varA++ 또는 ++varA
varB-=1; => varB-- 또는 --varB
1. 사칙 연산자.
+, -, *, /, %
% : 나머지 연산자.
ex) 10%3 =1
/ : 나누기 연산자.
10/3 = 3
둘 다 정수형일 경우 정수형 알고리즘에 의해 정수값이 나옴.
10.0/3 = 3.33333333...
10/3.0 = 3.33333333...
둘 중 하나라도 실수라면 실수형 알고리즘에 의해 실수값이 나옴.
2. 대입 연산자 : =
우측항의 값을 계산해서 좌측변수에 대입하라.
ex) varA = varA+1
varA의 값을 가져와 varA+1을 계산해서 varA에 대입하라.
3. 할당 연산자
+=, -=, *=, %=
특정변수의 값에 연산을 해서 다시 특정변수에 넣는 식을 간략화한 연산자.
varA = varA+1; => varA+=1;
varV = varV*2; => varV*=2
4. 증감 연산자
특정변수의 값을 1만큼 더하거나 1만큼 빼는 연산자.
varA+=1; => varA++ 또는 ++varA
varB-=1; => varB-- 또는 --varB
5. 캐스팅 연산자
수식의 데이터형을 바꾸는 연산자.
형식
(데이터형)수식
ex)
int varA = 10;
int varB = 3;
double div = varA/varB;
div = 3.0
div = varA/(double)varB;
varB의 값을 실수로 바꿔 3.0이 되므로 결과는 10/3.0 = 3.33333이 된다.
(데이터형)수식
ex)
int varA = 10;
int varB = 3;
double div = varA/varB;
div = 3.0
div = varA/(double)varB;
varB의 값을 실수로 바꿔 3.0이 되므로 결과는 10/3.0 = 3.33333이 된다.
<실습하기>
#include <stdio.h>
// 두 수를 입력받아 두 수의 더하기, 뺴기, 곱하기, 나누기, 나머지를 출력하는 프로그램을 만들어라.
main()
{
// 두 수를 입력받을 변수 선언
int varA;
int varB;
puts("두 수를 입력해 주세요");
scanf("%d %d", &varA, &varB); //두 입력을 int형(%ㅇ)으로 바꿔 각 변수에 저장.
//포맷 문자열이랑 변수랑 1:1대응이 되어야함.
// 입력된 변수 확인
printf("varA:%d\n varB:%d\n", varA, varB);
//varA varB출력 , varA:%d에서 varA는 포맷문자열이 아니기 때문에 그대로 출력된다.
//puts 함수는 다음줄로 옮기지만 printf는 다음줄로 옮기지 않는다.
printf("%d+%d=%d\n", varA, varB, varA+varB);
printf("%d-%d=%d\n", varA, varB, varA-varB);
printf("%d*%d=%d\n", varA, varB, varA*varB);
printf("%d/%d=%d\n", varA, varB, varA/varB);
printf("%d%%%d=%d\n", varA, varB, varA%varB);
이렇게 안하고 int varA; int varB; int add; 식으로 선언하려면
함수 이전에 선언부터해야 오류가 안난다.
//함수 중간에서 변수를 선언하는 방법
{
int add =varA+varB;//블럭초반이므로 변수 선언 가능
int sub=varA-varB; //여기서 선언된 변수들은 이 블럭 안에서만 사용 가능
int mult = varA*varB;
//단, 이 블럭 안에서는 여기서 선언된 변수들이 우선권이 있으므로
블럭 밖의 add변수가 아닌 블럭 안의 add변수가 사용됨.
int div=varA/(double)varB;
int mod = varA % varB;
printf("%d+%d=%d\n", varA, varB, add);
printf("%d-%d=%d\n", varA, varB, sub);
printf("%d*%d=%d\n", varA, varB, mult);
printf("%d/%d=%d\n", varA, varB, div);
printf("%d%%%d=%d\n", varA, varB, mod);
}}
// 두 수를 입력받아 두 수의 더하기, 뺴기, 곱하기, 나누기, 나머지를 출력하는 프로그램을 만들어라.
main()
{
// 두 수를 입력받을 변수 선언
int varA;
int varB;
puts("두 수를 입력해 주세요");
scanf("%d %d", &varA, &varB); //두 입력을 int형(%ㅇ)으로 바꿔 각 변수에 저장.
//포맷 문자열이랑 변수랑 1:1대응이 되어야함.
// 입력된 변수 확인
printf("varA:%d\n varB:%d\n", varA, varB);
//varA varB출력 , varA:%d에서 varA는 포맷문자열이 아니기 때문에 그대로 출력된다.
//puts 함수는 다음줄로 옮기지만 printf는 다음줄로 옮기지 않는다.
printf("%d+%d=%d\n", varA, varB, varA+varB);
printf("%d-%d=%d\n", varA, varB, varA-varB);
printf("%d*%d=%d\n", varA, varB, varA*varB);
printf("%d/%d=%d\n", varA, varB, varA/varB);
printf("%d%%%d=%d\n", varA, varB, varA%varB);
이렇게 안하고 int varA; int varB; int add; 식으로 선언하려면
함수 이전에 선언부터해야 오류가 안난다.
//함수 중간에서 변수를 선언하는 방법
{
int add =varA+varB;//블럭초반이므로 변수 선언 가능
int sub=varA-varB; //여기서 선언된 변수들은 이 블럭 안에서만 사용 가능
int mult = varA*varB;
//단, 이 블럭 안에서는 여기서 선언된 변수들이 우선권이 있으므로
블럭 밖의 add변수가 아닌 블럭 안의 add변수가 사용됨.
int div=varA/(double)varB;
int mod = varA % varB;
printf("%d+%d=%d\n", varA, varB, add);
printf("%d-%d=%d\n", varA, varB, sub);
printf("%d*%d=%d\n", varA, varB, mult);
printf("%d/%d=%d\n", varA, varB, div);
printf("%d%%%d=%d\n", varA, varB, mod);
}}
댓글
댓글 쓰기