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