JUST GO
[C] C언어와 프로그래밍 개요 본문
변수
- 어떤 값을 저장하기 위한 공간
- 변수를 사용하려면 변수명과 데이터형(data type)이 필요하다.
int num; // 정수형 변수 선언
float x; // 실수형 변수 선언
char ch; // 문자형 변수 선언
예제-형식 문자열을 이용해서 출력하기
#include <stdio.h>
int main(void) {
int num; // 정수형 변수 선언
float x; // 실수형 변수 선언
char ch; // 문자형 변수 선언
num = 123; // 정수형 변수에 값 대입
x = 1.23; // 실수형 변수에 값 대입
ch = 'A'; // 문자형 변수에 값 대입
printf("%d %x\n", num, num); // 10진수, 16진수 출력
printf("%f %e\n", x, x); // 부동소수점, 지수 출력
printf("%c\n", ch); // 문자 출력
printf("%x\n", num); // 7b 출력
printf("%X\n", num); // 0x7b 출력
printf("%#X\n", num); // 0X7B 출력
return 0;
}
정밀도 지정하기
#include <stdio.h>
int main(void) {
float x;
x = 12.34567; // x에 값 저장
printf("%f\n", x); // 폭과 정밀도를 지정하지 않는 경우
printf("%.2f\n", x); // 정밀도를 지정하는 경우(소수점 이하 2자리)
printf("%8.2f\n", x); // 폭과 정밀도를 지정하는 경우
return 0;
}
scanf 함수의 형식 문자열
- %d : 정수를 10진수로 입력
- %x : 정수를 16진수로 입력
- %i : 정수를 10진수, 8진수, 16진수로 입력 (012는 8진수, 0x12는 16진수)
- %f : float형 실수 입력
- %lf : double형 실수 입력
- %c : 문자 입력
- %s : 문자열 입력
예제 - 입력받은 10진수 정수를 16진수로 변환해서 출력하기
#define _CRT_SECURE_NO_WARNINGS // scanf 경고문 해제
#include <stdio.h>
int main()
{
int num; // 정수형 변수 선언
printf("정수? "); // 정수를 입력을 하도록 사용자에게 알려주기 위한 출력문
scanf("%d", &num); // num에 10진수로 정수 입력
printf("10진수 %d는 16진수 %x입니다.\n", num, num);
return 0;
}
scanf 함수의 형식 문자열
- 문자 배열에 입력받을 때는 &를 지정하지 않는다.
char name[20]; // 문자 20개를 연속으로 저장하는 변수
scanf("%s", name); // name에는 &가 필요 없다.
- 서식 지정자를 여러 개 사용할 수도 있다.
- 서식 지정자와 입력받을 변수의 개수가 같아야 한다.
scanf("%s %d %c", name, &age, &gender);
- 실수형 변수 입력
- %f : float 입력
- %lf : double 입력
float x;
double y;
scanf("%f", &x);
scanf("%lf", &y);
여러 개의 서식 지정자 사용하기
#include <stdio.h>
int main()
{
char name[20];
int age;
char gender;
printf("이름, 나이, 성별(M/F) 순으로 입력하세요.\n");
scanf("%s %d %c", name, &age, &gender); // 3개의 변수 입력
printf("이름: %s\n", name);
printf("나이: %d\n", age);
printf("성별: %c\n", gender);
return 0;
}
scanf 함수의 형식 문자열
- 형식 문자열의 공백 문자
- 이전 입력 이후의 공백을 모두 무시하고 다음 입력을 읽어 오게 한다.
scanf("%s %d %c", name, &age, &gender);
- 입력된 항목들을 빈칸 문자로 구분한다
- 입력된 항목 사이의 공백 문자를 무시한다.
scanf("%s %d %c", name, &age, &gender);
- 입력된 항목들을 줄바꿈 문자로 구분한다.
- 입력된 항목 사이의 공백 문자를 무시한다.
데이터의 2진 표현
- 컴퓨터 시스템에서 2진 데이터로 값을 표현하고 저장하는 방식
- 컴파일러는 데이터형에 따라 값을 저장하는데 필요한 메모리의 크기와 2진 표현을 결정한다.
sizeof 연산자
- 데이터형의 크기는 플랫폼에 따라 다르다.
- 데이터형이나 값의 바이트 크기를 구하려면 sizeof 연산자를 이용한다.
- 소스 코드에서 데이터형이나 값의 크기가 필요할 때는 sizeof 연산자로 구한 크기를 사용하는 것이 좋다.
size1 = 4 * 10; // 의미가 불분명한 코드
size2 = sizeof(float) * 10; // 의미가 명확한 코드
정수형
- 프로그래머가 용도에 따라 적절한 데이터형을 선택할 수 있도록 다양한 크기의 정수형을 제공한다.
- sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
- 부호 있는 정수형과 부호 없는 정수형
- signed는 생략 가능
- unsigned : 부호 없는 정수형
정수의 2진 표현
- 부호 있는 정수형은 최상위 비트를 부호 비트로 사용
- 음수를 나타내기 위해 2의 보수를 사용
예제-정수의 2진 표현
#include <stdio.h>
int main(void)
{
printf(" 7 = %08x\n", 7);
printf("-7 = %08x\n", -7);
printf("7+(-10) = %08x\n", 7 + (-10));
return 0;
}
부호 없는 정수형
- 최상위 비트를 값을 저장하는 용도로 사용
예제-char형과 unsigned char형의 오버플로우, 언더플로우
#include <stdio.h>
int main(void)
{
char n = 128; // n에 유효 범위 밖의 값을 저장한다.
unsigned char m = 256; // m에 유효 범위 밖의 값을 저장한다.
char x = -129; // x에 유효 범위 밖의 값을 저장한다.
unsigned char y = -1; // y에 유효 범위 밖의 값을 저장한다.
printf("n = %d\n", n);
printf("m = %d\n", m);
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}
n = -128
m = 0
- 오버플로우
x = 127
y = 255
- 언더플로우
정수형의 유효 범위
- 정수형 변수에 유효 범위 밖의 값을 저장하면, 정수형의 크기에 맞춰 값의 나머지 부분을 잘라 버리고 유효 범위 내의 값만 저장된다.
오버플로우와 언더플로우
- 오버플로우
정수형의 최대값보다 큰 값을 저장할 때 값이 넘쳐흘러서 유효 범위 내의 값으로 설정되는 것
- 언더플로우
정수형의 최소값보다 작은 값을 저장할 때도 유효 범위 내의 값으로 설정되는 것
문자형
- 문자의 2진 표현 : ASCII 코드
- 제어 문자 : 0~31, 127
- 출력 가능한 문자 : 32~126
- 특수 문자
- ' '안에 역슬래시(\)와 함께 정해진 문자를 이용해서 나타낸다.
- '\' 다음에 8진수로 적어주거나 '\x' 다음에 16진수로 적어준다.
#include <stdio.h>
int main(void)
{
char a = 65;
char b = '65';
char c = 'A';
char d = '\101';
char e = '\x41';
int f = 0101;
int g = 0x41;
printf("%c\n", a);
printf("%c\n", b);
printf("%c\n", c);
printf("%c\n", d);
printf("%c\n", e);
printf("%c\n", f);
printf("%c\n", g);
}
'C > 학습내용' 카테고리의 다른 글
[C] 제어문(switch문) (0) | 2022.10.05 |
---|---|
[C] 제어문(if문) (0) | 2022.10.05 |
[C] 연산자(3) (1) | 2022.10.05 |
[C] 연산자(2) (1) | 2022.10.05 |
[C] 연산자(1) (0) | 2022.10.05 |