반응형

언어 자료구조 알고리즘/C 언어 문법 24

24. 배열의 사용

배열의 사용(정적) 다루는 내용 - 배열과 포인터 - 포인터와 관련된 연산 - 배열의 사용 C언어에서 배열명은 원소 타입의 포인터 상수 취급을 받는다고 앞선 항목에서 얘기를 하였다. 이러한 이유로 배열과 포인터는 따로 떼어내서 설명을 하는 것보다 같이 하는 것이 이해하기 쉬울 수 있다. 그리고 포인터와 관련된 연산(산술 연산 중에 가감 연산, 간접 연산, 인덱스 연산, 주소 연산)의 동작 원리를 명확하게 이해를 하고 있어야 능숙하게 배열을 사용할 수가 있다. 먼저 목적에 따라 배열을 선언하는 예를 살펴보자. 50명의 국어 성적 int kor_scores[50]; 50명의 국어,영어,수학 성적 int scores[50][3]; 50명의 국어 성적의 위치 정보 int *rkor_scores[50]; 50명의..

23.배열

배열 다루는 내용 - 배열의 선언 및 초기화 - 배열의 기본적인 사용 배열은 같은 형태의 데이터(레코드)를 연속적인 메모리(논리적인 메모리)에 할당하여 관리하는 자료구조를 말한다. C언어에는 정적인 배열 형식의 변수를 선언할 수 있는 매커니즘을 제공하고 있다. 반면, 동적인 배열은 동적 메모리 할당에 관련된 함수 호출을 통해 사용할 수 있지만 형식으로는 제공하고 있지 않다. 정적 배열과 동적 배열 배열은 자료를 보관하는 컨테이너이다. 배열은 데이터를 보관하는 버퍼가 연속적인 메모리에 할당되어 하나의 관리명으로 관리할 수 있는데 해당 버퍼의 크기(즉, 보관할 수 있는 원소의 개수)가 컴파일 시에 정해지는가 혹은 런타임에 정해지는가에 따라 정적 배열과 동적 배열로 나눌 수 있다. 배열의 선언 및 초기화 배열..

22. 제어문 - 반복문

제어문 - 반복문 다루는 내용 - while, do while - for 반복문의 경우는 특정 조건이 참일 동안 반복해서 수행하는 구문을 얘기를 한다. 이를 위해서는 반복할 수행구문 외에도 초기 설정, 반복을 할 조건, 반복할 조건에 대한 변화등에 대해 고려를 해야만 한다. 이러한 반복문을 구성하는 요소들은 목적에 따라 생략될 수도 있고 실제 논리 전개 과정에서 순서가 다를 수도 있다. 이를 위해 C언어에서는 반복문으로써 while문, do while문, for문을 제공하고 있으며, 반복문 내부에서 수행할 구문에서 반복문의 조건으로 분기하거나 반복문을 탈출할 수 있게 하기 위해 continu와 break라는 부가적인 문법도 제공하고 있다. 먼저, for문에 대해 살펴보기로 하자. 포맷: for(초기화 구..

21.제어문 - 선택문

제어문 - 선택문 다루는 내용 - 선택문 조건문의 경우는 특정 조건이 참이냐 거짓이냐에 따라 수행할 구문이 결정이 된다. 선택문의 경우는 연산결과가 특정 상수에 따라 수행할 위치가 결정이 되는 구문이다. 다음은 선택문의 포맷이다. 포맷: switch (연산결과가 상수가 되는 표현) { case 상수A: statement; //선택된 값이 A일 경우에 여기서 부터수행하라. [break;] //switch블록을 빠져나가라.(필수 사항이 아님) case 상수B: statement; //선택된 값이 B일 경우에 여기서부터 수행하라. [break;] //switch블록을 빠져나가라.(필수 사항이 아님) ...중략... default: statement; //나열되지 않은 경우에 수행하라. } if문에서는 영향 받..

20. 제어문 - 조건문

제어문 - 조건문 다루는 내용 - 조건문 제어문에는 특정 조건에 따라 수행을 하는 구문들이다. 특정 조건이 참과 거짓에 따라 수행하는 조건문과 특정 조건이 참일 동안 반복하는 반복문 그리고, 특정 조건에 있는 값에 따라 수행할 구문을 선택하는 선택문 등으로 구분할 수가 있을 것이다. 먼저, 조건문에 대해서 살펴보자. 포맷: 1. if ([조건]) statement1; 참인 경우에 statement1을 행하라. 2. if([조건])statement1; else statement2; 참인 경우에 statement1을 행하고 거짓인 경우에 statement2를 행하라. C언어에서는 연산 결과가 0인 경우는 거짓으로 판별을 하고 그 이외의 경우는 참으로 판별을 한다는 것은 이미 연산자를 다루면서 얘기를 한 바가..

19. 기본입출력 - 입력

기본 입출력 - 입력 다루는 내용 - 기본 입력 - FILE의 멤버 _base, _ptr, _cnt 기본 입력을 위한 함수들도 기본 출력처럼 stdin버퍼에서 하나의 문자를 얻어오는 getchar, stream을 string으로 얻어오는 gets, 포맷에 맞게 얻어오는 scanf등이 있다. 이들은 공통적으로 stdin버퍼에 아직 처리되지 않은 stream이 존재하는지 확인을 하고 없을 경우에는 하나의 stream이 입력되기를 기다리고 있을 경우에는 입력되기를 기다리지 않는다. Look & Feel & Think 다음을 보면서 stdin버퍼에 아직 처리되지 않은 stream이 존재하지 않을 때 어떠한 동작을 하는지 생각해보자.흔히 프로그래밍을 학습을 할 때 작성한 이가 테스트를 하는 경우가 많다. 이로 인..

18. 기본 입출력 - 출력

기본 입출력 - 출력 다루는 내용 - 기본 출력 - 출력 포맷 사양자 - 버퍼에 출력 여기에서는 응용에 데이터를 화면(stdout)에 출력하는 것에 관련된 함수에 대해서 소개를 하기로 하자. 다른 파일에 출력하는 것에 대해서는 별도의 항목을 통해 설명하기로 하겠다. int putchar(int ch); 한 개의 문자를 출력하는 함수로 putchar를 제공하고 있다. 함수 원형(signature)을 보면 입력 매개변수로 int형을 받고 리턴 타입이 int라는 것을 알 수 있다. 하지만 입력 매개변수 ch에 있는 하위 1바이트를 제외한 나머지 값은 출력에 반영이 되지 않는다. 출력값은 화면에 출력된 문자에 대한 ASCII CODE값을 반환한다. Look & Feel & Think 다음을 보면 putchar함..

17.기본 입출력 개요

기본 입출력 개요 다루는 내용 - 기본 입출력 개요 - ASCII CODE와 UNICODE 컴퓨터 시스템의 구성 요소를 얘기를 하면 보통 H/W와 S/W만을 얘기하는 것이 일반적이다. 하지만, 이를 사용하는 사용자 또한 해당 구성 요소임에 틀림이 없다. (참고로, 중학교 컴퓨터 교재[(주)두산]에 보니 컴퓨터 시스템의 구성 요소는 사용자, 설명서, 자료, H/W, S/W라고 되어 있는 것을 본 적이 있다.) 콘솔 응용의 경우 사용자와의 대화를 하기 위해 보통 키보드와 모니터, 프린터, 마우스등의 H/W를 사용하게 되는데 이들은 O/S를 거치지 않고 응용이 바로 사용할 수 없는 것들이다. 이러한 이유로 거의 모든 고급언어에서는 기본 입출력에 관련된 라이브러리를 지원하고 있다. C언어에서는 기본적인 입출력 ..

16. 지시/주소/인덱스/간접연산자

지시/주소/인덱스/간접연산자 다루는 내용 - 지시 연산자 - 주소 연산자 - 인덱스 연산자 - 간접 연산자 지시 연산자는 매커니즘 형식의 변수 선언시 해당 변수가 어떠한 형식인지를 지시하는 연산자이다. 포인터 형식을 지시하는 *, 배열 형식을 지시하는 [], 함수를 지시하는 ()가 있다. 정의, 선언, 초기화, 대입 선언은 "이러한 것이 있다."는 것이고 정의는 "이러한 것은 이것이다."라고 규정짓는 것을 말한다. int Foo(int ,int ); //"이와 같은 함수가 있다." - Foo라는 명칭에 대한 선언문 // "Foo라는 함수명은 이러한 매개변수와 이러한 리턴형식을 갖는다." -Foo라는 명칭의 signature 정의문 int Foo(int a,int b) //"이 함수는 이러한 코드를 수행한..

15. 비트/ 쉬프트 연산자

비트/ 쉬프트 연산자 다루는 내용 - 비트 연산자 - 비트 연산과 논리 연산의 차이 - 쉬프트 연산자 비트 연산자에는 이항 연산자인 &, | 와 단항 연산자인 ~, ^ 가 있다. 쉬프트 연산자에는 이항 연산자인 가 있다. 비트 연산자와 쉬프트 연산자는 공통적으로 비트 단위의 연산을 한다는 공통점이 있다. 논리 연산은 먼저 피연산자의 값이 참인지 거짓인지를 먼저 확인 한 후에 논리 곱 혹은 논리 합 등을 연산한다. 반면, 비트 연산은 피연산자의 비트 단위로 연산을 한다. Look & Feel & Think 다음은 논리 연산과 비트 연산에 대한 코드를 디스 어셈블리 한 모습이다. 두 연산의 극명한 차이를 보고 느끼고 생각하라. 비트 연산에서 ^ 는 xor연산에 대한 연산 기호이며 ~는 not에 대한 연산 기..

반응형