2024. 3. 15. 18:53ㆍC
C 프로그래밍 입문 강의
https://mcode.co.kr/video/list2?viewMode=view&idx=98
Chapter. 3 :변수
변수의 특성
변수(Variable)
- C코드에서 특정 변수에 값을 할당하거나 사용하려면 반드시 사전에 선언이 외어 있어야 함
- 변수를 선언함과 동시에 초기값을 할당하는 것이 가능
- C에서는 다양한 타입의 변수를 제공하므로 사용자는 필요에 따라 알맞은 타입으로 선언
- C에서 사용하는 변수는 이진수(binary)로 저장 및 인식
변수의 수명
선언된 { ... } 안에서 선언된 시점부터 중괄호가 닫힐 때까지
● 변수 선언시 주의사항
- 대소문자 구분
- 같은 이름 금지(수명이 끝난 경우엔 상관없음, 서로 다른 중괄호)
- 숫자로 시작하는 변수 금지
부호(sign) 및 보수
부호의 유무
unsignd
변수로서 unsigned type을 사용하는 경우, 부호가 없이 모든 bit을 값으로 사용
8bit 변수형을 unsigned로 설정한 경우, 0~255까지 표현이 가능
signed
변수로서 signed type을 사용하는 경우 MSB(Most Significant Bit)를 부호(sign bit)로 사용
sign bit이 1인 경우 음수, 0인 경우 양수이며, 기본적으로 변수는 signed type으로 선언
8bit 변수형을 signed로 설정한 경우, -128~127까지 표현
주의사항
뺄셈 연산시 결과가 음수가 나올 가능성이 있는데, unsigned type으로 할당할 경우 사용자의 예상과 다르게 코드가 동작할 수 있음
보수(complement)
1의 보수(1's complement)
- 양수일 때의 bit을 전부 뒤집어서 음수를 표현
- 0을 불필요할게 +0과 -0으로 표현하게 되므로 좋지 않음
2의 보수(2's complement) 💫
- 양수일 때의 bit을 전부 뒤집고 1을 더하여 음수를 표현
- 0을 중복되게 표현하지 않아도 됨
- 뺄셈 연산시 2의 보수를 만들고 그냥 더하면 되므로 signed number를 만드는 방법으로 2의 보수를 사용
문자형(Character) 타입
한글자에 대한 scan & print를 하기 위한 타입
한글자 단위의 어떤 문자도 입력 가능(영어, 숫자, 기호 한정 / 1BYTE내에서 표현 가능)
선언 및 사용
- (unsigned) char 변수 이름
- %c 로 입, 출력 가능
- '문자' 형태로 할당
사용 범위
- 글자뿐만 아니라 1BYTE형태의 정수로서도 다룰 수 있음
- %c를 사용할 경우 : ASCII TABLE의 Char로 표현.
- %d를 사용할 경우 : ASCII TABLE의 Decimal로 표현
- 산술 연산도 가능함 : Decimal로 변환한 뒤 연산
정수형(Integer) 타입
정수형 타입의 숫자를 scan & print
각 타입에 할당된 범위만큼의 숫자만 인식할 수 있음
bool, short, long, long long
표현방법
- 10진수 : 숫자는 바로 작성, %d(signed), %u(unsigned)로 출력, 큰 숫자는 %ld(long int), %lld(long long int)를 사용
- 8진수 : 숫자 앞에 0을 붙인다. %o로 출력
- 16진수 : 숫자 앞에 0x를 붙인다. %x(소문자), %X(대문자)로 출력
실수(Real Number) 표현 방식
✔️ 고정 소수점(fixed point)
- 주어진 비트수를 정수와 소수로 나누어 각각 따로 표현
- 각각 자릿수가 크지 않아 표현번위가 제한
✔️ 부동 소수점(floating point) 💫
- 실수를 가수부와 지수부로 나누어 표현
- 수식을 이용하므로 표현범위가 매우 넓지만 유효 숫자에 따른 오차가 존재
- 대부분 이 방식 채택
오차
정수부는 오차가 나지 않음
소수부는 10진수로 표현된 소수를 2진수로 표현하다보니 오차 발생
실수형(Real Number) 타입
실수형 타입 및 넓은 범위의 숫자를 scan & print
범위가 넓어도 오차가 있고 계산속도가 느리기 때문에 꼭 필요한 경우에만 사용
float(single, 4 Byte), double(Double, 8 Byte), long double(Extended, 10 Byte)
표현방법
- 실수형 : 123.45 와 같이 출력, %f로 출력, %Lf(long double)로도 출력
- 지수형 : 1.2345e2과 같이 출력, %e(소문자), %E(대문자)로 출력
주의사항
정수형 타입으로 계산한 후 실수형 타입에 넣는 경우 계산은 정수형으로 수행되고, 정수형은 소수부를 표현할 방법이 없기 때문에 정수부의 결과만 저장(내림과 같음)
cf) 실수형 타입으로 계산 후 정수형 타입에 넣어도 정수만 저장
오차 예시
0.1의 경우 부동소수점 방식으로 정확한 값으로 저장되지 않음
100번 정도 더하면 오차가 눈에 드러나기 시작함
문자열(String) 타입
무자하나가 아닌 문자열을 다루고자 할때 사용
char type이 여러개 모여 있는 배열과 같으며, %s를 사용해 scan & print
출력 방법
% [#] [+] [0] [-] [N] [.F] 변환문자
#
정수 출력시 진수(8진수, 10진수, 16진수) 기호 표시
+
부호 출력
0
공백을 0으로 채움, 정수형에서 왼쪽 정렬시 공백을 0으로 채우진 않음
-
왼쪽 정렬
N
N대신 자연수 입력, 출력하는 문자, 숫자가 N칸의 폭을 갖음(오른쪽 정렬)
.F
정밀도, 정수 출력시 0N과 역할이 동일, 실수 출력시 소수점 이라 자릿수, 문자열 출력시 문자열의 최대길이 제한
연습문제
1. 사용자로부터 알파벳 대문자를 입력받아 알파벳 소문자로 변환하는 프로그램을 만드시오.
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
char letter;
printf("Type Capital Letter : ");
scanf("%c", &letter);
letter = letter + 0x20;
printf("Letter is %c\n", letter);
}
2. 사용자로부터 숫자 및 자리수를 입력받아 올림, 내림, 반올림하는 프로그램을 만드시오(자연수에 대해)
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
int num, digit, floor, round, ceil;
printf("Type the number : ");
scanf("%d", &num);
printf("Type the rounding digit : ");
scanf("%d", &digit);
floor = num / (10*digit) * (10*digit);
round = (num + 5*digit) / (10*digit) * (10*digit);
ceil = (num + 9*digit) / (10*digit) * (10*digit);
printf("Ceil : %d\n", ceil);
printf("Floor : %d\n", floor);
printf("Round : %d\n", round);
}
'C' 카테고리의 다른 글
C 프로그래밍 조건문(if, if-else, switch, 삼항연산자, 실습문제) (1) | 2024.03.19 |
---|---|
C 프로그래밍 기초(기초 문법, 변수, 표준 입출력, 산술 연산자, main 함수) (1) | 2024.03.14 |
C 프로그래밍 기초(C 언어, Dev-C++ 설치, Hello world 실습) (1) | 2024.03.14 |