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진수
#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;
}