티스토리 뷰
반응형
이것이 C언어다: Chapter 01~03 완전 정복
Chapter 01. C 언어와 C 프로그램의 큰 그림
01-1. C 언어, 왜 배울까?
- 임베디드, 운영체제, 네트워크, 게임 엔진까지 폭넓게 쓰이는 로우 레벨 언어
- 빠른 실행 속도, 메모리 제어(포인터), 이식성이 강점
- 파이썬·자바 같은 고수준 언어를 이해하는 데도 큰 도움
01-2. C 프로그램의 전체 구조
C 소스 하나에 보통 아래 4요소가 들어갑니다.
- 전처리 지시문: #include <stdio.h> 처럼 컴파일 전에 처리
- 전역 선언: 전역 변수, 다른 파일에서 쓸 함수 원형 등
- 함수 정의: main 포함 모든 함수
- 문(statement): 세미콜론으로 끝나는 실행 단위
가장 작은 실행 예:
#include <stdio.h>
int main(void) {
printf("Hello, C!\n");
return 0; // 운영체제에 정상 종료 알림
}
- main은 프로그램의 시작점
- \n은 줄바꿈(개행)
- return 0;은 관례적인 "정상 종료" 표시
01-3. 컴파일과 실행 흐름
- 컴파일: 사람이 쓴 .c → 기계어
- 링크: 표준 라이브러리 같은 외부 코드 결합
- 실행 파일 생성 → 실행
작은 팁 ✅
- 파일명, 한글 경로 문제를 줄이려면 영문 경로 사용 추천
- 경고(warning)도 가볍게 넘기지 말기
Chapter 02. 프로그램의 기본 구성
02-1. Hello world! 돌아보기
printf 한 줄에도 기본 개념이 모두 숨어 있어요.
#include <stdio.h>
int main(void) {
printf("Hello world!\n"); // 화면으로 문자열 출력
return 0;
}
핵심 포인트
- 큰따옴표로 감싼 문자열 상수
- 이스케이프 시퀀스: \n(줄바꿈), \t(탭), \"(큰따옴표 출력) 등
- 함수 호출은 함수이름(인자들); 형태
연습 ✍️
- Hello 다음 줄에 C를 출력해 보세요.
- 큰따옴표가 포함된 He said "Hi"를 정확히 출력해 보세요.
정답 예시
printf("Hello\n");
printf("C\n");
printf("He said \"Hi\"\n");
02-2. “주소가 들어가야 완성된다”의 의미: & 연산자와 입력
C에서 주소(address) 는 매우 중요합니다. 대표적인 예가 scanf입니다.
#include <stdio.h>
int main(void) {
int age;
printf("나이를 입력하세요: ");
scanf("%d", &age); // 변수 age의 '주소'를 전달해야 함
printf("내 나이는 %d살\n", age);
return 0;
}
왜 &age일까?
- scanf는 입력한 값을 어디에 저장할지 알아야 합니다.
- 변수의 주소를 넘기면 그 위치에 값을 써 넣을 수 있어요.
- 주소를 담는 변수를 포인터라고 부르며, C의 핵심 개념입니다.
자주 하는 실수 ⚠️
- scanf("%d", age); 처럼 &를 빼먹으면 런타임 오류 또는 엉뚱한 값이 들어갑니다.
문자와 문자열 입력 기본형
char ch;
char name[20];
scanf(" %c", &ch); // 앞 공백은 이전 개행 제거용 팁
scanf("%19s", name); // 공백 전까지 읽음, 버퍼 오버플로 방지
02-3. printf 정확히 이해하기 (형식 지정자)
자주 쓰는 형식 지정자 요약:
- %d 정수(int)
- %u 부호 없는 정수(unsigned)
- %ld, %lld 더 큰 정수(long, long long)
- %f 실수(float는 자동 승격으로 double로 출력)
- %lf 실수 입력에서 double, 출력은 %f 사용
- %c 문자
- %s 문자열(문자 배열의 시작 주소)
- %p 포인터(주소)
폭과 정밀도
printf("[%10d]\n", 123); // 오른쪽 정렬, 총 폭 10
printf("[%-10d]\n", 123); // 왼쪽 정렬
printf("[%.2f]\n", 3.14159); // 소수 둘째 자리까지
printf("[%10.2f]\n", 3.14159);
형식/인자 불일치 주의 ⚠️
- printf("%d", 3.14); 같은 코드는 정의되지 않은 동작
- 형식 지정자와 인자 타입을 반드시 맞추세요.
02-4. C의 기본 문법 포인트 정리
- 세미콜론(;) 으로 문(statement) 종료
- 블록: {와 }로 범위 묶기
- 주석: // 한 줄, /* 여러 줄 */
- 식과 대입: a = b + c;
- 헤더 포함: 표준 입출력은 #include <stdio.h>
작은 습관 팁 ✅
- 한 줄에 하나의 문만 쓰기
- 들여쓰기와 공백을 일정하게 유지하기
- 경고를 0개로 만드는 습관
Chapter 03. 변수와 연산자
03-1. 변수 선언과 초기화
대표 타입
- int 정수
- double 실수(정밀함)
- float 실수(가벼움)
- char 문자 1개(작은따옴표)
- long, long long, unsigned는 범위 확장
예:
int a = 10; // 선언과 동시에 초기화
double pi = 3.141592;
char c = 'A';
스코프와 수명
- 블록 스코프: { } 내부에서만 유효
- 전역 변수: 파일 전체에서 사용(필요할 때만!)
- const: 수정 불가 상수
const int MAX = 100; // 바뀌면 안 되는 값
문자와 문자열
char ch = 'a'; // 문자 하나
char str[6] = "hello"; // 마지막에 자동으로 '\0' (널 문자)
03-2. 연산자 한눈에
산술: + - * / %
대입: = += -= *= /= %=
증감: ++ -- (전위/후위 차이 주의)
비교: == != > < >= <= (결과는 0 또는 1)
논리: && || ! (단락 평가)
비트: & | ^ ~ << >> (정수에서만)
우선순위와 결합 규칙
- 단항(! ++ --) → 곱셈/나눗셈 → 덧셈/뺄셈 → 비교 → 논리 → 대입
- 헷갈리면 괄호로 명확히 하기
정수 나눗셈 주의 ⚠️
printf("%d\n", 5/2); // 2 (정수 나눗셈)
printf("%.1f\n", 5/2.0);// 2.5 (실수 나눗셈)
형변환(cast)
int a = 5, b = 2;
double r1 = a / b; // 2.0 (둘 다 int라 정수 나눗셈 후 실수 저장)
double r2 = (double)a / b; // 2.5 (하나라도 실수면 실수 나눗셈)
03-3. 작은 프로그램으로 정리하기
- 입력 받은 두 정수의 합과 평균
#include <stdio.h>
int main(void) {
int x, y;
printf("두 정수를 입력하세요: ");
scanf("%d %d", &x, &y);
int sum = x + y;
double avg = (x + y) / 2.0; // 2.0으로 나눠 실수 평균
printf("합: %d\n", sum);
printf("평균: %.2f\n", avg);
return 0;
}
- 문자와 문자열 다루기
#include <stdio.h>
int main(void) {
char initial;
char name[20];
printf("이니셜(한 글자): ");
scanf(" %c", &initial); // 공백 제거를 위해 앞에 공백
printf("이름(공백 없는 단어): ");
scanf("%19s", name);
printf("안녕하세요 %c. %s님!\n", initial, name);
return 0;
}
- 서식 지정자 종합 테스트
#include <stdio.h>
int main(void) {
int a = 123;
double d = 3.14159;
printf("[%10d]\n", a);
printf("[%-10d]\n", a);
printf("[%.3f]\n", d);
printf("[%10.2f]\n", d);
return 0;
}
흔한 오류 모음과 해결 팁
- scanf에서 & 빠짐
- 증상: 이상한 값, 충돌
- 해결: 정수·실수·문자 입력은 주소 전달(&변수), 문자열은 배열 이름 자체가 주소
- 형식 지정자 불일치
- 예: printf("%d", 3.14);
- 해결: 타입과 형식을 정확히 매칭
- 개행 처리 문제
- 여러 번 scanf 쓸 때 이전 입력의 개행이 남아 char 입력을 건너뛰는 현상
- 해결: 문자 입력 전 " %c"처럼 앞에 공백 넣어 개행 흡수
- 초기화하지 않은 변수 사용
- 컴파일은 되지만 예측 불가 값
- 해결: 항상 초기화하고 쓰기
미니 연습 문제 (직접 풀어보기)
- 사용자에게 섭씨 온도를 입력받아 화씨로 변환해 출력하세요.
- 공식: F = C * 9 / 5 + 32
- 소수 둘째 자리까지 출력
- 세 정수의 최댓값을 구해보세요.
- if문 또는 삼항 연산자 사용
- 문자열 배열 char word[50]; 에 단어를 읽어 와서
- 길이(문자 개수)를 계산해 출력하세요.
- 힌트: 반복문으로 '\0' 까지 센다.
정답 아이디어
-
- 형변환 또는 실수 리터럴 사용
-
- if (a > b) max = a; else max = b; 식으로 누적 비교
-
- 인덱스를 0부터 증가시키며 word[i] == '\0' 이면 종료
마무리 핵심 정리 ✅
- C의 최소 골격: #include + int main(void) + return 0;
- 입력은 주소가 핵심(&), 출력은 형식 지정자가 핵심
- 변수 타입과 형식 지정자 매칭이 안전의 시작
- 연산자 우선순위는 괄호로 명확히
- 경고 0개를 목표로 깔끔한 코딩 습관 들이기
반응형
'[문법] C언어' 카테고리의 다른 글
6) C언어 함수 완전정리: 정의, 호출, 변수 범위와 재귀까지 (4) | 2025.08.31 |
---|---|
5) C언어 조건문 완전정리: if / switch / break / continue (0) | 2025.08.31 |
4) C언어 반복문 완전정리: while, do~while, for 한눈에 배우기 (4) | 2025.08.31 |
3) C언어 입출력 완전정복: printf와 scanf 쉽게 배우기 (4) | 2025.08.31 |
2) C언어 비트 연산자, 상수, 자료형 개념 정리 (2) | 2025.08.31 |