최신 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