*전처리기 개요

- 출처: c언어 프로그래밍 강의 자료|한성현 교수님

 

 

*#define

- 매크로 상수

프로그램 전체에서 하나의 기호 상수를 다른 이름으로 대치시키도록 전처리기에게 알려준다.

ex) #define PI 3.141592

→ PI를 찾아 컴파일하기 전에 모두 3.141592로 바꾸어 준다.

- 매크로 함수

매개변수가 있는 함수같은 매크로

 

(실습 예제 5.1)

· 매크로 상수 : AA → 2로 변경

· 매크로 함수 : sum3(i,j,k) → ((i)+(j)+(k))로 변경

 

 

*#include

#include <파일명> : 표준 입출력 함수들을 사용하기 위해 <stdio.h>와 같은 표준 헤더 파일을 프로그램에 포함시키는 것

#include "파일명" : 표준 헤더 파일이 아닌 프로그래머가 만든 파일을 포함시킬 때 사용

 

 

*미리 정의된 매크로

- 프로그래머를 위하여 컴파일러가 미리 제공하는 매크로

__LINE__ : 소스 내의 행번호

__DATE__ : 전처리기 실행(컴파일) 날짜

__TIME__ : 전처리기가 실행된(컴파일한) 시간

__TIMESTAMP__ : 전처리기가 실행된 시간과 날짜

__FILE__ : 디렉토리를 포함한 소스 파일의 이름

 

 

*실습 소스 수정

#define _CRT_SECURE_NO_WARNINGS // Visual Studio에서 scanf 사용 시 경고를 막기 위한 전처리기 지시문

#include <stdio.h> // printf, scanf 같은 표준 입출력 함수들을 사용하기 위한 헤더파일 포함
int main(void) // 프로그램의 시작 함수(main), 반환형은 int

 

{
int kor, eng, mat, science, total; // 국어, 영어, 수학, 과학 점수와 총점을 저장할 정수형 변수 선언
double avg; // 평균을 저장할 실수형(double) 변수 선언
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"); // 프로그램 제목 테두리 출력
printf("\n┃총점과 평균을 구하는 프로그램입니다.┃\n"); // 프로그램 설명 출력
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); // 테두리 마무리 출력

 

printf("국어 점수를 입력하고 Enter를 누르세요 => "); // 사용자에게 국어 점수 입력 안내
scanf("%d", &kor); // 정수 입력을 받아 kor 변수의 주소에 저장
printf("영어 점수를 입력하고 Enter를 누르세요 => "); // 영어 점수 입력 안내
scanf("%d", &eng); // 입력값을 eng 변수에 저장
printf("수학 점수를 입력하고 Enter를 누르세요 => "); // 수학 점수 입력 안내
scanf("%d", &mat); // 입력값을 mat 변수에 저장
printf("과학 점수를 입력하고 Enter를 누르세요 => "); // 과학 점수 입력 안내
scanf("%d", &science); // 입력값을 science 변수에 저장
total = kor + eng + mat + science; // 4과목 점수를 모두 더해 총점을 계산
avg = total / 4.0; // 총점을 4.0으로 나누어 평균 계산 (실수 연산을 위해 4.0 사용)
printf("\n당신의 총점은 %d이고, 평균은 %.2f입니다.\n", total, avg); // 총점은 정수(%d), 평균은 소수 둘째 자리까지(%.2f) 출력
return 0; // 프로그램이 정상적으로 끝났음을 운영체제에 알림

}

 

 

 

*연산자

출처: c언어 프로그래밍 강의 자료|한성현 교수님

 

 

*연산자의 우선순위와 결합성

- precedence와 associativity는 연산자가 여러 개 있을 때 계산 순서를 결정하는 규칙이다.

 · precedence(우선순위): 어떤 연산자를 먼저 계산할지 정하는 기준
   → ex) 3+4*5에서 *가 +보다 우선순위가 높아서 먼저 계산됨

 · associativity(결합): 우선순위가 같은 연산자들끼리 어떤 방향으로 계산할지 정하는 규칙
   → ex) 10-5-2는 왼쪽부터 계산(좌결합)해서 (10-5)-2

 

 

*단항 연산자

(실습 예제 6.2)

 

 

*대입 연산자

- "변수=수식"과 같이 대입하는 연산

1) a=b;

a라는 변수에 b변수 값을 대입

2) a=b+c;

a라는 변수에 b변수의 값과 c변수의 값을 더한 값을 대입

3) x=y=10;

대입 연산자는 결합성이 ←방향이기 때문에 y=10을 먼저 실행

 

 

*혼합 대입 연산자

a=a+5;   a+=5; //a의 값을 5 증가

a=a-3;   a-=3; //a의 값을 3 감소

a=a*2;   a*=2; //a의 값 2배

a= a/2;   a/=2; //a 값을 나누기 2

 

· a의 값을 1 증가하는 방법 : a=a+1; a+=1; a++; ++a;

· a의 값을 1 감소하는 방법 : a=a-1; a-=1; a--; --a;

 

(실습 예제 6.3)

 

 

*관계(비교) 연산자

- 결과가 참이면 1 거짓이면 0으로 나온다.

(실습 예제 6.4)

 

 

== : 같은지 비교하는 연산자

!= : 같지 않은지 비교하는 연산자

(실습 예제 6.5)

 

 

*논리 연산자

&& (ampersand) - AND : 두 피연산자가 모두 참일 때 참

|| (pipe) - OR : 둘 중 하나만 참이면 참

! - NOT : 피연산자가 참이면 거짓으로, 거짓이면 참으로 만듦

 

 

+추가 정리)

c언어에서 참과 거짓으로만 따질 때 0만 거짓이며, 나머지는 모두 참이다.

short circuit rule : 결과가 이미 정해지면 뒤의 연산은 생략하는 규칙

· && (AND)
  → 앞이 **거짓(0)**이면 뒤는 볼 필요 없이 전체가 거짓

·  || (OR)
  → 앞이 **참(0이 아님)**이면 뒤는 볼 필요 없이 전체가 참

 

 

(실습 예제 6.6)

 

 

(실습 예제 6.7)

 

 

*윤년 계산

 

 

 

 

 

 

'c언어 > 복습 과제' 카테고리의 다른 글

c프로그래밍 10주차  (0) 2026.05.06
c프로그래밍 9주차  (0) 2026.04.29
c프로그래밍 6주차  (0) 2026.04.08
c프로그래밍 5주차  (0) 2026.04.01
c프로그래밍 3주차  (0) 2026.03.18