C언어 기본개념 정리 - 1. 시작
다양한 프로그래밍 언어에 대한 기본개념을 잘 다듬어 놓기 위해 작성하였습니다.
기본개념 중심으로 요약 정리 자료이기 때문에 미흡한 점이 많겠으나 조금이나마 도움이 되었으면 좋겠습니다.
(TCP SCHOOL 학습사이트를 토대로 거의 그대로 정리한 글입니다.)
[목차] |
1. C언어 시작 2. 타입 3. 연산자 4. 제어문 5. 함수 6. 배열 7. 포인터 8. 포인터와 배열 9. 메모리의 관리 10. 문자와 문자열 11. 구조체 12. 입력과 출력 13. 선행처리 14. 컴파일 15. C언어 참조 |
1. C언어 시작
1) C언어의 개요
- C언어는 현재 사용되고 있는 거의 모든 컴퓨터 시스템에서 사용할 수 있는 프로그래밍 언어
- 현재 널리 사용되는 주요 운영체제의 커널은 대부분 C언어를 이용해 구현되어 있음
- 이처럼 C언어는 시스템 프로그래밍에 가장 잘 어울리지만, 응용 프로그래밍에도 많이 사용되는 프로그래밍 언어
[참고] 프로그래밍 언어
- 컴퓨터의 시스템을 구동시키는 소프트웨어를 작성하기 위한 언어를 의미
- 크게 저급 언어와 고급 언어로 나뉨
- 이는 좋고 나쁜 언어가 아니라, 기계가 이해하기 쉬운가, 사람이 이해하기 쉬운가를 상대적으로 나눈 개념
- 저급 언어 (low-level language)
- 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어로, 대표적인 언어로는 기계어와 어셈블리어 등이 있음
- 실행 속도가 매우 빠르지만, 사람이 배우기에는 매우 어려워 프로그램의 유지보수가 힘듦
- 고급 언어 (high-level language)
- 컴퓨터보다는 사람이 알기 쉽도록 작성된 프로그래밍 언어로, 대표적인 언어로는 자바, 파이썬 등이 있음
- 고급 언어는 컴파일러나 인터프리터에 의해 기계가 이해할 수 있는 언어로 번역되어 실행됨
- 그래서 저급 언어보다는 상대적으로 실행 속도가 느림
- 이 언어는 저급 언어에 비해 가독성이 높고 다루기가 쉬움
- C언어는 저급 언어와 고급 언어의 특징을 모두 가지고 있는 절차 지향 프로그래밍 언어에 해당
2) C언어 기초
- C언어가 가지는 장점
(1) C언어로 작성된 프로그램은 다양한 하드웨어로의 이식성이 좋음
(2) C언어는 절차 지향 프로그래밍 언어로, 코드가 복잡하지 않아 상대적으로 유지보수가 쉬움
(3) C언어는 저급 언어의 특징을 가지고 있으므로, 어셈블리어 수준으로 하드웨어를 제어할 수 있음
(4) C언어는 코드가 간결하여, 완성된 프로그램의 크기가 작고 실행 속도가 빠름
- C언어가 가지는 단점
(1) 저급 언어의 특징을 가지고 있으므로, 자바와 같은 다른 고급 언어보다 배우기가 쉽지 않음
(2) 다른 언어와는 달리 시스템 자원을 직접 제어할 수 있으므로, 프로그래밍하는데 세심한 주의를 기울여야 함
3) C 프로그래밍
- 프로그래밍
- 목적에 맞는 알고리즘으로부터 프로그래밍 언어를 사용하여 구체적인 프로그램을 작성하는 과정을 의미
- 이렇게 작성된 프로그램은 먼저 실행 파일(executable file)로 변환되어야 실행할 수 있음
- C언어에서 실행 파일을 생성하는 순서
① 소스 파일의 작성
- 작성된 소스 파일의 확장자는 .c
② 선행처리기에 의한 선행처리
③ 컴파일러에 의한 컴파일
- 컴파일이 끝나 기계어로 변환된 파일(=오브젝트 파일)로, 확장자는 .o 나 .obj 가 됨
④ 링커에 의한 링크
⑤ 실행 파일의 생성
- 소스 파일은 선행처리기, 컴파일러 그리고 링커에 의해 위와 같은 과정을 거쳐 실행 파일로 변환됨
- 최근 사용되는 개발 툴은 대부분 위에서 소개한 과정을 모두 내장하고 있으므로, 소스 파일에서 한 번에 실행 파일을 생성해 줌
- 이렇게 생성된 실행 파일의 확장자는 .exe 가 됨
4) C 프로그램의 특징
5) printf() 함수
- C언어의 표준 출력 함수로, 여러 종류의 데이터(data)를 다양한 서식에 맞춰 출력할 수 있게 해줌
6) scanf() 함수
- C언어의 표준 입력 함수로, 사용자로부터 다양한 데이터를 다양한 서식에 맞춰 입력받을 수 있게 해줌
- C언어에서 데이터를 입력받으려면 입력받고자 하는 데이터의 타입에 해당하는 크기의 메모리를 우선 할당받아야 함
* 변수(variable) : 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간
* 주소 연산자(&) : 아래 예제에서 scanf() 함수에 포함된 '&'기호
이 주소 연산자는 입력받은 데이터를 뒤에 나오는 변수에 저장하라는 의미입니다.
(예제)
int main(void) {
int num01, num02;
printf("첫 번째 정수를 입력하세요 : ");
scanf("%d", &num01);
printf("두 번째 정수를 입력하세요 : ");
scanf("%d", &num02);
printf("입력하신 두 정수의 합은 %d입니다.\n", num01 + num02);
return 0;
}
- double형 실수의 입력
- float형 실수를 입력받을 때는 서식 지정자로 '%f'를 사용하면 됨
- double형 실수를 입력받을 때는 printf() 함수에서처럼 '%f'를 사용하면 안됨
- scanf() 함수로 double형 실수를 입력받을 때는 반드시 '%lf' 서식 지정자를 사용해야 정확한 값으로 입력받을 수 있음
** 이스케이프 시퀀스 (escape sequence)
- 프로그램의 결과가 화면에 출력될 때 사용하게 될 특수한 문자를 위해 만들어짐
- 예) \', \", \?, \\, \b, \n, \t
** 서식 지정자 (format specifier)
- 이러한 서식 지정자를 통해 출력할 데이터의 서식을 사용자가 직접 지정할 수 있음
- 예) %c, %s, %d, %i, %f, %e, %E, %%
** 출력 필드의 폭 설정
- 서식 지정자의 '%'기호와 타입을 나타내는 영문자 사이에 숫자를 추가하여 출력되는 필드의 '폭'을 직접 설정 가능
- 또한, 숫자 앞에 '+'기호를 붙이면 숫자를 오른쪽 정렬한 상태에서 양수에는 '+'기호를, 음수에는 '-'기호를 붙여서 출력
- 이때 소수 부분의 숫자는 출력되는 소수의 자릿수를 명시
(예시)
printf("%%d를 사용한 결과 : |%d|\n", 123); // %d를 사용한 결과 : |123|
printf("%%7d를 사용한 결과 : |%7d|\n", 123); // %7d를 사용한 결과 : | 123| //폭7
printf("%%+7d를 사용한 결과 : |%+7d|\n", 123); // %+7d를 사용한 결과 : | +123| //오른쪽정렬
printf("%%-7d를 사용한 결과 : |%-7d|\n\n", 123); // %-7d를 사용한 결과 : |123 | //왼쪽정렬
printf("%%-7d를 사용한 결과 : |%-7d|\n\n", -123); // %-7d를 사용한 결과 : |-123 | //왼쪽정렬
printf("%%f를 사용한 결과 : |%f|\n", 1.23); // %f를 사용한 결과 : |1.230000| //소수점 6자리까지
printf("%%.1f를 사용한 결과 : |%.1f|\n", 1.23); // %.1f를 사용한 결과 : |1.2| //소수점 1자리까지
printf("%%7.2f를 사용한 결과 : |%7.2f|\n", 1.23); // %7.2f를 사용한 결과 : | 1.23| //폭7, 소수점2자리까지
printf("%%+7.2f를 사용한 결과 : |%+7.2f|\n", 1.23); // %+7.2f를 사용한 결과 : | +1.23|
printf("%%-7.2f를 사용한 결과 : |%-7.2f|\n\n", 1.23); // %-7.2f를 사용한 결과 : |1.23 |
<C언어 기초가이드>