반응형

언어 자료구조 알고리즘 1251

C언어 표준 [C언어 표준 라이브러리 함수 가이드]

C언어 표준 C언어는 1972년 벨 연구소의 데니스 리치가 B를 기반으로 만든 언어입니다. 1983년 미국 국가 표준 협회인 ANSI에서 ANSI X3.159-1989 표준을 지정한 것이 C언어 표준의 시작입니다. 1999년 C99 표준으로 잘 알려진 ISO/IEC 9899:1999를 출간하고 2005년에는 ANSI에서도 C99를 표준으로 채택합니다. 그리고 2011년에 C11 표준인 ISO/IEC 9989:2011을 출간합니다. ANSI X3.159-1989 표준에서는 미국 국가 표준 협회에서 최초로 지정하였고 변수 이름과 함수 이름 등을 영어 알파벳과 언더 바, 숫자만 사용할 수 있습니다. char 형식도 다양한 기호와 숫자 문자, 영어 알파벳은 표현할 수 있지만 한글이나 한자 등을 표현하려면 문자열..

67. 정리하기

52. 함수 개요 53. 프로그램 생명 주기 54. 프로세스 메모리 구조 55. 프로그램 동작 원리 56. 매개변수 전달 원리 57. 전역 변수 58. 지역변수 59. 정적 변수 60. 상수화 변수 61. 함수 만들기 실습 시나리오 62. 도메인 분석 63. 함수명 결정 64. 함수 원형 결정 65. 테스트 코드 작성하기 66. 구현 1. 피보나치 수열의 n 항을 구하는 함수를 구현하시오. 2. 특정 구간 내에 n의 배수의 개수를 구하는 함수를 구현하시오. 3. 1에서 n 사이의 수 중에서 랜덤한 수를 m개 발급하는 함수를 구현하시오. 4. 두 수의 최대 공약수를 구하는 함수를 구현하시오. 5. 두 수의 최소 공배수를 구하는 함수를 구현하시오. 6. 두 수의 공약수의 개수를 구하는 함수를 구현하시오. 7..

66. 구현

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 이제 하나 하나 구현해 보세요. 여러분은 먼저 함수를 구현해 본 후에 책을 보세요. 어렵고 귀찮아도 구현 전에 논리를 의사코드(pseudo code)나 플로우 차트, UML 등을 이용해서 정리해 보세요. 그리고 구체적으로 구현하는 것이 전체 비용을 줄이는 데 도움을 줄 거예요. a. 범위 내의 정수 합계를 구하는 함수 int GetSumInBoundary(int start, int end) start에서 end 구간까지의 정수 합계를 구하기 위해 반복문이 필요하겠죠. 여기서는 for 문을 사용할게요. 반복문에서는 현재 어디까지 더했는지 기억하기 위한 루프(반복문) 카운터 변수와 합계를 기억할 변수가 필요해요. 그..

65. 테스트 코드 작성하기

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 이제 콘솔 응용 프로젝트를 생성하여 함수 원형에 맞게 비어 있는 함수를 추가하고 테스트 코드를 작성해 보세요. 함수를 먼저 만들고 테스트 코드를 작성할 수도 있지만 테스트 코드를 먼저 작성하 팀 작업의 신뢰성을 높일 수 있어요. 먼저 콘솔 응용 프로젝트를 생성하세요. 프로젝트에 main 함수와 테스트 코드를 작성할 Program.c 파일을 추가하세요. 그리고 실습 대상인 함수를 작성할 Common.c 파일과 Common.h를 추가하세요. 소스 파일(.c)에는 함수 정의문을 작성하고 헤더 파일(.h)에는 함수 선언문을 작성할 거예요. 테스트 코드를 작성할 Program.c 파일에서 Common.c 파일에 작성한 함..

64. 함수 원형 결정

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 이번에는 함수 원형을 결정해 보세요. 함수 원형은 함수 이름과 입력 매개 변수 리스트와 반환 형식을 말하죠. 앞에서 함수 이름은 결정했으니 입력 매개변수 리스트와 반환 형식을 결정하세요. 입력 매개변수 리스트를 결정할 때는 기능 수행에 영향을 미치는 인자를 판단해야죠. 이를 위해 구체적인 사용 예를 생각하시고 전달할 구체적인 값을 생각하세요. 특히 기능을 수행하기 위해서 호출하는 곳의 지역 변수의 값을 변경해야 한다면 포인터 형식으로 받아야겠죠. 그리고 입력 인자가 필요가 없거나 결과를 반환할 필요가 없는 함수도 있어요. 만얀 인자가 필요 없거나 결과를 반환할 필요가 없을 때는 void로 명시해요. 이제 여러분께..

63. 함수명 결정

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 함수 이름은 사용하는 개발자가 어떤 기능을 수행하는 것인지 이해하기 쉽게 만드면 좋은 이름이라고 할 수 있겠죠. 일반적으로 함수 이름은 동사로 만들어 이해하기 쉽게 만들고 있어요. 여러분이 만든 함수를 다른 개발자가 이름만 보고 어떠한 일을 수행하는지 예측할 수 있다면 개발 비용을 줄일 수 있겠죠. 이제 여러분께서는 해야 할 기능에 알맞는 함수 이름을 결정한 후에 책을 보세요. 다음은 함수 이름을 정한 예입니다. 정답이 있는 것이 아니므로 설명은 생략할게요. a. 범위 내의 정수 합계를 구하는 함수 GetSumInBoundary b. 특정 수가 소수(Prime Number)인지 판단하는 함수 IsPrime c. ..

62. 도메인 분석

시나리오 도메인 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 다음은 이번 실습에서 만들 함수들의 도메인 분석한 결과예요. 각 함수들이 어떨 때 사용하는 것인지 설명할게요. 여러분이 생각한 기능과 차이가 있는지 확인해 보세요. a. 범위 내의 정수 합계를 구하는 함수 사용 예: 1부터 100까지 합을 구하고자 할 때 b. 특정 수가 소수(Prime Number)인지 판단하는 함수 사용 예: 3이 소수인지 확인하고자 할 때 c. 범위 내의 정수중에 소수(Prime Number)의 개수를 구하는 함수 사용 예: 5에서 20 사이의 소수가 몇 개인지 확인하고자 할 때 d. n 개의 정수의 합계를 구하는 함수 사용 예: {1, 3, 10, 8, 5, 2} 의 원소의 합을 구하고자 할 때 e. 두 수를..

61. 함수 만들기 실습 시나리오

이번에는 단순한 기능을 수행하는 함수들을 직접 만들고 호출해서 사용하는 실습을 진행할게요. 함수 만들기 실습은 작성할 함수가 해야 할 일을 분석하는 것부터 시작하며 이런 작업을 도메인(Domain) 분석이라고 불러요. 도메인 분석이 끝나면 적당한 이름을 결정하고 입력 매개변수 리스트와 반환 형식을 결정할 거예요. 그리고 테스트 코드를 작성한 후에 실제 함수를 구현하는 순서로 실습할게요. 여러분은 함수 만들기 과정을 통해 기본적인 알고리즘 논리 전개와 함수 원형을 결정하는 능력을 키워야겠죠. 어떤 종류의 프로그래밍 언어를 사용하더라도 이러한 능력은 필수적으로 필요해요. 여러분은 각 단계별로 진행하고 난 후에 책의 내용과 비교해 보세요. 만약 책의 내용을 본 후에 따라하기 형태로 학습하면 시간은 적게 들겠지..

60. 상수화 변수

C언어에서 변수 선언문 앞에 const 키워드를 명시한 변수를 상수화 변수라 불러요. 상수화 변수는 값을 변경하지 못하여 흔히 상수라고도 부르죠. 상수화 변수는 선언과 동시에 초기화가 필요해요. 값을 변경하지 못하는 상수화 변수의 초기값을 설정하지 않는다면 아무런 의미가 없겠죠. const 키워드를 포인트 변수 선언문에 명시하면 위치에 따라 상수화 의미가 조금씩 달라집니다. const 키워드가 *과 변수명 사이에 오면 포인터 변수에 초기화한 메모리 주소를 다른 주소로 변경할 수 없다는 의미예요. #include int main() { int arr[10]={1,2,3,4,5,6,7,8,9,10}; int *const pi = arr; pi = arr+1; //컴파일 오류 pi[0] = 9; //가능 re..

59. 정적 변수

프로그래밍하다보면 전체 영역에서 사용하지 않지만 값을 유지해야 할 때가 있죠. 이럴 때는 전역 변수로 선언하면 사용하지 말아야 하는 곳에서 사용하는 실수를 범하여 버그를 만드는 원인이 되기도 한답니다. 그렇다고 지역 변수로 선언하면 함수 호출했을 때 메모리를 할당하고 끝나면 해제해서 다시 호출했을 때 이전의 값이 사라져요. 이 때 정적 변수를 선언하여 사용하면 문제를 해결할 수 있어요. 정적 변수를 선언할 때는 static 키워드를 붙여서 선언해요. 정적 변수는 특정 블록 내부에 변수를 선언해도 프로그램 시작할 때 메모리를 할당하고 해제해서 값을 유지할 수 있어요. ◈ 정적 변수와 지역 변수를 비교하는 예 #include void Foo(); int main() { Foo(); Foo(); return ..

반응형