본문 바로가기

Programming

(42)
C 언어 | 왜 배열을 선언할 때 상수 변수값을 크기로 지정할 수 없을까? 문제 상황 프로그램을 짜던 중 배열의 크기가 자주 사용될 것 같아 전역 변수로 상수 변수값인'const int NUMBER_IN_ARRAY = 5'를 선언했다. 그리고 main함수 내에서 배열을 선언할 때 그 크기 값을 NUMBER_IN_ARRAY로 지정했다. 컴파일을 하니 바로 컴파일 에러가 났다.(variable-sized object may not be initialized) 왜 배열을 선언할 때 상수 변수값을 크기로 지정할 수 없을까? 원인 파악 우선 배열의 선언 방법을 다시 알아봐야 한다. C/C++에서 배열은 선언할 때 크기가 지정되어야 한다. 이때 대괄호 []를 사용하는데, 크기는 고정된 상수여야 하며 변수는 사용할 수 없다. 내가 사용한 const int도 결국 초기값을 변경할 수 없는 변..
C 언어 | 명령행 인자 ✔ 학습목표 명령행 인자를 받는 프로그램을 c로 작성할 수 있다. 명령행 인자 명령행 인자(command line arguments)는 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미한다. 명령행 인자는 자동으로 프로그램의 main함수에 전달된다. 이제껏 당연하게 int main(void)라 써왔던 main 함수를 생각해볼 때다. main도 그 형태를 보면 하나의 함수다. 즉 사용자 정의 함수처럼 입력값과 출력 값을 가질 수 있다는 것이다. #include #include int main(int argc, string argv[]) { if (argc == 2) { printf("hello, %s\n", argv[1]); } else { printf("hello, world\..
C 언어 | 문자열의 활용 ✔ 학습목표 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다. 문자열의 길이 및 탐색 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어보자. 한 글자씩 출력해야 하기 때문에 출력에 있어서는 루프를 사용해야 할 것이다. 그렇다면 문자열의 끝은 어떻게 알 수 있을까? 한 가지 방법은 지난 강의에서 배운 대로 널 종단 문자(\0)를 이용하는 것이다. s라는 문자열이 있다고 할 때 for(int i = 0; s[i] != '\0'; i++){...} 과 같은 루프를 사용하는 것이 그 예이다. #include #include #include int main(void) { string s = get_string("Input: "); printf("Output:\n"); for (in..
C 언어 | 문자열과 배열 ✔ 학습목표 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다. 문자열과 배열 문자열(string) 자료형의 데이터는 사실 문자(char) 자료형 데이터들의 배열이었다. string s = "Hi!"; 와 같이 문자열 s가 정의되어 있다고 생각해보자. s는 문자의 배열이기 때문에 메모리상에 아래처럼 저장되고, 인덱스(예) s[0], s[1] 등)로 각 문자에 접근할 수 있다. 여기서 가장 끝의 '\n'은 문자열의 끝을 나타내는 널 종단문자다. 이는 모든 비트가 0인 1바이트를 의미한다. string names[4]; names[0] = "EMMA"; names[1] = "RODRIGO"; names[2] = "BRIAN"; names[3] = "DAVID"; printf("%s\n..
C 언어 | 배열 ✔ 학습목표 배열을 정의하고 사용하는 방법을 설명할 수 있다. 배열 아래와 같이 세 개의 점수를 저장하고 평균을 출력하는 프로그램을 예로 들어보자. #include #include int main(void) { // Scores int score1 = 72; int score2 = 73; int score3 = 33; // Print average printf("Average: %i\n", (score1 + score2 + score3) / 3); } 만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해야 한다(변수 선언, 계산식 등). 이 때 활용할 수 있는 것이 배열이다. 배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리한다. 위 코드에서 배열을 사용하..
C 언어 | 사용자 정의 함수와 중첩 루프 ✔ 학습목표 사용자 정의 함수와 중첩 루프를 작성할 수 있다. 사용자 정의 함수 프로그래밍을 하다 보면 반복적으로 작성해야 하는 코드가 있다. 이런 코드를 여러 번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있다. 이것이 사용자 정의 함수다. "cough"라고 세 번 말하는 프로그램을 작성한다고 생각해보자. #include int main(void) { printf("cough\n"); printf("cough\n"); printf("cough\n"); } 가장 단순한 방법은 printf 함수를 세 번 반복해서 사용하는 것이다. 하지만 이는 말 그대로 동일한 작업의 반복이기 때문에 효율적이지 않다. #include int main(void) { for (int i = 0; ..
C 언어 | 자료형, 형식 지정자, 연산자 ✔ 학습목표 1. 다양한 데이터 타입과 형식 지정자를 나타내는 방법을 학습한다. 2. 다양한 연산자를 이용하여 조건문을 표현하는 방법을 학습한다. 자료형(Data Type) 아래 목록은 자료형으로 사용할 수 있는 것들이다. bool : 불리언 표현, 예) True, False, 1, 0, yes, no char: 문자 하나, 예)'a', 'Z', '?' string: 문자열int: 특정 크기의 정수, 예)3, 58, 0, -3 long: 더 큰 크기의 정수 float: 부동소수점을 갖는 실수, 예) 3.14, 0.0, -85.45 double: 부동소수점을 포함한 더 큰 실수 자세한 값은 다음과 같다. * int는 대략 40억까지 셀 수 있다. 40억개 이상의 데이터를 가진 일부 거대 기업이 아니라면 대..
C 언어 | 조건문과 루프 ✔ 학습목표 조건문과 루프를 c로 작성할 수 있다. 변수 설정 조건문과 루프에 관한 코드를 작성하기에 앞서, 앞서 배운 변수를 복습해보자. 지난 글에서 처럼 C는 오래된 언어기 때문에 저장하고자 하는 변수의 종류를 꼭 명시해주어야 한다. 만약 숫자를 세는 프로그램을 만들고 싶어 counter라는 변수를 설정한다면 int counter = 0; 처럼 말이다. 여기서 int는 저장하려는 데이터가 정수(integer)라는 것을 의미한다. counter는 변수의 이름, 0은 그 값에 0을 저장(초기화)하는 것이다(할당 연산자 '=' 사용). 코드의 마지막에는 꼭 세미콜론(;)을 붙여주는 것도 중요하다. 그렇다면 숫자를 세는 기능은 어떻게 구현할까. C에서는 변수의 값을 1씩 증가시키는데 다양한 방법이 있다. 1..