Transcript C 03
2007 1학기
03 변수와 자료형
1
2장 복습
/*8. 여러 변수를 선언하여 각각에 우리 가족의 나이를 저장하고, 1년을
365일로 계산해서 우리 가족이 현재까지 살아온 일 수를 모두 더한
합을 출력하는 프로그램을 작성하시오. */
#include <stdio.h>
int main(void)
{
int father = 40, mother = 40;
int brother = 15, syster = 17, i = 19;
printf("우리 가족이 현재까지 살아온 일 수는 %d일입니다.\n",
(father + mother + brother + syster + i) * 365);
return 0;
}
2
Perfect C
/* 9. 현금 56,970원을 각각 만원짜리, 오천원짜리, 천원짜리,
백원짜리, 그리고 십원짜리로 나누어 가장 적은 수로 나눈다면
각각 몇 개인지 출력하는 프로그램을 작성하시오. */
#include <stdio.h>
int main(void)
{
int change = 56970, count;
printf("%d원은\n", change);
count = change / 10000;
printf("만원짜리 %d개 \n", count);
change = change - count * 10000;
count = change / 5000;
printf("오천원짜리 %d개 \n", count);
change = change - count * 5000;
// 생략
count = change / 10;
printf("십원짜리 %d개로 구성됩니다.\n", count);
change = change - count * 10;
return 0;
}
3
Perfect C
변수와 자료 유형
변수
프로그램에서 자료 값을 임시로 기억할 수 있는 저장 공간을
변수(variables)
변수(Variables)는 컴퓨터의 메모리인 RAM(Random Access
Memory)에 저장
물건을 담는 박스라고 생각한다면 박스의 크기에 따라 담을 물건이 제한됨
자료유형
이 변수에 저장되는 값의 종류를 자료 유형(data types) 또는 간단히
자료형이라고도 함
C 언어에는 자료형을 크게 기본 자료형(basic type)과 유도 자료형
(derived type)으로 구분
• 유도 자료형에는 배열, 구조체, 공용체 등
4
Perfect C
자료유형의 종류와 크기
적당한 자료유형
5
Perfect C
자료유형의 종류
모두 12가지
변수가 가질 값의 종류가 자료형
변수의 자료형에 따라 변수가 저장될 공간의 크기와 내부 저장
방식이 결정
• [ ] 괄호는 생략 가능하다는 것을 의미
문장 char c;는 변수 이름 c를 자료형 char로 선언하는 문장
자료형 변수이름;
char c;
6
Perfect C
/* 실수를 저장하는 변수 두 개를 만들어 각각 5.25와 3.4*1000을
저장하여 두수의 가감승제의 연산결과를 출력하는 프로그램을 작성하시오. */
#include <stdio.h>
int main(void)
{
// num2에는 3.4*1000 저장
float num1 = 5.25, num2 = 3.4e3;
printf("%f + %f = %f\n", num1, num2, num1 + num2);
printf("%f - %f = %f\n", num1, num2, num1 - num2);
printf("%f * %f = %f\n", num1, num2, num1 * num2);
printf("%f / %f = %f\n", num1, num2, num1 / num2);
return 0;
}
/* 출력결과
5.250000 + 3400.000000 = 3405.250000
5.250000 - 3400.000000 = -3394.750000
5.250000 * 3400.000000 = 17850.000000
5.250000 / 3400.000000 = 0.001544
*/
7
Perfect C
변수 선언
선언
사용하기 전에 반드시 선언(declaration)을 먼저 하고 이용
선언도 하나의 문장으로 반드시 세미콜론으로 종료
변수 선언된 이후에 중요한 세 가지(자료 유형, 이름, 값) 의미를 갖음
자료유형12가지중의하나 변수이름;
int money;
변수의 초기 값
변수를 선언하면서 바로 값을 저장하려면, 다음과 같이 변수이름에
이어서 대입연산자 =와 원하는 값을 기술
int
year = 12;
메모리 공간의 확보
변수 선언은 메모리에 자료 유형에 맞는 크기의 저장 공간을 확보하라는
중요한 의미의 문장
8
Perfect C
변수 선언 위치
선언 시 주의
변수의 선언은 반드시 main()
함수의 첫 줄에서부터 시작하며,
선언문이 아닌 다른 문장이 먼저
나오면 그 이후에는 선언문 이용
불가능
…
int main(void)
{
변수 선언문;
…
일반 문장;
…
}
…
다음 구문은 컴파일 시간에 에러
9
int main(void)
{
int year;
year = 2005;
int month;
…
}
Perfect C
상수 선언
상수(constant number)
변수 값으로 초기 값을 저장 한 후 수정할 수 없는 수
프로그램에서 변수 선언 이후, 수정할 필요가 없는 수를 상수로
정의하여 이용
선언
변수를 상수(constant number)로 선언하기 위해서는 변수 선언
시 키워드 const를 자료유형 앞에 기술
const
double
phi = 3.14;
반드시 선언하면서 초기 값으로 값을 저장해야 하며, 다음은 에러
const double
phi = 3.14;
10
phi;
Perfect C
예제 소스
11
/* 1년이 몇 초인지 계산하는 프로그램을 작성하시오. */
#include <stdio.h>
int main(void)
{
//초와 분을 상수 선언
const unsigned short SEC = 60, MIN = 60;
//시간을 상수선언
const unsigned int HOUR = 24;
//1년 날짜를 상수선언
const unsigned long DAY = 365;
//1년을 초로 계산할 저장장소 변수선언
unsigned sumday;
}
sumday = DAY * HOUR * MIN * SEC;
printf("1년을 초로 환산하면 %d초 입니다.\n", sumday);
return 0;
Perfect C
정수형 6가지
정수형
정수형은 큰 의미에서는 문자형을 포함한다고 보고,
좁은 의미에서는 문자형을 제외한 순수하게 정수를 저장하는 자료
유형이라고 볼 수 있음
좁은 의미의 정수형은 모두 6가지
12
Perfect C
signed int
자료형 signed int의 범위
정수 자료형 signed int의 크기가 32 비트이면 음수부터 양수까지
표현이 가능하므로 -231에서부터 231-1까지 표현이 가능
MSB
• 가장 왼쪽의 비트 부호 비트(Signed Bit), 또는 최상위 비트(Most
Significant Bit)
• 부호를 결정하는 비트
자료형 unsigned int의 범위
0과 양수만 표현
정수 자료형 unsigned int에서는 최상위 비트(Most Significant Bit)가
부호 비트로서의 역할을 상실
13
Perfect C
short과 long
short int
정수 자료형 signed short의 크기가 16 비트이면 음수부터
양수까지 표현이 가능
• -215에서부터 215-1까지 표현이 가능
• 마찬가지로 unsigned short의 범위는 다음
-215 <=
signed short int
0
<= unsigned short int
<=
<=
215-1
216-1
long int
정수 자료형 signed long의 크기가 32 비트이면 음수부터
양수까지 표현이 가능
• -231에서부터 231-1까지 표현이 가능
• 마찬가지로 unsigned long의 범위는 다음
-231 <=
0
<=
14
signed long int
<= 231-1
unsigned long int <= 232-1
Perfect C
컴퓨터의 자료표현
자료표현 원리
2진수 체계를 사용
비트와 바이트
bit
• Binary Digit, 0 또는 1의 두 개 정보 표현하는 정보의 최소 단위
byte
• 연속된 8개의 비트
워드
• 연속된 4 개의 바이트, 총 32비트
• 실질적으로 시스템마다 워드의 크기는 다를 수 있음
15
Perfect C
저장단위의 크기
단위
정보 용량의 비교
16
Perfect C
진법과 수의 구성
10진법
0에서 9까지의 수를 사용하며, 이 10 가지의 수를 한 자리의 기본
단위로 하는 진법
2진법
0과 1의 조합으로 숫자를 표시하는 방법
컴퓨터의 자료 표현은 한 비트가 두 가지 표현이 가능
16진법
0에서 9, A에서 F까지
17
Perfect C
2, 8, 16진수간 상호관계
2진수, 8진수 그리고 16진수 사이의 관계
2진수의 4자리씩을 16진수로 변환하면 쉽게 2진수를 16진수로
변환이 가능
2진수의 3자리씩을 8진수로 변환하면 쉽게 2진수를 8진수로
변환이 가능
26.625를 각각 2진수, 8진수, 16진수로 표현하면
18
Perfect C
2의 보수
2의 보수(2’s complement)
음수를 표현하는 방식 중 가장 많이
사용되는 방식이 2의 보수
19
Perfect C
2의 보수 계산 방법
음수의 이진수 표기인 2의 보수를 구하는 방법 1
2n에서 음수의 절대값을 빼는 방법
• 여기에서 n은 숫자가 표현되는 비트의 개수
• 예를 들어 –4를 4비트로 2의 보수로 표현하자면, 표현되는 비트의
수가 4개이므로 24 – 4 = 12 = 1100
2의 보수를 구하는 방법 2
예를 들어 –4를 4비트로 2의 보수로 표현하자면
20
Perfect C
overflow
오버플로우
정수 자료형에서 저장 할 수 있는 범위의 수보다 더 큰 수나 작은 수를
저장한다면 오버플로우(overflow)가 발생
표현할 수 있는 수의 범위가 넘어가면 그 범위 내에서 값이 순환
singed int의 순환
2 BIT 숫자 표현 및 오버플로우 예
+1 : 10(-2) 01(1) 00(0) 11(-1)
01(1) 00(0) 11(-1) 10(-2)
-1 : 00(0) 11(-1) 10(-2) 01(1)
21
Perfect C
문자형의 표현
char
문자 유형은 모두 1 바이트, 즉 8 비트로 구성되며, 다음과 같이 세 가지
종류
char
signed char
unsigned char
컴파일러에 따라 char는 signed char, unsigned char표기
문자의 내부 값
메모리에는 문자가 저장되는 것이 아니라 문자에 대응되는 정수 저장
char c = ‘a’;
따라서 문자형 자료형은 넓은 의미로 정수형 자료형
문자형 변수는 내부적으로는 정수형이므로 산술연산이 가능
• 문자 ‘A’의 다음 두 번째 문자인 ‘C’가 출력
char uppercase = ‘A’;
printf("대문자 C 출력 > %c\n", uppercase+2);
22
Perfect C
아스키코드표
char ch = 'A'; // char ch = ‘\101’; char ch = 0x41;
printf(" %c : %o, %x, %d", ch, ch, ch, ch); //
ch = ch + 1;
printf(" %c : %o, %x, %d", ch, ch, ch, ch); //
23
char ch = 65;
A : 101, 41, 65
B : 102, 42, 66
Perfect C
문자 코드
출력제어문자
예제 3-5
24
Perfect C
부동 소수형
float, double, long double
float, double, long double의 순으로 표현 범위가 크고, 세밀
float
<
double
float 의 저장공간 크기
<=
long double
: 32비트(4바이트)
• 자료형 float의 표현 범위는 대략 10-38에서 1038이고, 소수점 이하
6자리까지 표현이 가능
double 의 저장공간 크기
: 64비트(8바이트)
• 자료형 double은 float보다 표현 범위가 크고, 정밀도도 정확하여
표현
• 범위는 대략 10-308 에서 10308 이고, 소수점 이하 15자리까지 표현
long double은 double보다 더 큰 저장공간을 할당하려는
의도에서 만들어졌으나 컴파일러마다 다름
• 특히 비쥬얼 C++에서는 long double도 double 과 마찬가지로
64비트의 저장공간을 할당
25
Perfect C
12가지 자료형
기본 자료형
기본 자료형은 모두 12가지로 Visual C++인 경우
26
Perfect C
예제 소스
sizeof.c
기본 자료형 12가지의 저장 공간의 크기를 출력하는 프로그램
저장공간의 크기를 알 수 있는 연산자로 sizeof를 이용
연산자 sizeof 다음의 변수 이름으로 둘러싸는 괄호는 생략 가능
• 결과 값은 크기의 바이트 값
sizeof 이용법
int year = 2007;
printf(“int : %3d bytes\n”, sizeof(year)); // sizeof (변수)
printf(“int : %3d bytes\n”, sizeof(year)); // sizeof 변수
printf(“int : %3d bytes\n”, sizeof(int));
// sizeof (자료형 키워드)
printf(“ long double : %3d bytes \n”, sizeof(long double);
27
Perfect C
변환명세
출력 값 종류에 따라 표현
변환 명세에는 출력하려는 값의 종류에 따라 여러 문자를
이용한다. 즉 변환 명세는 %와 한 문자나 두 개 문자를 조합해서
출력 값을 표현
printf
printf
printf
printf
(“
(“
(“
(“
…
…
…
…
%d … “, 정수표현식);
%c … “, 문자표현식);
%f … “, 실수(float)표현식);
%lf … “, 실수(double)표현식);
제어문자열 내부의 변환 명세와 표현식에서, 그 수와 값의 종류가
서로 순서대로 일치해야 함
printf (“ … %d … %f …“, 정수표현식, 실수표현식);
기타 : %ld, %u, %o, %x
%3.2f // 18.50000 갤론의 휘발유는 70.02 리터 입니다.
28
Perfect C
프로그램 연습
저장공간의 내부 표현
short int a = -3;
unsigned b = 24;
자료형 long과 unsigned에 각각 자료 값 22억을
저장하고 각 값을 출력
자료형 char에 문자 ‘A’를 저장하고 문자와 코드 값을
각각 출력
29
Perfect C
프로그램 연습
1. 25인치의 길이를 센티미터(cm)로 계산하여 출력하는 프로그램을
작성하시오.(단 1인치는 2.54 cm 이며, 상수선언을 하시오.)
▶ 출력 : 25 인치(inch)는 63.500000 센티미터(cm) 입니다.
2. 18.5갤론(gallon)의 휘발유를 리터(liter)로 계산하여 출력하는
프로그램을 작성하시오.(1갤론은 3.785리터이다. 상수선언을
하시오)
▶출력 : 18.50000 갤론의 휘발유는 70.02 리터 입니다.
3. 78.5킬로미터(km)의 속도를 마일(mile)로 계산하여 출력하는
프로그램을 작성하시오.(1마일은 1.609km이다.)
▶출력 : 78.5 킬로미터의 속도는 48.91마일입니다
4. 57.82에이커((acre)의 면적을 평방미터(㎡)로 계산하여 출력하는
프로그램을 작성하시오.(1에이커는 약 4,047㎡이다.)
▶출력 : 57.82 에이커의 면적은 233997.54 평방미터입니다.
5. 문자 ‘a’를 담는 변수를 하나 만들고, 이 변수의 산술연산을 이용하여
문자 ‘b’, ‘c’, ‘f’, ‘z’를 출력하는 프로그램을 작성하시오.
6. 아스키문자에서 대문자 26개를 문자, 팔진수, 십육진수, 십진수의
코드 값으로 출력하는 프로그램을 작성하시오.
30
Perfect C
노력 없이 이룰 수 있는 것 아무것도
없다.
31