#define SIZE 5 // SIZE를 5로 정의
전처리기 지시를 통해 매크로 상수를 정의한다.
전처리기가 소스 파일에서 SIZE를 만나면 정의한 내용으로 바꾼다.
즉, 모두 5로 바꾼다.
→ 이후 컴파일러가 이 소스 파일을 기계어로 번역한다.
간단한 quiz 점수 소스 파일을 작성해보자.
#include <stdio.h> int main() { int quiz[5] = {10, 9, 8, 9, 7}; int i, sum; double average; for (sum = 0, i=0; i<5; i++) printf("%5d점", quiz[i]); for (i=0; i<5; i++) sum = sum + quiz[i]; average = (double) sum / 5 return 0; }
매크로 상수를 사용하지 않았을 때 배열 원소수를 10으로 바꾸려면,
모두 10으로 직접 바꾸어야 한다.
또, 코드를 작성하다보면 5로 나누는 문장도 있고
5를 직접 정의해야 하는 상황도 올 수 있다.
그럼 매우 번거롭지 않을까?..
그러나, 매크로 상수를 사용하면
#include <stdio.h> #define SIZE 5 int main() { int quiz[SIZE] = {10, 9, 8, 9, 7}; int i, sum; double average; for (sum = 0, i=0; i < SIZE; i++) printf("%5d점", quiz[i]); for (i=0; i < SIZE; i++) sum = sum + quiz[i]; average = (double) sum / SIZE; return 0; }
SIZE 5를 10으로 수정하면 끝이다.
보통, 일반 변수와 구분하기 위해
대문자로 사용하는 것이 관습이고,
#define N 5
으로도 많이 사용한다.
배열에서 최댓값은 어떻게 구할까?
배열의 최댓값을 구하기 위해서는
다음과 같은 알고리즘으로 설명된다.
#include <stdio.h> #define N 5 int main() { int i, max, bag[N] = {12, 13, 10, 17, 15}; for (i=0; i < N; i++) // 배열 원소 출력 { printf("%d ", bag[i]); } printf("\n\n"); max = bag[0]; // max를 첫 원소로 초기화 for (i=1; i < N; i++) { if (bag[i] > max) max = bag[i]; // 지금까지의 최댓값보다 더 큰 값으로 변경 } printf("최댓값은 %d입니다. \n", max); return 0; }
👍
5명의 키를 비교할 때, 나보다 큰 사람은 2명이 있다고 가정하면 키 큰 순서로 나는 3위 이다.
딱 봐도 배열 최댓값 문제 같다.
해보자!
i에 순위를 구할 키를 입력받기
내 키는
me = tall[i-1]; // 번호는 1부터 시작, 배열 첨자는 0부터 시작에 저장
내 키의 순위를 1로 초기화:
rank = 1;
모든 배열 원소와 내 키를 비교하여 더 큰 원소가 있을 때마다 rank를 1 증가
#include <stdio.h> #define N 5 int main() { int i, me, rank, u, tall[5] = {185, 170, 183, 177, 188}; printf("몇 번 사람의 키 순위?"); scanf("%d", &i); me = tall[i-1]; // 첨자는 0부터 시작하므로 rank = 1; // 일단 순위를 1로 가정 for (u=0; u < N; u++) // 모든 키와 내 키를 비교 if (tall[u] > me) rank++; // 순위를 1 증가 printf("순위: %d위 \n", rank); return 0; }
👍