• 검색 결과가 없습니다.

변 수 변 수 변 수 변 수

N/A
N/A
Protected

Academic year: 2021

Share "변 수 변 수 변 수 변 수"

Copied!
27
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

변 수 변 수 변 수 변 수

변수는변할있는수를담는그릇이다.

(2)

이 장에서 다룰 내용 변수의 기본 1 구조체 2 n am esp ace 3 형 변환 4

(3)

01_ 변수의 기본  변수의 정의 

그릇: 값을담을수있는공간



메모리: 물리적으로서로구별이가능한식별자를통해접근할수있는 공간

 변수의 구성요소 

변수명(Variable Name)



변수형(Variable Type)

 변수의 기본 형태와 사용 예

변수형변수명1, 변수명2.. [기본형태]

int var1, var2; [사용예]

(4)



변수명을정하는규칙



영문자, 숫자, _(underscore)를혼용하여만들있다.



_ 또는알파벳영문자로시작해야한다. 즉, 숫자로시작할없다.



알파벳영문자의대문자와소문자를구분한다. 즉, 변수ABC변수abc 다른변수다.



C++에서사용하는예약어를사용할없다.



연결된문자로만만들어야한다. 즉, 중간에공백이있을없다.



특수문자를사용할없다. 예예예예 Aint A;○사용에아무런문제가없다. Youchar You;○사용에아무런문제가없다. charchar char;X키워드와이름이동일하다. publicint public;×public이라는접근제한자와이름이동일하다. 1varint 1var;×숫자로시작할수없다.

(5)

01_ 변수의 기본 

변수형



사용컴파일러마다조금씩차이를보이지만, 일반적으로아래와같은기본적인 변수형을지원한다



기본변수형앞에signed / unsigned 키워드를더하여부호/미부호변수를 생성할있다. 예예예예 boolbool flag;true, false charchar str;하나의문자데이터 short, int, long, long longlong temp;부호가있는정수형 float, doubledouble bigNumber;실수 voidvoid anything;형이없음

(6)

[기본예제 2- 1] sig n ed 와 u n sig n ed 의 비교 0 1 # in cl u d e <i o st re a m > 0 2 u si n g n a m e sp a ce s td ; 0 3 0 4 v o id m a in () 0 5 { 0 6 i n t a ; 0 7 u n si g n e d i n t b ; 0 8

signedsignedsignedsigned 정수형정수형정수형정수형변수변수변수변수aaaa를를를를선언한다선언한다선언한다선언한다. unsignedunsignedunsignedunsigned 정수형정수형정수형정수형변수변수변수변수bbbb를를를를선언한다선언한다선언한다선언한다....

0 8 0 9 a = - 1; 10 b = - 1; 11 12 c o u t << " a = " < < a < < '\ n '; 13 c o u t << " b = " < < b < < '\ n '; 14 15 b = 1 11 1; 16 17 c o u t << " b = " < < b < < '\ n '; 18 }

unsignedunsignedunsignedunsigned 정수형정수형정수형정수형변수변수변수변수bbbb에에에에+1111+1111+1111+1111을을을을입력한다입력한다입력한다입력한다....

(7)

01_ 변수의 기본 

변수의크기



변수의크기는변수선언정해주는변수형에따라결정된다.



오버플로우와언더플로우



변수는서로자신만의크기를가지. 그런기에않게,

char < short < int longfloat < double < long double



변수는서로자신만의크기를가지. 그런기에않게, 변수에담을있는한계가넘는수를입력하면변수는제대로 동작하지못한다.



오버플로우 정해진크기가장값을넘을경우



언더플로우 정해진크기가장작은값을넘을경우

(8)

[기본예제 2- 2] 오버플로우

01 #include<iostream> 02 using namespace std; 03 void main() 04 { 05 short a = 0; 06 07 cout<< "The size of short-type is " << sizeof(short) << " Bytes\n"; 08 09 a = 32767; 10 11 cout<< a << '\n';

ssssigned shortigned shortigned shortigned short형형형형변수변수변수변수aaaa를를를를선언한다선언한다선언한다선언한다.... 표시할표시할표시할표시할수수수수있는있는있는있는숫자다숫자다숫자다숫자다.... 12 13 a = 32768; 14 15 cout<< a << '\n'; 16 17 a = -32768; 18 19 cout<< a << '\n'; 20 21 a = -32769; 22 23 cout<< a << '\n'; 24 }

오버플로우가오버플로우가오버플로우가오버플로우가일어난다일어난다일어난다일어난다. 언더언더언더언더플로우가플로우가플로우가플로우가일어난다일어난다일어난다일어난다.

표시할표시할표시할표시할수수수수있는있는있는있는숫자다숫자다숫자다숫자다....

(9)

01_ 변수의 기본  변수의 범위 (s c o p e )와 생명주기 

변수가선언되고이용되고, 소멸되는과정을말한다.



선언된변수가유효한범위를말한다.



블록안에서선언된변수는블록안에서만유효하다. 중첩된블록안에서선언된변수는하위블록(좀더안쪽에선언된 블록)들에서도유효하다. 소멸자를호출하거나인위적으로변수를해제하지않는이상, 먼저생성된 변수가나중에소멸된다.변수가나중에소멸된다. 기존에존재하는변수와동일한이름의변수를선언하면, 나중에선언된 변수가기존의변수보다우선한다.

(10)

[응용예제 2- 4] 변수의 생명주기

01 #include<iostream.h> 02 03 void main() 04 { 05 06 int [ [ [ [ ①①①①] ] ] ] = 1; 07 { 08

varvarvarvar 08 09 char [ [ [ [ ②②②②] ] ] ] = 'a'; 10 { 11 12 cout << "var = " << var << '\n'; 13 } 14 cout << "var = " << var << '\n'; 15 } 16 cout << "var = " << var << '\n'; 17 } varvarvarvar

(11)

0 1 _변수의 기본  변수의 또 다른 분류 

지역변수



지역변수 그그그그그그그그



전역변수



저장장소 autoautoautoauto –––– register 레지스터 staticstaticstaticstatic–––– newnewnewnew/ delete/ delete/ delete/ delete ––––

(12)

02_ 구조체  원시 데이터 형과 복합 데이터 형

원시원시 데이터데이터형형 원시원시 데이터데이터형형

P ri m it iv e d a ta t yp e 이라고도 하며 , 컴파일 러가 기본적으로 제공하는 데이터 형을 일컫 는다 .

P ri m it iv e d a ta t yp e 이라고도 하며 , 컴파일 러가 기본적으로 제공하는 데이터 형을 일컫 는다 .

복합복합 데이터데이터형형

복합복합 데이터데이터형형

C o m p o u n d d a ta t yp e 이라고도 하며 , 일반 적으로 사용자가 직접 형을 정의하고 , 그 객 체를 값처럼 취급하거나 주소를 참조하여 사 용되는 데이터 형을 말한다 . 구조체나 클래스는 여기에 해당된다 .

C o m p o u n d d a ta t yp e 이라고도 하며 , 일반 적으로 사용자가 직접 형을 정의하고 , 그 객 체를 값처럼 취급하거나 주소를 참조하여 사 용되는 데이터 형을 말한다 . 구조체나 클래스는 여기에 해당된다 .

(13)

02_ 구조체  구조체의 기본 형태와 사용 예

struct struct struct struct 구조체명 { 변수_선언1; 변수_선언2; .... (구조체_선언) };

struct struct struct struct Student { int id; float grade; int gender; };



앞에‘struct’ 라는키워드를사용하여, 구조체를선언한다.



구조체가가지는변수들은변수의선언방법과같은방법으로선언된다.

}; [기본형태][사용예]

(14)

[기본예제 2- 5] St u d en t 구조체의 사용 - 1

01 #include<iostream> 02 usingnamespace std; 03 structStudent 04 { 05intid; 06float grade; 07intgender; 08 }; 0909 10 void main() 11 { 12structStudent student; 13 14cout<< "학번을입력하세요\t"; 15cin>> student.id; 16 17cout<< "성적을입력하세요\t"; 18cin>> student.grade;

StudentStudentStudentStudent형형형형구조체구조체구조체구조체변수를변수를변수를변수를선언한다선언한다선언한다선언한다.... 학번을학번을학번을학번을입력입력입력입력받는다받는다받는다받는다....

(15)

[기본예제 2- 5] St u d en t 구조체의 사용 - 2 1 9 2 0 c o u t < < " 성별을 입력하세요 (남성 : 1 , 여성 : 2 )\ t" ; 2 1 c in > > s tu d e n t. g e n d e r; 2 2 2 3 c o u t < < " \ n \ n "; 2 4 c o u t < < " 입력하신 학생의 \ n "; 2 5 c o u t < < " 학번은 " < < s tu d e n t. id < < ' \ n '; 2 6 c o u t. s e tf (i o s :: s h o w p o in t) ;

소수점을소수점을소수점을소수점을표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다....

2 6 c o u t. s e tf (i o s :: s h o w p o in t) ; 2 7 c o u t. p re c is io n (2 ); 2 8 2 9 c o u t < < " 성적은 " < < ( fl o a t) s tu d e n t. g ra d e < < ' \ n '; 3 0 3 1 c o u t < < " 성별은 " < < ( s tu d e n t. g e n d e r= = 1 ? " 남자 " : "여자 ") < < ' \ n '; 3 2 c o u t < < " 입니다 .\ n "; 3 3 }

소수점을소수점을소수점을소수점을표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다.... 소수점소수점소수점소수점1111자리까지자리까지자리까지자리까지표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다....

(16)

03_ 네임스페이스 (n am esp ace) 

namespace



그대로‘이름이유효한공간이다.



특정namespace안에선언된이름들은namespace 블록안에서만 유효하다.



‘::’ 참조자를이용하여특정namespace안의변수에접근이가능하다.



네임스페이스명::대상명 namespace 네임스페이스명 { 변수 클래스 함수 기타요소 ..... } [부모클래스][자식클래스]

namespace Elementary { struct Student { int id; int age; }; }

(17)

[기본예제 2- 6] n am esp ace 의 사용 - 1

01 #include<iostream.h> 02 03 namespace Elementary 04 { 05struct Student 06{ 07int id; 08int age; 09}; 10 }

초등학생초등학생초등학생초등학생정보정보정보정보처리를처리를처리를처리를위한위한위한위한네임스페이스를네임스페이스를네임스페이스를네임스페이스를 정의한다정의한다정의한다정의한다.... 초등학생초등학생초등학생초등학생정보의정보의정보의정보의구조체를구조체를구조체를구조체를정의한다정의한다정의한다정의한다. 10 } 11 12 namespace University 13 { 14struct Student 15{ 16int id; 17float grade; 18}; 19 }

대대대대학생학생학생학생정보정보정보정보처리를처리를처리를처리를위한위한위한위한네임스페이스를네임스페이스를네임스페이스를네임스페이스를 정의한다정의한다정의한다정의한다.... 대대대대학생학생학생학생정보의정보의정보의정보의구조체를구조체를구조체를구조체를정의한다정의한다정의한다정의한다.

(18)

[기본예제 2- 6] n am esp ace 의 사용 - 2

21 void main() 22 { 23 24 struct Elementary::Student eleStudent; 25 26 cout << "Enter Elementary student's ID\n"; 27 cin >> eleStudent.id; 28 cout << "Enter Elementary student's age\n"; 29 cin >> eleStudent.age; 30 31 struct University::Student uniStudent;

초등학생용초등학생용초등학생용초등학생용Student Student Student Student 구조체형구조체형구조체형구조체형변수를변수를변수를변수를 선언하고선언하고선언하고선언하고값을값을값을값을입력입력입력입력받는다받는다받는다받는다.... 32 33 cout << "Enter University student's ID\n"; 34 cin >> uniStudent.id; 35 cout << "Enter University student's grade\n"; 36 cin >> uniStudent.grade; 37 38 cout << "Elementary student's" << '\n'; 39 cout << "\t ID = " << eleStudent.id << '\n'; 40 cout << "\t AGE = " << eleStudent.age << '\n'; 41 cout << "University student's" << '\n'; 42 cout << "\t ID = " << uniStudent.id << "\n"; 43 cout << "\t GRADE = " << uniStudent.grade << '\n'; 44 }

대학생대학생대학생대학생용용용용Student Student Student Student 구조체형구조체형구조체형구조체형변수를변수를변수를변수를 선언하고선언하고선언하고선언하고값을값을값을값을입력입력입력입력받는다받는다받는다받는다.... 서로서로서로서로다른다른다른다른StudentStudentStudentStudent에에에에값이값이값이값이제대로제대로제대로제대로 입력되었는지입력되었는지입력되었는지입력되었는지출력해본다출력해본다출력해본다출력해본다.

(19)

[기본예제 2- 8] u sin g 의 사용 - 1 0 1 # in c lu d e < io s tr e a m .h > 0 2 0 3 n a m e s p a c e S tu d e n t 0 4 { 0 5 i n t id = 0 ; 0 6 i n t a g e = 8 ; 0 7 c h a r g ra d e = ' A '; 0 8 } 0 9 1 0 v o id m a in () 1 1 { 1 2 c o u t < < " ID = " < < S tu d e n t: :i d < < ' \ n '; 1 3 c o u t < < " A G E = " < < S tu d e n t: :a g e < < ' \ n '; 1 4 c o u t < < " G R A D E = " < < S tu d e n t: :g ra d e < < ' \ n '; 1 5 }

대대대대학생학생학생학생Student namespaceStudent namespaceStudent namespaceStudent namespace를를를를 일일이일일이일일이일일이명시했다명시했다명시했다명시했다...

(20)

[응용예제 2- 9] u sin g 의 사용 - 2

01 #include <iostream.h> 02 03 namespace Student 04 { 05 int id = 0; 06 int age = 8; 07 char grade = 'A'; 08 }08 } 09 10 [ ? ] namespace Student; 11 12 void main() 13 { 14 cout << "ID = " << id << '\n'; 15 cout << "AGE = " << age << '\n'; 16 cout << "GRADE = " << grade << '\n'; 17 }

대대대대학생학생학생학생네임스페이스를네임스페이스를네임스페이스를네임스페이스를명시하지명시하지명시하지명시하지않고않고않고않고 네임스페이스의네임스페이스의네임스페이스의네임스페이스의내용을내용을내용을내용을사용하겠다는사용하겠다는사용하겠다는사용하겠다는선언을선언을선언을선언을 한다한다한다한다....usingusingusingusing

(21)

04_ 형 변환 암시적암시적 특별히 명시해주지 않았지만 , 서로 다른 형의 값 혹은 변수 간의 차이 때문에 자동적으로 일어나게 되는 형 변환을 말한다 .

 암시적 (E x p li c it ) / 명시적 (I m p li c it ) 형 변환

명시적명시적명시적명시적

쉽게 암시적 형 변환의 반대라고 생각하면 되겠다 . 즉, 명시적 형 변환은 우리가 그 형을 의도적으로 명시해 줌으로써 , 형 변환을 수행하게 하는 것이다 .

쉽게 암시적 형 변환의 반대라고 생각하면 되겠다 . 즉, 명시적 형 변환은 우리가 그 형을 의도적으로 명시해 줌으로써 , 형 변환을 수행하게 하는 것이다 .

(22)

[기본예제 2 -1 1 ] 명시적 형 변환의 사용

01 #include<iostream.h> 02 03 void main() 04 { 05 int salt = 30; 06 int water = 40; 07 float concentration = 0; 08 float real_concentration = 0; 09 10 concentration = (30 / 40) * 100; 11 cout << "Weight percent = " << concentration << " %\n"; 12 13 real_concentration = (float)30 / (float)40 * 100; 14 cout << "Real Weight percent = " << real_concentration << " %\n"; 15 }

대대대대학생학생학생학생형형형형변환변환변환변환없이없이없이없이정수정수정수정수연산을연산을연산을연산을한다한다한다한다.... 명시적명시적명시적명시적형형형형변환변환변환변환후후후후, , , , 연산을연산을연산을연산을한다한다한다한다....

(23)

예제모음 _1 학생 정보를 담는 구조체 설계 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항

학생의정보를담을있는구조체를설계하라. 학생의정보는다음과같이구성된다. 번호: 25나이: 15국어성적: 90 수학성적: 85과학성적: 95

실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

(24)

예제모음 _1 소스

01 #include<iostream> 02 using namespace std; 03 structStudent 04 { 05 intnumber; 06 intage; 07 intkor; 08 intmath;

학생학생학생학생정보를정보를정보를정보를위한위한위한위한구조체를구조체를구조체를구조체를설계한다설계한다설계한다설계한다.... 08 intmath; 09 intsci; 10 }; 11 12 void main() 13 { 14 structStudent student; 15

(25)

예제모음 _1 소스

16 student.number = 25; 17 student.age = 15; 18 student.kor = 90; 19 student.math = 85; 20 student.sci = 95; 21 22 cout << "번호가" << student.number << " 인학생의정보: \n"; 23 cout << "나이: " << student.age << '\n'; 24 cout << "국어: " << student.kor << '\n'; 25 cout << "수학: " << student.math << '\n'; 26 cout << "과학: " << student.sci << '\n'; 27 }

(26)

요약

변수변수C++에서의변수란수학적변수를의미함과동시에 그러한변수를담고있는‘그릇’까지의미한다. 그리고 변수를담고있는‘그릇’을프로그래밍환경과 연결시켜서해석하면그릇은물리적인메모리의어딘가에 할당되어있는공간을의미하게된다. 구조체구조체구조체는변수처럼자체가쓰이는것이아니라 구조체구조체 변수형처럼구조체형변수선언을위한형태 정의해놓은것이다. 아래는구조체형변수선언의 일반적인형태다. namespacenamespacenamespace공동작업변수나함수명여러 모듈의이름이겹치는것을막기위한, 그대로‘이름공간’이다. 따라서서로다른이름공간에, 동일한이름의변수가있다고할지라 둘은각각다른것이며, 각각의namespace 안에서만 이름이유일한(unique) 것이된다.

(27)

www.themegallery.com IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++ 기초기초기초기초2222장장장장끝끝끝끝

참조

관련 문서

만성췌장염에서 초음파내시경은 췌장 실질과 췌관의 변 화를 모두 평가할 수 있는 장점이 있으며 민감한 영상 소견 을 얻을 수 있어 만성 췌장염의 진단, 특히 조기 만성

로 예상되는데 이러한 FTA의 무역규모 효과는 각국의 에너지부문 지역별 수출변화에서 뚜렷이 나타나고 있 는데, &lt;표 5&gt;에서 알 수 있듯이 한국의 지역별수출 변

Which transformation proceeds by short-range diffusion?.. Diffusion Transformations in solid.. 5.5.5 Spinodal Decomposition.. Spinodal mode of transformation has no

The equiaxed zone consists of equiaxed grains randomly oriented in the centre of the ingot. An important origin of these grains is thought to be

* Often the configuration of atoms that has the minimum free energy after mixing does not have the same crystal structure as either of the pure components. In such cases

산업현장친화형 교수인력을 채용하고 평가할 수 있는 인사제도를 연구하여 한국 대학의 문화에 산학협력 풍토가 자리 잡을 수 있도록 변 , 화시키는

자료형태 &lt;physicalDescription&gt;&lt;form&gt; 필수 디지털 품질 &lt;physicalDescription&gt;&lt;reformattingQuality&gt; 필수

다만, 총장은 천재지 변, 기타 교무형편상 부득이한 사유로 소정의 수업일수를 충당할 수 없을 경우에는 매 학년도 2주의 범위 내에서 수업일수를 감축할 수