최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

Download Report

Transcript 최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어
문제해결에서 프로그래밍까지
개정판
3장 : 자료형과 표현
도서출판 - 인터비젼
1
3장 자료형과 표현

학습목표




1.
2.
3.
4.
자료형과 변수에 대해 이해한다.
기본 자료형에 대해 이해한다.
형변환 및 열거형에 대해 이해한다.
변수의 통용 범위에 대해 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
목차

3장 자료형과 변수
 예습시간
–
–
–
–
–
–
1. 기본 자료형을 이해하자!
[기초다지기] 자료형 익히기
2. 자료형과 변수 그리고 형변환
[기초다지기] 변수와 형변환 익히기
3. 기억 클래스와 변수의 통용범위
[기초다지기] 변수 통용번위 익히기
 실습시간
– 자료형과 자료형 변환 활용
– 변수 그리고 기억 클래스 활용
 연습시간
– 데이터형 선택
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
3
예습시간 – 1 교시
기본 자료형을 이해하자!
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4
기본 자료형을 이해하자!

학습 개요
 C언어가 제공하는 자료형의 종류 식별
 기본 자료형과 표현식 그리고 표현 범위 이해
 열거형에 대한 이해
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
5
기본 자료형을 이해하자!

C 언어에서 제공되는 자료형
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
6
기본 자료형을 이해하자!

1.정수형 (int, long)
 정수 값을 표현하는 자료 형
 소수점이 없는 음수, 0, 양수를 가진다.
 정수의 표현 범위
 정수 자료형 수정자 (unsigned)
–
–
–
–
자료의 값을 양수로 취급
unsigned short : 0 ~ 65,535 ( 0 ~ 216)
unsigned int : 0 ~ 216 또는 0 ~ 232
unsigned long : 0 ~ 232
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
7
기본 자료형을 이해하자!

2. 문자형(char)





ASCII 코드 표 기반의 하나의 문자를 저장하는 자료형
문자의 크기 8bit
문자형에 정수 값을 표현할 수 있다. ( -128~127 크기 )
unsigned 수정자를 포함할 수 있다.
문자형 표현 범위
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
8
기본 자료형을 이해하자!

3.실수형(float, double)





소수점이 존재하는 수치 표현
float형 : 32bit를 이용한 실수 표현
double형 : 64bit를 통한 실수 표현
보다 큰수를 표현을 위해 수정자 long이 사용 가능하다.
실수형 표현범위
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
9
기본 자료형을 이해하자!

4.형 없음(void)
 특수 형으로 타입이 존재하지 않음을 이야기함
 주로 함수의 리턴 타입을 위해 정의됨
 예>
– void main(){…}

5.열거형(enum)




의미가 불분명한 수치 데이터에 의미 부여
정수 값 표현
프로그램을 읽기 쉽게 하는데 사용
예>
– enum season {Spring, Summber, Fall, Winter};
– 열거된 순서에의해 정수값 부여(0,1,2,3)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
10
[기초다지기] 자료형 익히기

1. 정수형의 데이터 저장 공간의 크기를 알아보자

분석
 sizeof()함수
– 해당 타입의 크기를 바이트(Byte) 단위로 반환
 부호 없는(unsigned) 형이나 부호 있는 형들 모두 동일한 크기
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
11
[기초다지기] 자료형 익히기

2. 정수형 데이터 공간에 표현 가능한 최대 최소 크기를 알아보자.

분석
 limits.h파일
– 자료형의 최대 최소값을 선언하고 있는 헤더파일
 unsigned 타입은 0부터 시작하여 양수 값의 표현
 printf()함수
– %d 형식 지정자는 부호 있는 정수를 표현
– %u는 부호 없는 정수 표현을 위해 사용
– %lu는 long형의 unsigned 값을 표현하기 위해 사용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
12
[기초다지기] 자료형 익히기

3. 문자형 자료의 크기와 값을 출력하자.
#include <stdio.h>
#include <limits.h>
void main(){
// 문자의 크기와 최대 최소값 얻기
printf("char형의 크기= %d Byte \n", sizeof(char));
printf("char형의 최소값 = %d , 최대값 = %d \n", CHAR_MIN, CHAR_MAX);
printf("unsigned char형의 최대값 = %u \n", UCHAR_MAX);
printf("ASC 값 65의 문자는 %c 이다. \n", 65);
char형의 크기 = 1 Byte
printf("문자 B의 ASC 코드 값은 %d 이다. \n", 'B');
char형의 최소값 = -127 , 최대값
}

분석
 문자형의 크기 : 1Byte
 표현 범위 :
= 127
unsigned char형의 최대값 = 255
ASC 값 65의 문자는 A이다.
문자 B의 ASC 코드 값은 66이다.
– 부호 있는 경우 :최대값은 -127에서 128
– 부호 없는 형 : 0에서 255
 printf()에서 한 문자를 출력
– %c의 형식 지정 문자를 사용
– %d를 사용할 경우 해당 문자에 해당되는 ASCII 코드 값을 출력
 문자형은 문자나 작은 크기의 숫자를 기억하기 위해 사용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
13
[기초다지기] 자료형 익히기

4. 실수 자료형의 크기에 대해 알아보자
#include <stdio.h>
void main(){
// 각 타입의 크기 구하기
printf(" float 타입의 크기 = %d Byte \n", sizeof(float));
printf(" double 타입의 크기 = %d Byte \n", sizeof(double));
printf(" long double 타입의 크기 = %d Byte \n",
sizeof(long
float 타입의
크기 double));
= 4 Byte
}
double 타입의 크기 = 8 Byte

실수형 : float, double, long double
long double 타입의 크기 = 8 Byte
 각각의 자료형의 크기는 4, 8, 8로 표현

ANSI 표준에서 long double은 double 보다 크거나 같은 크기를
가지지만 실제 사용되는 운영체제나 컴파일러의 특성에 따라
약간의 차이점을 가짐

윈도우 계열의 PC에서는 double과 long double은 동일한 크기
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
14
[기초다지기] 자료형 익히기

5. 열거형의 활용 방법을 익히자.
#include <stdio.h>
enum season {Spring, Summer, Fall=5, Winter};
void main(){
// 열거형 값 구하기
printf(" Spring 은 정수 값 %d 이다. \n", Spring);
printf(" Summer 은 정수 값 %d 이다. \n", Summer);
printf(" Fall 은 정수 값 %d 이다. \n", Fall);
printf(" Winter 은 정수 값 %d 이다. \n", Winter);
}

열거형 선언을 위한 키워드 : enum

예 : season의 열거형
Spring은 정수 값 0이다.
Summer은 정수 값 1이다.
Fall은 정수 값 5이다.
Winter은 정수 값 6이다.
 Spring, Summer, Fall, Winter라는 의미를 부여
 순서대로 Spring은 정수값 0의 의미를 가지며 나머지는 1씩 증가된
정수 값을 가짐
 정수값에 의미를 부여하여 프로그램에 사용
 Fall=5의 의미
– Fall의 정수값을 5로 설정, 이후 Winter는 5에서 1 증가한 6값
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
15
예습시간 – 2 교시
자료형과 변수 그리고 형변환
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
16
자료형과 변수 그리고 형변환

학습 개요
 기본 자료형을 위한 변수의 선언과 할당 방법 이해
 기본형 관련 수식의 이해
 변수들간의 형 변환 이해
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
17
자료형과 변수 그리고 형변환

변수의 선언과 할당
 변수
– 어떤 값을 저장하기 위한 공간의 이름
– C언어는 변수의 사용을 위해서는 반드시 선언되어야 한다.
 변수의 선언
– <변수의 자료형> 변수명[,변수명];
– 예>
» int iValue; // iValue의 이름을 가진 정수형 변수
» float fValue, fInput, fOutput; // 실수형 변수 3개 동시 선언
» unsigned short sValue; //sValue이름의 unsigned short 형 변수
– 변수 선언은 컴파일러에게 미리 자료형을 알려줌으로써 기억
장소를 확보할 수 있게 한다.
– 사용자에게 자료형과 변수의 잘못된 사용을 방지한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
18
자료형과 변수 그리고 형변환

변수의 선언과 할당
 변수 선언과 초기화
– 선언과 동시에 초기값 할당 방법
– 예>
» int iValue = 10;
» float fValue = 13.2, fInput, fOutput=0.0;
 변수에 값 할당
– 선언 후 변수에 값을 할당하는 방법
– 형식 : 변수 = 값
– 예>
» iValue = 34;
» fInput = 34.5;
» fOutput = iValue * fInput; // 34 x 34.5
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
19
자료형과 변수 그리고 형변환

자료의 형변환
 변수는 다양한 자료형을 가지고 있으며 이들 간의
연산에의해 자료형이 변경될 수 있다.
 C언어는 두가지 형태의 자료 변환 방법을 제공한다.
– 묵시적인 형변환
» 계산 결과에 의해 자동적으로 형이 변형됨
» 계산 결과는 값이 큰 자료형으로 자동 변환된다.
» 타입 변환 규칙
 char < short < int < long < float < double
 [자료형] < unsigned [자료형]
– 명시적인 형변환
» 사용자에의해 강제적으로 형을 변경함
» Cast 연산자 이용
» 변수 앞에 괄호를 포함한 자료형으로 변환 시킴
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
20
자료형과 변수 그리고 형변환

자료의 형변환
 묵시적 형 변환의 예
–
–
–
–
int x, y;
float z;
double result;
result = x * y + z;
 명시적 형 변환의 예
–
–
–
–
–
int x,y;
float z;
x = y + z;
x = y + (int) z;
x = (int)(y+z);
//1)Error
//2)OK
//3)OK
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
21
[기초다지기] 변수와 형변환 익히기

1, 자료형에 대한 변수 선언과 할당 방법을 익히자.
#include <stdio.h>
void main(){
// 정수와 실수형 변수 선언과 할당
int iValue;
double dValue, dInit = 3.84;
iValue = 40;
dValue = dInit * 3.54;
printf(" iValue = %d \n", iValue);
printf(" dValue = %f \n", dValue); // 단정도형 출력
printf(" dValue = %e \n", dValue); // 배정도형 출력
}

분석
iValue = 40
dValue = 13.593600
dValue = 1.359360e+001
 정수형 변수 iValue와 실수형 변수 dValue, dInit인 3개의 변수
 C에서 모든 변수는 선언 후 사용
 선언 방법
– 변수 이름만 쓰는 방법
– 선언과 동시에 초기값을 할당하는 방법( double dInit=3.84)
 할당연산자(=)를 통해 언제든 필요시 변수에 값을 할당 가능
 출력 구문 printf에서 실수값(float, double)의 출력은 %f나 %e
– %f 출력 : 단정도형 출력 , %e 또는 %E는 배정도 형 출력
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
22
[기초다지기] 변수와 형변환 익히기

2. 자료형들의 변환 과정을 이해하자.
#include <stdio.h>
void main(){
// 정수와 실수형 변수 선언과 할당
int iValue, iResult1, iResult2;
double dValue, dInit = 3.84;
iValue = 40;
dValue = iValue * dInit;
iResult1 = iValue * (int)dInit;
iResult2 = (int) (iValue * dInit);
printf(" dValue = %f \n", dValue);
printf(" iResult1 = %d \n", iResult1);
printf(" iResult2 = %d \n", iResult2);
}

dValue = 153.600000
iResult1 = 120
iResult2 = 153
정수형과 실수형 간의 형 변환 과정

dValue = iValue * dInit 문장
–
–

iResult1 = iValue * (int)dInit 문장
–
–

정수와 실수간의 곱을 한 후 결과를 dValue에 저장
정수와 실수의 곱셈은 두 타입 중 큰 타입으로 자동 형변환
(int)dInit는 실수값을 강제적인 형변환을 통해 정수 값으로 변화시킨 후 그 결과와 iValue값과 곱
두 값은 정수이므로 정수의 결과를 만들어내고 이것을 iResult1에 저장
iResult2 = (int)(iValue * dInit) 문장은 iValue와 dInit 곱
– 정수와 실수의 곱을 통해 실수값을 만듬
– 이후 (int)에 의해 만들어진 실수 값을 정수형으로 강제 형변환
– 실수값이 정수형으로 형변환 될 때 소수점 이하 자릿수는 모두 잘림
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
23
예습시간 – 3 교시
기억 클래스와 변수의 통용범위
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
24
기억클래스와 변수의 통용범위

학습 개요




함수의 기본 구조를 이해한다.
변수의 통용범위를 이해한다.
함수와 변수의 관계를 통해 변수의 사용방법을 익힌다.
기억클래스에 대해 알아본다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
25
기억클래스와 변수의 통용범위

함수의 선언과 사용
 C언어는 함수 기반 언어 이며 크게 라이브러리 함수와
사용자 정의 함수로 나누어진다.
 사용자 정의 함수 사용 예
#include <stdio.h>
void printInteger(int a, int b); // (1). 함수의 선언
void main(){
int a=10,b=20;
printInteger(10,20); // (3). 함수의 호출
}
void printInteger(int a, int b){ // (2). 함수의 구현
printf("first : %d second : %d \n",a,b);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
26
기억클래스와 변수의 통용범위

함수의 선언과 사용
 프로그램에서 함수의 사용은 3단계를 포함한다.
– 함수의 선언 (프로토타입)
» 사용하고자하는 함수의 프로토 타입을 선언
– 함수의 구현
– 함수의 호출
 함수의 구성 형식
– [리턴 형] [함수의 이름] ( [형식 매개 변수 리스트] ) {
–
문장;
–
...
–
[return] [리턴 형의 값] // 리턴형이 void 형일때 생략 가능
– }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
27
기억클래스와 변수의 통용범위

함수의 호출
 [리턴 변수] = [함수의 이름]( [실 매개 변수 리스트] );
 함수의 이름을 통한 함수 호출
 실 매개 변수
– 함수 호출에 전달되는 실제 값 리스트
 형식 매개 변수
– 함수호출 시 전달되는 실제 값을 받아들이는 형식 매개변수
 함수 호출 과정
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
28
기억클래스와 변수의 통용범위

지역 변수와 전역 변수
 변수의 선언 위치는 크게 함수의 내부와 함수의 외부로
나누어질 수 있다.
 지역 변수
– 함수의 내부에 선언된 변수
– 이 변수는 자신의 함수에서만 사용 가능한 변수
 전역 변수
– 함수 외부에 선언된 변수
– 선언 위치부터 모든 함수에서 사용할 수 있는 변수
 지역 변수와 전역 변수가 동일한 이름으로 동시에 존재할
경우 지역 변수를 사용한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
29
기억클래스와 변수의 통용범위

지역 변수와 전역 변수 사용 예







01
02
03
04
05
06
07
int globalVariable; // 전역 변수
void main(){
int localVariable; // main함수의 지역 변수
}
void functionA(){
int localVariable; // functionA의 지역 변수
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
30
기억클래스와 변수의 통용범위

기억 클래스
 변수의 기억 공간의 위치
 변수의 생존 기간 규정

C언어에서 변수 할당 가능 기억 공간
 메모리 스택 (Stack)
– 임시적 데이터를 저장하는 메모리 공간
 메모리의 정적 공간 (Heap)
– 영구적인 데이터를 저장하는 메모리 공간
 CPU의 레지스터
– CUP에 존재하는 아주 빠른 기억 공간
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
31
기억클래스와 변수의 통용범위

기억 클래스의 종류
기억클래스의 종류
auto
register
설 명
임시 저장 공간인 스택(Stack)에 저장
CPU 레지스터(Register)에 저장
static
메모리의 정적 공간에 저장(Heap)
extern
다른 곳에 이미 정의된 외부변수의 사용을 선언
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
32
기억클래스와 변수의 통용범위

auto 기억 클래스
 자동 변수
 주로 함수나 블록의 내부에 선언되며 그 함수의
내부에서만 유효한 특징을 가짐
 지역 변수의 역할
 auto 변수 선언 예
– void func(){
» auto int localVariable; // auto는 생략 가능하다. (함수 내부)
» {
»
auto int blockVariable; // 블록 내부에 선언된 auto 변수
» }
–}
 함수나 블록 내부의 선언 변수는 지역적인 특성 때문에
자동적으로 auto변수로 인식되며 생략 기능하다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
33
기억클래스와 변수의 통용범위

register 기억 클래스
 변수를 메모리 영역이 아닌 CPU 레지스터 영역에 기억
 빠른 처리 속도 제공 (주로 고속에 데이터 처리를 위해)
 register 클래스 사용시 제약사항
– 1) 시스템마다 한정된 레지스터 공간을 가지고 있기 때문에 많은
수의 레지스터 변수를 선언할 수 없다.
– 2) 한계를 초과하여 register 변수를 선언 시 초과된 부분은 auto
변수로 자동 변환한다.
– 3) register 변수로 선언된 변수의 주소 값을 참조할 수 없다.
– 4) 실수형 데이터는 register 로 지정할 수 없다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
34
기억클래스와 변수의 통용범위

static 기억 클래스
 static으로 선언된 변수는 영구적으로 기억공간에
존재한다.
 이러한 변수를 정적 변수라 한다.
 정적 변수는 선언 위치에 따라 두 가지 형태를 가진다.
– 전역적 정적 변수
» 함수 밖에서 선언되는 정적 변수로 모든 함수에 영향을 미친다.
– 지역적 정적 변수
» 함수나 블록 내부에 존재하는 정적 변수로 사용 범위가 해당 함수와
블록으로 제안되지만 그 값은 계속 지속한다.
» 행당 함수의 종료 후에도 지속적으로 값을 유지한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
35
기억클래스와 변수의 통용범위


static 기억 클래스
활용 예











static int value; // 전역적 정적 변수
void main(){
value=1;
func();
func();
}
void func(){
static int data;
data = data + value;
value =10;
}
 이 프로그램 실행 후 value = ①_________ 과
 data = ②___________값을 가진다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
10
11
36
기억클래스와 변수의 통용범위

extern 기억 클래스
 여러 파일에서 공유 될 수 있는 기억 클래스
 전역 변수의 참조는 한 개의 파일 내에서만 가능
 extern 기억 클래스를 활용한 파일간의 변수 공유
이 프로그램을 실행 시킨 후 결과는 어떻게 무엇인가 ?
③_____________________________
100
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
37
기억클래스와 변수의 통용범위

변수와 선언위치 그리고 기억 클래스 관계
선언 위치
함수의 외부
함수 또는
블록 내부
기억 클래스
기억 장소
수 명
없 음
정적영역(Heap)
영구적
모든 함수에 전역적 사용
static
정적영역(Heap)
영구적
모든 함수에 전역적 사용
extern
X
X
없 음
임시영역(Stack)
임시적
선언된 함수나 블록 내부
auto
임시영역(Stack)
임시적
선언된 함수나 블록 내부
register
CPU Register
임시적
선언된 함수나 블록 내부
static
정적영역(Heap)
영구적
선언된 함수나 블록 내부
extern
X
X
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
사용범위(scope)
외부에 정의된 변수를 선언된 파일의 모든 함수에 전
역적 사용
외부에 정의된 변수를 선언된 파일의 함수나 블록 내
부에서 사용
38
[기초 다지기] 변수 통용 범위 익히기

1. 사용자 정의 함수를 사용
#include <stdio.h>
void main(){
int x=3, y=5, z=7;
int result;
result = x + y;
result = result + z;
printf(" %d + %d + %d = %d \n", x, y, z, result);
}
#include <stdio.h>
int sum(int x, int y); // sum 함수의 선언 부
void main(){
int x=3, y=5, z=7;
int result;
특정 부분을 함수로 구성하기
위해서는 함수의 선언, 구현 그리고
호출부로 나누어 작성
result = sum(x, y); // sum 함수의 호출 부
result = sum(result ,y);
printf(" %d + %d + %d = %d \n", x, y, z, result);
}
// sum 함수의 구현 부
int sum(int x, int y){
return x + y;
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
39
[기초 다지기] 변수 통용 범위 익히기

2.지역 변수와 전역 변수 활용하기
#include <stdio.h>
//함수의 원형
void functionA();
Main local 값 = 30, gValue 값 = 50
void functionB();
functionA local 값 = 40 , gValue 값 = 20
//전역 변수 선언
functionB gValue 값 = 30
int gValue;
Main local 값 = 30, gValue 값 = 20
void main(){
int local = 30;
gValue = 50;
printf("Main local 값 = %d , gValue 값 = %d \n",local, gValue);
functionA();
functionB();
printf("Main local 값 = %d , gValue 값 = %d \n",local, gValue);
}
void functionA(){
int local = 40;
gValue = 20;
printf("functionA local 값 = %d , gValue 값 = %d \n", local, gValue);
}
void functionB(){
int gValue = 30;
printf("functionB gValue 값 = %d \n", gValue);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
40
[기초 다지기] 변수 통용 범위 익히기

2.지역 변수와 전역 변수 활용하기
 분석
– 두개의 함수 functionA와 functionB
– 전역 변수 : gValue, 지역 변수 : local변수
– functionA()에서 local 변수는 지역 변수이기 때문에
functionA안에서만 영향을 미침
– gValue는 전역 변수로 선언되어 있기 때문에 gValue에 20의
할당 후 Main()함수에서 gValue 출력 시 functionA()에서 할당한
값이 출력
– functionB()에서 변수 gValue가 지역 변수로 선언
– 전역 변수 gValue와 지역 변수의 gValue가 동일한 이름
» 함수 내부의 gValue의 지역 변수로써 동작
– 함수 밖에 선언된 전역 변수는 모든 함수들에 영향을 미치지만
함수 내부에 동일한 이름의 변수가 지역적으로 선언될 경우 지역
변수에 우선권을 가짐
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
41
[기초 다지기] 변수 통용 범위 익히기

3. auto와 register 기억 클래스 활용하기
#include <stdio.h>
void main(){
auto int x=5,y=12; // int x = 5, y = 15
register int z;
z = x + y;
printf(" %d + %d = %d \n", x, y ,z);
}

분석
5 + 12 = 17
 x와 y는 정수형으로 기억클래스가 auto
 함수 내부에 선언된 변수들은 기억 클래스를 생략할 경우
자동적으로 auto 기억클래스를 가지며 스택에 저장
 register 기억클래스는 정수형 타입에 값을 저장
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
42
[기초 다지기] 변수 통용 범위 익히기

4. static 기억 클래스 활용하기
#include <stdio.h>
void function(); // 함수 원형 선언
sValue = 3 , aValue = 3
static int gValue; // 전역 변수
gValue = 3
void main(){
sValue = 6 , aValue = 3
function();
gValue = 6
function();
sValue = 9 , aValue = 3
function();
gValue = 9
}
void function(){
static int sValue=0; // static 지역 변수
auto int aValue=0; // auto 지역 변수
sValue = sValue + 3;
aValue = aValue + 3;
gValue = gValue + 3;
printf("sValue = %d , aValue = %d \n", sValue, aValue);
printf("gValue = %d \n", gValue);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
43
[기초 다지기] 변수 통용 범위 익히기

4. static 기억 클래스 활용하기
 분석
–
–
–
–
gValue 전역 변수로 선언, 기억 클래스로 static
지역 변수인 sValue와 aValue
sValue는 static 기억클래스를 가진 지역 변수
aValue는 auto 기억 클래스를 가진 지역 변수
» (지역 변수일 경우 auto 생략 가능)
– 기억 클래스가 static이냐 auto이냐에 따라 생존 기간이 다름
» static일 경우
 처음 생성된 이후 프로그램 종료 시까지 계속적으로 존재하며 값의 초기화는 단
한번 이루어짐
» auto 기억 클래스를 가진 지역 변수
 해당 함수 블록이 종료되는 시점에 사라지며 다시 함수 호출시 새롭게 생성
– static 기억클래스를 가진 전역 변수와 지역 변수의 차이는 통용
범위에서 발생
» static 지역 변수는 함수가 수행 이후에도 지속적으로 존재하지만 해당 함수
내부에서만 사용 가능
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
44
[기초 다지기] 변수 통용 범위 익히기

5. extern 기억 클래스 활용하기
main.c
#include <stdio.h>
double eValue;
void calc();
void main(){
eValue = 50.4;
calc();
}

분석
func.c
#include <stdio.h>
extern double eValue;
void calc(){
double rate = 0.8;
double result;
result = eValue * rate;
printf("Result = %f \n", result);
}
Result = 40.320000
 두 프로그램은 다른 파일로 만들어져 존재할 때 한 파일(main.c)의
변수를 다른 파일(func.c)에서 사용하고자 할 때 extern 기억
클래스를 사용
 main.c에 정의된 eValue 변수는 func.c에서 그 변수 값 사용 가능
 static 기억클래스를 가진 전역 변수가 단지 한 파일 내에서만 접근
가능하다면 extern 기억 클래스는 다른 파일 안에서 접근 가능
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
45
실습시간 – 1 교시
자료형과 자료형 변환 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
46
자료형과 자료형 변환 활용

학습개요
 기본 자료형을 이용한 간단한 수식 계산
 자료형과 연관된 문제점 학습
 열거형 활용 방법
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
47
자료형과 자료형 변환 활용

자료형과 자료형 변환 활용 문제

문제 정의
 한 주간 입/출금 내역서 보기

문제 조건
 한 주간의 수입과 지출에 대한 리스트를 출력한다.
 한 주는 일요일부터 토요일까지 되며
 전체 수입/지출 금액과 평균 소비 금액을 계산한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
48
자료형과 자료형 변환 활용

실습 단계
 1단계
– 63페이지에 작성된 프로그램을 빈칸을 채워 작성하여 보자.
 2단계
– 프로그램을 davwork.c로 저장하고 컴파일 한다.
 3단계
– 에러 없이 정상적으로 컴파일 한후 실행 하여라 이때 이
프로그램을 정확한 답은 만들어 내지 못한다. 그 원인을 찾아
수정하여라.
» 1)변수의 초기화 문제
» 2) 계산 시 발생되는 잘림 현상 문제
 4단계
– 수정 후 실행하고 그 결과를 작성하여 보자.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
49
자료형과 자료형 변환 활용

실습 문제에 대한 해답






①.
②.
③.
④.
⑤.
⑥.
int doWork(enum dayType day)
int
double
enum dayType
inMoney
outMoney
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
50
실습시간 – 2 교시
변수 그리고 기억 클래스 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
51
변수 그리고 기억 클래스 활용

학습개요
 변수의 위치에 따른 지역 및 전역 변수 활용
 기억 클래스와 활용 방법의 이해
 선언 위치에 따른 변수의 지속시간과 통영범위 이해
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
52
변수 그리고 기억 클래스 활용

변수와 기억 클래스 활용 예

문제 : 박물관 방문자 입장/퇴장 관리
 다음 프로그램은 박물관 출입 관리를 위한 프로그램이다. 이
프로그램은 전체 방문자 수와 현재 방문자 수 그리고 각 박물관 룸에
입장한 방문자 수를 출력한다. 이 프로그램은 두개의 파일로
구성된다. museum.c 는 메인함수를 가지고 박물관 입/출력을
담당하고 있으며 museumSub.c는 입장과 퇴장 함수들을 가진다.
 입력 조건
– 1) 입장 : 1 , 퇴장 : 2 종료 : -1 작업 선택
– 2) 입장하고자하는 방 선택
–
1: Book Room, 2 : Media Room, 3 : History Room
 출력 조건
– 전체 방문자 수, 현재 방문자 수, 각 방별 현재 방문자 수
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
53
변수 그리고 기억 클래스 활용

실습 단계

1단계
 68페이지에 존재하는 프로그램을 빈칸을 포함하여 작성하여라.

2단계
 두 파일을 작성 후 컴파일 한다.

3단계
 이상이 없이 컴파일이 완료되면 실행 시켜 보자. 원하는 결과를
만들어 내지 못할 것이다. 로직 상의 에러를 찾아 수정 하여라.

4단계
 저장 후 71페이지에 있는 테스트 값에 대한 최종 결과를 작성하여라.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
54
변수 그리고 기억 클래스 활용

문제에 대한 해답







①.
②.
③.
④.
⑤.
⑥.
⑦.
END
enterMuseum()
exitMuseum()
extern
nowPersons --;
static unsigned int
bookRoom
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
55
자료형과 표현
The End.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
56