Programming/컴퓨터프로그래밍및실습

[컴프실] 제4장: 변수와 자료형

leziwn.cs 2023. 7. 3. 11:40
변수
  • 컴퓨터 프로그램은 값을 저장하기 위하여 변수(variable)을 사용한다.
  • 변수는 메인 메모리(main memory)에 만들어진다.

 

변수와 상수
  • 변수(variable): 저장된 값의 변경이 가능한 공간
  • 상수(constant): 저장된 값의 변경이 불가능한 공간
/* 원의 면적을 계산하는 프로그램 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	double radius;
	double area;

	printf("원의 반지름을 입력하세요: ");
	scanf("%lf", &radius);

	area = radius * radius * 3.14;
	printf("원의 면적: %f\n", area);

	return 0;
}

 

자료형(data type)
  • 자료형(data type): 데이터의 타입(종류)
  • short, int, long: 정수형 데이터(integer type)
  • float. double: 부동소수점형 데이터(floating-point type)
  • char: 문자형 데이터(character type)

 

자료형의 크기
  • sizeof 연산자: 변수나 자료형의 크기를 바이트 단위로 변환한다.
/*자료형의 크기*/
#include <stdio.h>

int main(void)
{
	int x;
	printf("변수x의 크기: %d\n", sizeof(x));

	printf("char형의 크기: %d\n", sizeof(char));
	printf("int형의 크기: %d\n", sizeof(int));
	printf("short형의 크기: %d\n", sizeof(short));
	printf("long형의 크기: %d\n", sizeof(long));
	printf("float형의 크기: %d\n", sizeof(float));
	printf("double형의 크기: %d\n", sizeof(double));

	return 0;
}

 

/*정수형 자료형의 크기를 계산하는 프로그램*/
#include <stdio.h>

int main(void)
{
	short year = 0; //0으로 초기화한다.
	int sale = 0; 
	long total_sale = 0;
	long long large_value = 0;

	year = 10; //약 3만2천을 넘지 않도록 주의!
	sale = 200000000; //약 21억을 넘지 않도록 주의!
	total_sale = year * sale;

	printf("total sale = %d\n", total_sale);

	return 0;
}

 

Signed, Unsigned 수식자
  • signed: 음수가 아닌 값만을 나타냄
  • unsigned: 부호를 가지는 값을 나타냄
/* Unsigned */
#include <stdio.h>
int main(void)
{
	unsigned int speed = 10; //부호 없는 int형
	unsigned distance = 20; // == unsigned int distance

	printf("%u\n", speed); //unsigned에서 %u를 사용하면 무조건 양수가 출력됨
	printf("%d\n", distance); //unsigend에서 %d를 사용하면 음수가 출력될 수 있음

	return 0;
}

 

오버플로우(overflow)

: 변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생

/*오버플로우 확인하기*/
#include <stdio.h>
#include <limits.h>

int main(void)
{
	short s_money = SHRT_MAX; //최대값으로 초기화: 32767
	unsigned short u_money = USHRT_MAX; //최대값으로 초기화: 65535

	s_money = s_money + 1; //오버플로우 발생
	printf("s_money = %d\n", s_money);

	u_money = u_money + 1; //오버플로우 발생
	printf("u_money = %d\n", u_money);

	return 0;
}

 

정수 상수
  • 숫자를 적으면 기본적으로 int형이 된다: sum = 123; //123은 int형
  • 상수의 자료형을 명시하려면, 다음과 같이 해야 한다: sum = 123L; //123은 long형

상수의 자료형

 

10진법, 8진법, 16진법

10진법, 8진법, 16진법

/*정수 상수 프로그램*/
//10진수, 8진수, 16진수
#include <stdio.h>

int main(void)
{
	int x = 10; //10 == 10진수, int형, 값은 10진수로 10
	int y = 010; //010 == 8진수, int형, 값은 10진수로 8
	int z = 0x10; //0x10 == 16진수, int형, 값은 10진수로 16

	printf("x=%d\n", x);
	printf("y=%d\n", y);
	printf("z=%d\n", z);

	return 0;
}

 

기호 상수

: 기호를 이용하여 상수를 표현한 것

  • 가독성이 높아진다.
  • 값을 쉽게 변경할 수 있다.
  • #define EXCHANGE_RATE 1120
  • const int EXCHANGE_RATE = 1120;
/*기호 상수*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define TAX_RATE 0.2 //기호 상수: TAX_RATE

int main(void)
{
	const int MONTHS = 12; //기호상수: MONTHS
	int m_salary, y_salary;

	printf("월급을 입력하세요: ");
	scanf("%d", &m_salary);

	y_salary = m_salary * 12;
	printf("연봉은 %d입니다.\n", y_salary);
	printf("세금은 %f입니다.\n", y_salary * TAX_RATE);

	return 0;
}

 

정수 표현 방법
  • 양수: 십진수 --> 이진수
  • 음수: 2의 보수

▶ 2의 보수 == 1의 보수 + 1

/* 2의 보수 프로그램*/
#include <stdio.h>

int main(void)
{
	int x = 3;
	int y = -3;

	//16진수로 출력: %X
	printf("x=%08X\n", x); //8자리 16진수로 출력
	printf("y=%08X\n", y);
	printf("x+y = %08X\n", x + y);

	return 0;
}

 

실수 표현 방법
  • 부동소수점 방식: 부호비트 + 지수부분 + 가수부분

▶ 실수를 출력하는 형식 지정자

  • %f
  • %e
/* 부동소수점 */
#include <stdio.h>
int main(void)
{
	float value = 0.1;
	printf("%20f\n", value); //%20f == 소수점 이하 20자리까지 출력

	return 0;
}

 

문자형
  • ASCII  코드

▶ 문자 변수: char형을 사용하여 문자 저장

  • char code = A;
/* 문자 변수, 문자 상수*/
#include <stdio.h>
int main(void)
{
	char code1 = 'A'; //문자 상수로 초기화
	char code2 = 65; //ASCII 코드로 초기화

	printf("code1 = %c\n", code1);
	printf("code2 = %c\n", code2);
	//'A', 65 모두 A로 출력됨

	return 0;
}

 

제어 문자

: 인쇄 목적이 아니라, 제어 목적으로 사용되는 문자들

예) 줄바꿈 문자, 탭 문자, 벨소리 문자, 백스페이스 문자

/* 백스페이스: 커서의 위치를 현재 라인에서 설정된 다음 탭 위치로 옮긴다 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	int id, pass;

	printf("아이디와 패스워드를 4개으 숫자로 입력하세요: \n");

	printf("id:____\b\b\b\b");
	scanf("%d", &id);

	printf("password:____\b\b\b\b");
	scanf("%d", &pass);

	printf("입력된 아이디는 \"%d\"이고, 패스워드는 \"%d\"입니다.\n", id, pass);

	return 0;

}

 

정수형으로서의 char형
#include <stdio.h>
int main(void)
{
	char code = 'A';
	printf("%d\t%d\t%d\n", code, code + 1, code + 2); //65 66 67
	printf("%c\t%c\t%c\n", code, code + 1, code + 2); //A B C
	//\t: 띄어쓰기

	return 0;
}

 

변수의 초기값
/* 변수의 초기값 설정*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int x, y, z;
	int sum = 0; //변수는 사용하기 전에 반드시 초기화 시켜야 함!

	printf("3개의 정수를 입력하세요(x, y, z): ");
	scanf("%d%d%d", &x, &y, &z);
	sum += x; //sum == sum + x
	sum += y;
	sum += z;

	printf("3개의 정수의 합은 %d\n", sum);

	return 0;
}