JUST GO

[C] C언어와 프로그래밍 개요 본문

C/학습내용

[C] C언어와 프로그래밍 개요

root_go 2022. 10. 5. 09:35

변수

- 어떤 값을 저장하기 위한 공간

- 변수를 사용하려면 변수명과 데이터형(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