본 포스팅은 학교에서 수업을 듣고 정리한 내용입니다.
변수
변수는 프로그램에서 일시적으로 데이터를 저장하는 공간이다. 변수는 데이터가 입력되면 어딘가에 저장해야하만 다음에 사용할 수 있기에 필요하다.
변수와 상수
변수(variabel) : 저장된 값이 변경이 가능한 공간
상수(constant) : 저장된 값이 변경이 불가능한 공간
Ex)
/* 원의 면적을 계산하는 프로그램 */
#include <stdio.h>
int main(void)
{
float radius; // 원의 반지름
float area; // 원의 면적
printf("원의 면적을 입력하시요:");
scanf("%f", &radius);
area = 3.141592 * radius * radius;
printf("원의 면적: %f \n", area);
return 0;
}
자료형
자료형(Data Type) : 데이터의 종류
short, int, long <- 정수형 데이터
double, float <- 실수형 데이터
char : 문자형 데이터
다양한 자료형이 필요한 이유
상자에 물건을 저장하는 것과 같다.
물건이 상자보다 크면 들어가지 않는 것과 마찬가지로 주어진 데이터가 자료형에 맞지 않는다면 들어가지 않으며, 물건이 상자보다 작다면 공간이 낭비되는 것 과 같이 자료형이 데이터보다 더 크다면 공간이 낭비될 것이다.
자료형의 크기를 보는 코드 예제
#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(“long long형의 크기: %d\n”, sizeof(long long));
printf(“float형의 크기: %d\n”, sizeof(float));
printf(“double형의 크기: %d\n”, sizeof(double));
return 0;
}
정수형 자료
short(16비트, 2바이트) <= int(32비트, 4바이트) <= long(32비트, 4바이트) <= long long(64비트, 8바이트)
short grade; // short형의 변수를 생성한다.
int count; // int형의 변수를 생성한다.
long distance; // distance형의 변수를 생성한다.
정수형 자료형의 크기를 계산하는 프로그램
/* 정수형 자료형의 크기를 계산하는 프로그램*/
#include <stdio.h>
int main(void)
{
short year = 0; // 0으로 초기화한다.
int sale = 0; // 0으로 초기화한다.
long total_sale = 0; // 0으로 초기화한다.
long long large_value;
year = 10; // 약 3만2천을 넘지 않도록 주의
sale = 200000000; // 약 21억을 넘지 않도록 주의
total_sale = year * sale; // 약 21억을 넘지 않도록 주의
printf("total_sale = %d \n", total_sale);
return 0;
}
signed, unsigned 수식자
unsigned
- 음수가 아닌 값만을 나타냄을 의미
- unsigned int
signed
- 부호를 가지는 값을 나타냄을 의미
unsigned int speed; // 부호없는 int형
unsigned distance; // unsigned int distance와 같다.
unsigned short players; // 부호없는 short형
unsigned long seconds; // 부호없는 long형
오버플로우(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", s_money);
u_money = u_money + 1; // 오버플로우 발생
printf("u_money = %d", u_money);
return 0;
}
정수 상수
- 숫자를 적으면 기본적으로 int형이 된다. sum = 123
- 상수의 자료형을 명시하려면 다음과 같이한다. sum = 123L
- u또는 U는 unsigned int
- l 또는 L은 long
- ul 또는 UL은 unsigned long
10진법, 8진법, 16진법
/* 정수 상수 프로그램*/
#include <stdio.h>
int main(void)
{
int x = 10; // 10은 10진수이고 int형이고 값은 십진수로 10이다.
int y = 010; // 010은 8진수이고 int형이고 값은 십진수로 8이다.
int z = 0x10; // 010은 16진수이고 int형이고 값은 십진수로 16이다.
printf("x = %d", x);
printf("y = %d", y);
printf("z = %d", z);
return 0;
}
기호 상수
- 기호상수(symbolic constant) : 기호를 이용하여 상수를 표현한 것
- 가독성이 높아지며, 값을 쉽게 변경할 수 있다.
#include <stdio.h>
#define TAX_RATE 0.2 // 기호상수
int main(void)
{
const int MONTHS = 12; // 기호 상수
int m_salary, y_salary; // 변수 선언
printf( "월급을 입력하시요: "); // 입력 안내문
scanf("%d", &m_salary);
y_salary = MONTHS * m_salary; // 순수입 계산
printf("연봉은 %d입니다.", y_salary);
printf("세금은 %f입니다.", y_salary*TAX_RATE);
return 0;
}
정수 표현 방법
컴퓨터에서 정수는 이진수 형태로 표현되고 이진수는 전자 스위치로 표현된다.
양수
- 십진수를 이진수로 변환하여 저장하면 된다.
음수
- 보통은 첫번째 비트를 부호 비트로 사용한다.
컴퓨터는 덧셈만 할 수 있다.
- 컴퓨터는 회로의 크기를 줄이기 위하여 덧셈 회로만 가지고 있다.
- 뺄셈은 덧셈으로 변화하여 사용한다.
- 3-3 = 3+(-3)
/* 2의 보수 프로그램*/
#include <stdio.h>
int main(void)
{
int x = 3;
int y = -3;
printf("x = %08X\n", x); // 8자리의 16진수로 출력한다.
printf("y = %08X\n", y); // 8자리의 16진수로 출력한다.
printf("x+y = %08X\n", x+y); // 8자리의 16진수로 출력한다.
return 0;
}
부동 소수점형
컴퓨터에서 실수는 부동소수점형으로 표현
- 소수점이 떠서 움직인다는 의미
- 과학자들이 많이 사용하는 과학적 표기법과 유사
실수를 표현하는 방법
- 고정 소수점 방식
- 정수 부분을 위하여 일정 비트를 할당하고 소수 부분을 위하여 일정 비트를 할당
- 전체가 32비트이면 정수 부분 16비트, 소수 부분 16비트 할당
- 과학과 공학에서 필요한 아주 큰 수를 표현할 수 없다.
- 부동 소수점 방식
- 표현할 수 있는 범위가 대폭 늘어난다.
- 10^-38 ~ 10^38
/* 부동 소수점 자료형의 크기 계산*/
#include <stdio.h>
int main(void)
{
float x = 1.234567890123456789;
double y = 1.234567890123456789;
printf("float의 크기=%d\n", sizeof(float));
printf("double의 크기=%d\n", sizeof(double));
printf("x = %30.25f\n",x);
printf("y = %30.25f\n",y);
return 0;
}
부동 소수점의 오버플로우
#include <stdio.h>
int main(void)
{
float x = 1e39;
printf("x = %e\n",x); // x = 1.#INF00e+000
}
부동 소수점의 언더플로우
#include <stdio.h>
int main(void)
{
float x = 1.23456e-38;
float y = 1.23456e-40;
float z = 1.23456e-46;
printf("x = %e\n",x);
printf("y = %e\n",y);
printf("z = %e\n",z);
}
/*
x = 1.234560e-038
y = 1.234558e-040
z = 0.000000e+000
*/
부동소수점형 사용시 주의 사항
오차가 있을 수 있다.
부동소수점 연산에서는 오차가 발생한다.
아래 코드에서는 5.0이 아니라 0으로 계산한다.
#include <stdio.h>
int main(void)
{
double x;
x = (1.0e20 + 5.0)-1.0e20;
printf("%f \n",x);
return 0;
}
문자형
- 문자는 컴퓨터보다는 인간에게 중요
- 문자도 숫자를 이용하여 표현
- 공통적인 규격이 필요 -> 아스키 코드(ASCII : American Standard Code for Information Interchange)
- 아래는 아스키 코드의 일부
char 형을 사용하여 문자를 저장한다.
char code;
code = ‘A’;
/* 문자 변수와 문자 상수*/
#include <stdio.h>
int main(void)
{
char code1 = 'A'; // 문자 상수로 초기화
char code2 = 65; // 아스키 코드로 초기화
printf(“code1 = %c\n", code1);
printf(“code2 = %c\n", code2);
}
1과 '1'의 차이점은?
1은 정수이고 '1'은 문자를 나타낸다.
제어 문자
출력 목적이 아니라 제어 목적으로 사용되는 문자들
Ex) 줄바꿈, 탭, 벨소리, 백스페이스
#include <stdio.h>
int main()
{
int id, pass;
printf("아이디와 패스워드를 4개의 숫자로 입력하세요:\n");
printf("id: ____ \b\b\b\b");
scanf("%d", &id);
printf("pass: ____ \b\b\b\b");
scanf("%d", &pass);
printf(“\a입력된 아이디는 \”%d\”이고 패스워드는 \”%d\”입니다.", id, pass);
return 0;
}
아이디와 패스워드를 4개의 숫자로 입력하세요:
id: 1234
pass: 5678
입력된 아이디는 "1234"이고 패스워드는 "5678"입니다.
#include <stdio.h>
int main()
{
char code = 'A';
printf("%d %d %d \n", code, code+1, code+2); // 65 66 67이 출력된다.
printf("%c %c %c \n", code, code+1, code+2); // A B C가 출력된다.
return 0;
}
/*
65 66 67
A B C
*/
'Programming Language > C & C++' 카테고리의 다른 글
[C] C언어 대학교 실습 과제 (0) | 2023.12.28 |
---|---|
[C] C언어의 수식과 연산자 (0) | 2023.11.21 |
[C] C언어 실습 - 1 (0) | 2023.10.26 |
[C] 프로그램 작성 과정 (0) | 2023.10.26 |
[C] C언어 프로그래밍 기초 요소 : 주석, 변수, 상수, 간단한 연산 (0) | 2023.09.09 |