컴퓨터 프로그래밍 : 중간고사 대비

2026. 4. 21. 18:52·강의 아카이브/컴퓨터 프로그래밍


  다음 내용은 C언어에 출제되는 핵심 내용을 정리해둔 것입니다. 제가 옛날에 시험봤던 C언어 문제들 기반으로 작성되었습니다. 일단 기본적인 개념은 웬만해서 다 아신다고 가정을 하고 문제를 내보겠습니다. 아시는 건 그냥 스킵하셔도 됩니다. 일단 컴프 A+ 받았고 문제도 기억해놓아서 믿으셔도 됩니다. 일단 주제별, 문제로 나올 확률이 높을수록 별 개수를 많이 표기하였습니다. 어차피 컴프 절대 평가니깐 다른 분들하고 많이 공유해주셨음 조켔슴니다.

 

∨ 기본 개념 문제 ★★★

  아마 1번 문제나, 두 번째 장의 첫 번째 문제 정도로 나올 수 있는 개념을 물어보는 문제입니다. 주로 C언어의 문법이나 변수명에 대한 문제가 나올 가능성이 농후하고, 헷갈리는 부분이 있을 수 있으니 짚고 넘어가보도록 합시다.

 

  c언어의 개념 문제의 경우, 프로그램이 무엇인지, C언어 만든사람이 누구인지, 벨 연구소의 업적이 무엇인 지, 순서도 작성법 이런건 나올 일도 없고 나오더라도 어차피 다 틀릴테니 공부 안하셔도 됩니다. 

 

  대신 변수명에 대신 규칙을 정리해보겠습니다. 변수명은 문제로 안나올 일이 없기 때문입니다.

 

변수명 규칙입니다.

  • 영문/숫자/언더바(_)만 사용가능
  • 대/소문자 구분
  • 첫 글자로 숫자는 금지
  • 키워드(int, if) 사용 금지

이를 통해 금지되는 변수명을 모두 골라봅시다. 

①NUMBER ②number ③2nd ④___ ⑤fisrt-name ⑥ifint ⑦if ⑧x0 ⑨INT, ⑩second name

 

  정답은 ③, ⑤, ⑦, ⑩ 입니다. 일단 이 내용도 의아해 하실 수도 있으니 아래 결과에서 주석 해제하면 오류 발생하시는 거 보실 수 있습니다. 그리고 이딴식으로 문제 안내고 일부로 이상하게 꼬아서 문제 낸거니깐 감안하고 보시면 될 것 같습니다..

 

  우선, ①(NUMBER), ②(number)은 영문으로 작성되어서 문제는 없으나 C언어는 대소문자를 구분하므로 ①번과 ②번 변수는 서로 다른 변수입니다. ③의 "2nd" 경우, 숫자로 시작하면 안된다고 했는데 숫자로 시작해서 문제가 발생합니다. ⑧번의 경우, "x0"에 숫자가 들어있긴 하지만 숫자는 첫 글자에만 안오면 문제없습니다. ④ ___도 이상하긴 한데, 변수는 영문, 숫자, 언더바(_)로 작성하면 문제없기 때문에 언더바도 어떻게 쓰건 문제는 없습니다. ⑤ first-name에서 특수문자 '-'는 허용되지 않습니다. 허용되는 특수문자는 언더바(_)뿐입니다. ⑥ifint도 키워드인 if와 int가 포함되어 있기 때문에 문제가 발생할 것 같으나? ⑦번 if 처럼 아예 키워드와 같지 않으면 괜찮습니다. ⑨번의 INT 변수명의 경우도 대소문자가 달라서 괜찮습니다. int라면 문제가 발생했겠지만요. ⑩의 경우, 변수명이 second name인데 second와 name 사이에 공백이 있어서 문제가 발생합니다. 변수명으로 가능한 것은 영문, 숫자, 언더바(_)이지, 공백은 불가능합니다.

#include <stdio.h>

int main(void) {

	int NUMBER;
	int number;
	//int 2nd;
	int ____;
	//int fisrt-name;
	int ifint;
	//int if;
	int x0;
	int INT;
	//int second name;
    
	return 0;
}

 

 

∨ printf 출력 문제  ★★★★

  보통 첫 장 문제에 printf는 포함되어 있을 겁니다. printf에서 주요 개념들을 봅시다. 이와 관련된 문제를 풀기 위해서는 다음 문자열을 출력할 줄 알아야 합니다.

 

  • 한성대학교
  • "한성대학교"
  • "\n은 줄바꿈 문자입니다."
  • 17 % 3 == 2이다.

 

  위 문자열을 출력하는 printf문을 나열하였습니다. 의심쩍을 수도 있으니 아래 전체 코드를 포함시켜 놓았습니다. 복붙해서 실행해보시길 바랍니다.

printf("한성대학교");
printf("\"한성대학교\"");
printf("\"\\n는 줄바꿈 문자\"");
printf("17 %% 3 == 2이다.");
#include <stdio.h>

int main(void) {
	printf("한성대학교");
	printf("\n");
	printf("\"한성대학교\"");
	printf("\n");
	printf("\"\\n는 줄바꿈 문자\"");
	printf("\n");
	printf("17 %% 3 == 2이다.");
	return 0;
}

 

  매커니즘은 간단합니다. printf문에서 출력할 문자열은 쌍따옴표 "를 감싸되 이 쌍따옴표 내에서 \"은 "로 출력되고, \\은 \로 출력됩니다. %%은 %로 출력됩니다. 실행시켜 보면서 하시는 것도 좋을 것 같슴다.

#include <stdio.h>

int main(void) {
	printf("\\\\"); // -> 쌍따옴표 안의 \\\\는 \\로 출력된다. (\\이 \로 출력되니깐)
	printf("\"\""); // -> 쌍따옴표 안의 \"\"는 ""로 출력된다. (\"이 "로 출력되니깐)
	return 0;
}

 

∨ 연산자 ★★★

  아마 다양한 연산자와 결과를 예상하는 문제가 나올 것입니다. 이 부분은 크게 다음과 같이 나눌 수 있습니다. 

  1. 사칙연산(나머지 연산 %까지 포함)
  2. 복합 대입 연산자
  3. 전위, 후위 연산자 ★★★★★
  4. 삼항 연산자 
  5. 논리 연산자

 

∨ 사칙연산(나머지 연산 %까지 포함) ★★

   사칙 연산부터 보도록 합시다. 다음 연산의 결과를 예상해봅시다. 일단 사칙연산중에 +, - 이건 볼게 없고 *랑 /, %에서 좀 낚시를 걸 수가 있는데...

17/5
5%17

다음 코드를 실행해보면..

#include <stdio.h>

int main(void) {
	int result1 = 17 / 5;
	int result2 = 5 % 17;

	printf("%d %d", result1, result2);
	return 0;
}

다음과 같이 출력됩니다.

3 5

 

  사칙 연산 관련 연산자에서 볼 만한 내용은 2가지 입니다. 정수끼리 나눗셈하면 몫 연산이 수행됩니다. (즉, 나눗셈의 결과가 정수) 즉, 1 / 2 의 결과가 0.5가 아니라는 겁니다. (정수끼리 나눗셈의 결과는 정수이므로),

 

  그리고 두 번째는 나머지 연산자 %를 아느냐. 이정도면 될 것 같습니다.

 

  만약 정수끼리 나눗셈을 할 때 결과가 실수가 되도록 하려면 나눗셈을 수행하는 값 중 하나만 (float) 형변환 연산자 사용해주면 됩니다. ex) (float)17 / 5 -> 결과로 실수가 반환됨.

 

∨ 복합 대입 연산자 ★★

  복합 대입 연산자도 어려운 내용은 아닌데 작년에 교수님께서 강조하시긴 하셔서 일단은 적어봅니다. 아래 코드가 어떻게 작동하시는 지 아시죠? 그냥 우변 값 a + b + c 을 좌변에 곱해주면 됩니다. += 였으면 우변에 좌변을 더해주면 되구요...

z *= a + b + c;

 

  이런건 그냥 이렇게 보면 편합니다. 변수 *= 우변 식을 변수 = 변수 * (우변) 꼴로 바꿔 계산하면 됩니다.

z = z * (a + b + c);

 

  z /= ~~ 이런것도 가능합니다. 끝

 

∨ 전위, 후위 연산자 ★★★★

  다음은 전위, 후위 연산자 내용입니다. 이건 무조건 나온다고 보시면 됩니다. (물론 가지문제로 나올 확률 85%) ++, -- 에 대한 내용인데, 일단 이와 관련한 중요한 내용은 두 개가 있습니다.

  1. 전위, 후위 연산자는 변수에만 사용가능.
  2. 증감 타이밍

  일단 1번부터 설명하자면 다음의 코드를 보시겠습니다. 추가 설명은 주석으로 달겠습니다.

// num이라는 변수가 존재할 때, 다음처럼 사용가능
num++;
++num;
num--;
--num;

//근데 다음과 같은 경우는 안됨.
5++;
++5;
5--;
--5;

   혹시 모르니 이 연산자에 잠깐 짚고 넘어가자면 ++, -- 모두 변수에만 사용가능하고, 위 경우처럼 변수에 붙여주면 ++ 연산자는 변수의 값을 1 증가시켜줍니다. -- 연산자는 변수의 값을 1 감소시켜줍니다. 근데 num++; ++num;처럼 ++ 연산자가 변수 앞에 붙느냐 뒤에 붙느냐에도 아주 중요한 차이가 발생합니다. (물론 두 경우 모두 1 증가시키는 건 똑같습니다.) 이 차이에 관련된 내용이 "2번 증감 타이밍"입니다.

 

   ++, -- 연산자가 변수의 앞에 붙느냐 뒤에 붙느냐의 차이는 증감이 언제 이루어지느냐입니다. 

++num;
num++;

 

  ++num; 처럼 변수의 앞에 ++가 붙으면 num 변수의 값을 1 증가시킵니다. 근데 num++; 처럼 변수의 뒤에 ++가 붙으면 num변수가 포함된 식을 마친 후 증가하게 됩니다. 그냥 말 어려우니깐 다음 예시 보면 됩니다. 코드의 출력을 예상해보세요.

int a = 5;
int b = 4;
int result = a++ + ++b; // 주목!
printf("%d %d %d", a, b, result);

 

  여기서 주목해야 할 부분을 주석으로 표시해두었습니다. 

int result = a++ + ++b;

  이 식은 정수형 변수 result에 a++ + ++b의 값을 대입하는 식입니다. ++b를 먼저 보면, ++가 변수 앞에 붙었기 때문에 그냥 b의 값을 1 증가시킵니다. 그래서 b의 값은 5가 됩니다. 즉, 다음과 같습니다.

int result = a++ + 5;

  근데 여기서 중요한 것은 a++입니다. a++는 a의 값이 ++에 의해 증가하여 6이 될 것 같지만... 변수 뒤에 붙은 ++나 --는 해당 변수가 포함된 코드를 마치고 실행하게 됩니다. 즉, a의 기존 값을 쓰고 증감은 나중에 하는 것이죠. 코드의 흐름은 다음과 같습니다.

int result = 5 + 5; // 일단 a의 값은 5 (증가시키기 이전)
// 이 코드를 실행하여 result 변수에 5 + 5를 대입함!
// 그 후 대입을 마치면 a의 값을 1 증가시킴. (a는 6이 된다.)

  따라서 int result = ~~ 코드를 마치고 나서 a의 값을 증가시킵니다. 이 int result = ~~ 코드를 실행할 땐 아직 증가시키지 않는 a의 값을 사용합니다. 아무튼 그래서 결과는 다음가 같습니다.

6 5 10

∨ 삼항 연산자 ★

  이 개념도 나오긴 할텐데, 아마 소문제로 딱 하나 출제될 가능성이 높습니다. 아예 안나오진 않을테고, 또 잘 안쓰이는 연산자라 혹시 모르니 보고 갑시다. 삼항 연산자의 형식은 다음과 같습니다.

조건식 ? 값1 : 값2

조건식이 참이면 -> 값1

조건식이 거짓이면 -> 값2

을 반환합니다. 조건식이 참일 때 물음표 바로 뒤 쪽 값을 반환하는 것을 헷갈리지 맙시다.

 

  이 문법은 그냥 예시로만 보고 넘어갑시다. 아마 문제에서도 삼항 연산자의 사용이 아래 2가지 예시에서 크게 벗어나지 않을 것 같습니다. 보고 어떤 코드인지만 이해할 수 있으면 됩니다. 

int a = 10;
int b = 8;
int max = (a>b) ? a : b;
int a = 8;
int b = 13;
(a<=b) ? printf("b가 크거나 같음") : printf("a가 큼");

 

∨ 비교 연산자, 논리 연산자 ★★

  별건 아닙니다만 알아두면 좋을 것 같아서 내용을 서술해봅니다. >, == 등의 비교 연산자와 &&, ! 등의 비교 연산자는 결과값으로 1또는 0을 반환합니다. 1은 참(true)를 의미하고 0은 거짓(false)을 의미합니다. 이때 0만 거짓이고, 0이외의 값은 모두 참입니다. 이를 알고 다음 연산 결과를 예상해봅시다.

-1 || 0
!(5 > 3)
!100
!(x=0)

  ! 연산자는 참을 거짓으로, 거짓을 참으로 바꾸는 연산자인데, 참(0이외의 값)은 0으로, 거짓(0)은 1로 바꿉니다. 그리고 -1은 거짓이 아닙니다... -1은 참이므로 이를 참고하시길 바랍니다. 100 또한 0이외의 값이므로 참입니다. 즉, ! 연산자에 의해 거짓으로 변합니다. 따라서 !100은 0입니다. !(x=0)의 결과를 알기 전에 대입 연산자는 대입한 값을 반환한다는 특징이 있습니다. 변수 x에 0을 대입하므로 (x=0)의 결과값은 0입니다. 여기에 ! 연산자까지 붙이면 !0이고 이는 1입니다.

-1 || 0 // 1
!(5 > 3) // 0 
!100 // 0
!(x=0) // 1

  약간 불안하신 분은 아래 코드를 실행해서 직접 확인해보시길 바랍니다.

#include <stdio.h>

int main(void) {
	int x = 1;

	printf("%d %d %d %d", -1 || 0, !(5 > 3), !100, !(x = 0));
	return 0;
}

 

  이것도 작년에 소문제로 나왔습니다.

 

∨ 자료형과 형식 지정자 ★★

   입력을 받을 때나 출력할 때 올바른 형식 지정자를 써주어야 합니다. 아니면 반대로 형식 지정자를 보고 어떤 형식으로 출력될 지 예상하는 문제가 나올 겁니다. 

 

  우선 정수에 대해 알아보겠습니다. 정수형은 두 가지 특징이 있습니다. 첫째, 부호가 없는 unsigned 자료형은 실수에는 없고 정수형에만 존재한다는 점입니다. (근데 unsigned 자료형 나올 지 모르겟다..) 둘째, 정수 데이터는 10진수뿐만 아니라 8진수와 16진수 형태로도 출력할 수 있습니다. 8-10-16진수 내용은 아래에 따로 빼두겠습니다. 8진수와 16진수 문제는 나올 확률이 높다고 생각합니다. 읽는 방법은 아래 chatgpt 복붙해놓았습니다..

 

  근데 이거 솔직히 작년에 안나오긴 했는데 그래도 코딩할 때 아시긴 하셔야 합니다.

unsigned 자료형 입력/출력 시엔 %u 쓰고, float은 %f, 문자 출력은 %c 등등...

∨ 8, 16진수 ★★★★

  일단 이 유형 문제는 나올 확률 높다고 생각합니다. 아마 나오긴 할텐데 이 부분도 어렵진 않아서 괜찮을 겁니다. 다만 10진수, 8진수, 16진수를 어떻게 읽고 서로 어떻게 변환하는 지 모르신다면 아래 부분에서 읽고 오시는 것이 좋을 것 같습니다.

10진수, 16진수, 8진수 상수 표기
진법 표기 예시(다 다른 값)
10진수 그냥 우리 일상에서 쓰는 대로 12
16진수 앞에 0x를 붙인다. 0x1A
8진수 앞에 0을 붙인다. 032

 

정수 형식 지정자 (10진수, 16진수, 8진수)
형식 지정자 표기 예시(다 다른 값)
%d 10진수 9
%x 16진수 (소문자) ff
%X 16진수 (대문자) FF
%o 8진수 377
%#x 0x 포함 16진수 0xff
%#o 0 포함 8진수 0377

 

  아마 10진수를 16진수, 16진수를 10진수로 출력하게 문제가 나올텐데, 16진수나 8진수를 읽을 줄만 안다면 문제 없다고 생각합니다. 그럼 아래 코드의 결과를 예측해보세요.

int a = 0xA5;
int b = 0210;
printf("%d %d",a,b);

  

  결과는 다음과 같습니다.

165 136

 

  8진수나 16진수를 10진수로 바꾸거나 반대로 바꾸는 방법, 또 8진수 읽는 법, 16진수 읽는 법을 바로 아래에 써놓았습니다. 참고하시면 좋을 것 같습니다.

 

∨ 참고 : 10진수 8진수 16진수 

  쓸려고 했는데 귀찮기도 하고 솔직히 저 아니어도 다른 글로 충분히 찾아 볼 수 있을 것 같아서 그냥 chatgpt 글 복붙해놓겠습니다.

 

 

🔥 진법 변환 (읽기 & 바꾸기)

1️⃣ 10진수 → 2/8/16진수 (나누기 방법)

👉 계속 나누고 나머지를 거꾸로 읽는다


✔ 10진수 → 16진수

예: 165 → 16진수

165 ÷ 16 = 10 ... 5
10 ÷ 16 = 0 ... 10(A)
 

👉 아래부터 읽기
👉 A5


✔ 10진수 → 8진수

예: 136 → 8진수

136 ÷ 8 = 17 ... 0
17 ÷ 8 = 2 ... 1
2 ÷ 8 = 0 ... 2
 

👉 아래부터 읽기
👉 210


2️⃣ 2/8/16진수 → 10진수 (곱하기 방법)

👉 각 자리 × (진법의 거듭제곱)


✔ 16진수 → 10진수

예: A5

A(10) × 16¹ + 5 × 16⁰
= 160 + 5
= 165
 

✔ 8진수 → 10진수

예: 210

2 × 8² + 1 × 8¹ + 0 × 8⁰
= 128 + 8 + 0
= 136
 

3️⃣ 빠른 팁 (시험용 핵심)

✔ 16진수 문자

  • A = 10
  • B = 11
  • C = 12
  • D = 13
  • E = 14
  • F = 15

✔ 방향 기억법

  • 👉 10진수 → 다른 진법
    → 나누기 + 나머지 역순
  • 👉 다른 진법 → 10진수
    → 곱하기 + 더하기

🔥 한 줄 정리

👉 나누면 바뀌고, 곱하면 돌아온다

 

∨ printf문과 형식 지정자 ★★★★

  printf문에서 형식 지정자에 따라 어떻게 출력되는 지 볼텐데. 여기 부분에선 자료형 관련 이야기가 아니라 출력 관련 이야기를 할 겁니다. 필드폭과 정렬, 필드입니다.

 

  필드폭은 그냥 %바로 뒤에 숫자를 씀으로써 사용할 수 있습니다. %10d, %3f처럼 말이죠. 출력을 하되, %10d는 10칸을 잡고 정수 출력을, %3f는 3칸을 잡고 실수 출력을 하겠다는 의미입니다. 여기서 10칸을 잡는다는 것은 다음과 같습니다. 만약 다음 코드를 실행한다고 했을 때,

printf("%10d", 12);

10칸을 잡은 후 12를 10칸 내에서 출력합니다. 남은 칸은 공백으로 채우고, 칸이 부족하면 이 10칸을 벗어납니다.

그래서 위 코드 실행해보면 결과가 다음과 같습니다. 앞의 공백이 8칸인지 세보니깐 맞네요 (10칸 중 2칸 차지하고 나머지 8칸은 공백)

        12

 

(아래 bash, 공백 세보았음.)

        12
12345678

 

  필드폭 앞에 - 붙여주면 좌측 정렬됩니다.

printf("%-10d%d", 12, 0);

 결과가 다음과 같은데 왜냐하면

12        0

다음처럼 10칸 잡고, 좌측 정렬로 12 출력한 후, 0출력하게 되기 때문입니다.

 

  뭐 %010d처럼 %뒤에 필드폭 앞에 0을 써주면 공백 대신 0으로 칸이 채워진다 뭐 그런것도 있는데 그런것까진 문제 안나올 것 같구요..

 

  가장 중요한 형식 지정자는 실수 형태입니다. 일단 float이든 double 형이든 printf문에서 %f 형식 지정자를 이용하구요. 제일 중요한 것은 정밀도입니다. 필드폭은 출력 결과의 전체 자리 수를 의미하며, 정밀도는 소수점 이하 몇 자리까지 출력할지를 의미합니다. 기본적으로 %f는 소수점 이하 6자리까지 출력합니다. 참고로 실수도 필드폭 쓸 수 있습니다.

%3f // 필드폭 사용 예시

 

정밀도는 만약 소수점 5자리 까지 출력할거면 .5을 형식 지정자 f 앞에 써주면 됩니다. 

%.5f

 

만약 필드폭, 정밀도 둘 다 쓰고 싶으면 다음처럼 하면 됩니다.

%3.5f

  이를 바탕으로 1/3 실수를 %10.4f로 출력하면 어떻게 될지 예상해보세요. 일단 10칸 잡고 소수점 4째 자리까지 출력할 것입니다.

#include <stdio.h>

int main(void) {
	printf("%10.4f", 1.0/3.0);
	return 0;
}
    0.3333

 

  여기서 알면 좋은게 그 필드폭에 점(.)도 포함입니다. 근데 물론 이런 것 까진 문제를 내진 않지만 이해 차원에서 설명드렸습니다. 그림으로 표현하면 다음과 같습니다.

 

실제로 작년에 이와 관련하여 문자형 출력과 연계되어 문제가 출력되었습니다. 다음 결과가 어떻게 될지 예상해보세요..

printf("%2c %2c", 'A', 'a');

 

결과 : 

 A  a

 

∨ 아스키 코드★

  이 내용은 나오지 않을 것 같긴 합니다만 그래도 문자형 데이터가 어떻게 저장되는 지 물어볼 가능성이 있다고는 생각합니다. 문자형 데이터는 주로 char 자료형에 저장합니다. 하지만 char형은 사실 정수를 저장하는데요. 아스키 표를 기반하여, char형 변수가 문자를 저장할 때 해당 문자에 대응되는 정수값을 대신 저장합니다. 이거면 됐습니다. 다음 예제는 제가 만들어보았는데요. 한 번 결과를 예상해보시길 바랍니다. 아 근데 그 아스키 코드 값 외울 필요는 없습니다. 아스키 코드값을 내는 문제가 나올 확률은 0.002%입니다.

printf("%d %c %c", 'a', 'A', 'A' + 1); // 'd' 아스키 코드값이 100이다.

 

결과 : 

97 A B

 

∨ switch, break, default ★

  switch 문이 문제 나올까 싶지만 그래도 알아야 하는점. break; 쓸때랑 안쓸때랑 차이 있다는 것만 알면 끝. break를 안쓰면 전혀 다른 결과가 나올 수 있음을 알자.

switch (변수) {
    case 값1 : 코드1; break;
    case 값2 : 코드2; break;
    
    ...
    
    default : 코드 n; break;
}

switch (변수) {
    case 값1 : 코드1;
    case 값2 : 코드2;

    ...
    
    default : 코드n; // 물론 default에는 break는 있으나 없으나 같다

 

다음 코드 결과를 예상하시오.

int num = 2;

swtich(num) {
    case 1: printf("hello"); 
    case 2: printf("hello");
    case 3: printf("hello");
}

 

 

∨ 오류 검출 문제 ★★★★ 

  이 내용도 아마 문제에 나올 것 같습니다. 오류가 있는 코드를 주고 고치라는 문제가 나올텐데요. 오류가 발생할만한 부분은 다음과 같습니다.

  1. 대소문자 ★★★
  2. 세미콜론 ★★

  1번, 대소문자의 경우, C언어는 대/소문자를 구별한다는 것인데요. 우리가 자주 쓰는 printf 함수나 main 함수를 쓸 때도 Printf(), 또는 MAIN() 처럼 쓰면 오류가 나듯 대/소문자를 지켜주어야 합니다. 이는 if나 else, int와 같은 키워드를 쓸 때도 정해진 대/소문자까지 지켜주어야 합니다. 근데 대부분 C언어에서의 함수나 키워드는 대부분 소문자로 되어 있으니 이 부분 참고하시면 될 것 같습니다. 그럼 이를 알고 다음의 코드를 고쳐봅시다.

#Include <stdio.h>

INT main() {
	INT X = 100;
	printf("%D", X);
	Return 0;
}

 

  혹시 몇 군데 찾으셨나요? 주석으로 표현해보겠습니다.

#Include <stdio.h> // #Include -> #include

INT main() { // INT -> int
	INT X = 100; // INT -> int
	printf("%D", X); // %D -> %d
	Return 0; // Return -> return
}

 

  2번의 세미콜론 또한 중요한대요, 명령어를 쓸 때마다 끝에 세미콜론을 써주어야 합니다. 세미콜론을 안 써놓은 코드를 주고 고치라는 문제가 나올 수도 있습니다! 이를 참고하여 아래 코드에서 잘못된 부분을 찾아보세요.

#include <stdio.h>

int main () {
	int X = 100;
	printf("%d", X);
	return 0
}

 

  바로 보이시죠? return 0에 세미콜론 ; 까지 붙여서 return 0;으로 작성해야 합니다.

 

∨ for문 ★★★★★

  for문으로 코드 작성하는 문제 무조건 낸다고 보시면 됩니다. 그 중에서도 아마도 이중 반복문 문제 냅니다. 아래 계단 출력을 연습해봅시다. 이 예제는 너무 유명해서 따로 코드를 적진 않겠습니다.

*
**
***
****
*****
*****
****
***
**
*
*****
 ****
  ***
   **
    *
  *
 ***
*****

 

  이중 반복문과 더불어 가감식도 연습을 해두시길 바랍니다. 예를 들면 아래와 같이 i 값이 감소하는 경우의 반복문으로도 연습을 해보시고 while문으로도 계단 코드를 작성해보시길 바랍니다.

for (int i = 10 ; i > 0 ; i--)

 

  아래는 제가 썼던 C언어 반복문 설명 부분인데 여기도 첫번째 계단 예제 내용과 코드가 있으니 참고하시면 도움 될 것 같습니다.

Chapter 12. C언어 : 반복문, for, while, do while문. continue, break까지 — 검정부기

 

Chapter 12. C언어 : 반복문, for, while, do while문. continue, break까지

안녕하세요! 이번 글에서는 반복문에 대해 배워보겠습니다. 반복문은 말 그대로 특정 동작을 반복해서 실행하는 코드입니다. 현대 컴퓨터의 핵심 역할 중 하나는 자동화라고 할 수 있는데, 반복

alittleboogie.tistory.com

 

∨ for문 <-> while문 ★★★★★

  이중 for문을 이중 while문으로 바꾸거나 하여튼 for와 while을 서로 바꾸는 문제가 나올 가능성이 높습니다. 이 부분도 아래 글에서 설명하였으니 참고하시길 바랍니다.

 

Chapter 12. C언어 : 반복문, for, while, do while문. continue, break까지 — 검정부기

 

Chapter 12. C언어 : 반복문, for, while, do while문. continue, break까지

안녕하세요! 이번 글에서는 반복문에 대해 배워보겠습니다. 반복문은 말 그대로 특정 동작을 반복해서 실행하는 코드입니다. 현대 컴퓨터의 핵심 역할 중 하나는 자동화라고 할 수 있는데, 반복

alittleboogie.tistory.com

 

∨ 실수 유도! ★★★★★

  C언어에서 자주 실수하는 부분 짚어 드리겠습니다. 이 부분은 필독이라고 생각합니다. 왜냐하면 시험에서 이 부분을 가지고 낚시할 게 뻔하거든요. 일단 실수할 만한 부분 짚어드리겠습니다.

  1. scanf 인자에 & 안쓰는 실수 ★★★★
  2. =와 ==를 헷갈리는 실수  ★★★★★
  3. 변수 초기화 안하는 실수 ★★★ 
  4. if와 else if 헷갈리는 실수 ★★★
  5. &와 &&, |와 || ★★
  6. 조건문, 반복문과 세미콜론 ; ★
  7. 수학에선 올바른 조건식 ★★★★★
  8. for, while 또는 if과 중괄호 ★★★
  9. <= 표기 잘못하는 경우 ★
  10. 참과 거짓을 나타내는 값 ★★★★

∨ scanf 인자에 & 안쓰는 실수 ★★★★

  scanf로 입력을 받을 때는 형식 지정자와 변수를 맞춰주어야 합니다. 이와 더불어 변수 앞에 &(앰퍼샌드)를 써주어야 합니다. 이는 무조건 알아야 합니다. 꼭 시험 문제가 아니라 코딩을 할 때도 이 부분 때문에 오류가 자주 생기기 때문입니다. 이를 참고하여 다음 코드가 잘못된 부분을 찾아 고쳐봅시다.

#include <stdio.h>

int main () {
	float num;
	scanf("%d", num);
	return 0;
}

 

  scanf 함수에서 문제가 생기는 부분은 두 군데가 있습니다. 첫 번째는 float 형 데이터를 입력받기 때문에 %d가 아닌 %f 를 써주어야 합니다. 두 번째는 변수명 num 앞에 &를 써주어야 합니다. 즉, &num을 써주어야 하는 것인데, 이는 scanf가 변수 num이 있는 공간에 값을 넣어주기 위함입니다. 

 

  따라서 수정한 코드는 다음과 같습니다.

scanf("%f", &num);

 

∨ = 와 ==를 헷갈리는 문제 ★★★★★

  아마 if문과 연계하여 나올 확률이 높으므로 if문 문제가 나왔다면 =와 ==를 헷갈리게 해서 틀리게 만드는 문제는 아닌 지 의심해봅시다. =는 대입 연산자로 변수에 값을 저장할 때 사용합니다. ==는 값이 같은 지 확인하는 연산입니다. 이를 참고하여 다음 문제의 출력을 예상하여 봅시다. 

#include <stdio.h>

int main () {
	int score = 80;

	if (score = 90) {
		printf("A");
	}
	if (score == 80) {
		printf("B");
	}
	else if (score = 70) {
		printf("C");
	}
	if (score = 0) {
		printf("F");
	}
}

 

  좀 문제가 별로일 수도 있는데 어차피 핵심 개념이 중요한 것이므로.. 결과는 다음과 같습니다.

AC

 

  설명은 주석으로 달겠습니다.

#include <stdio.h>

int main () {
	int score = 80;

	if (score = 90) { // score변수에 90을 대입함. 대입 연산자는 대입한 값 90을 반환하므로 if (90) 과 같다.
		printf("A"); // 0이외의 값은 참이므로 if(참)이 되어 A를 출력하게 된다.
	}
	if (score == 80) { // 그 다음 if문에서 score이 80과 "같은 지" 확인한다.
		printf("B"); // 같은 지 확인해본 결과, 같지 않았으므로 조건문은 실행되지 않는다.
	} 
	else if (score = 70) { // 위 if문이 실행되지 않았으므로 else if문의 조건을 검사하게 된다.
		printf("C"); // 여기서 ==가 아닌 =이므로 score에 70을 대입하고 대입 연산자는 70을 반환하여 printf문이 실행된다.
	}
	if (score = 0) { // score에 값 0을 대입하고, 대입 연산자는 0을 반환한다. 
		printf("F"); // 0은 거짓을 의미하므로 if문이 실행되지 않는다.
	}
}

 

 

∨ 변수 초기화 안하는 실수 ★★★

  C언어에서 값을 넣어주지 않고 선언만 한 변수는 어떤 값을 저장하고 있을까요? 예를 들면 아래의 number 변수처럼 선언만한 상태입니다.

int number;

 

   이 number 변수에는 0이 자동으로 저장되는 것이 아닙니다. 대신, 해당 메모리 공간에 원래 들어 있던 값이 그대로 남아 있게 되며, 이를 쓰레기 값(garbage value)이라고 합니다. 따라서 초기화되지 않은 변수는 예측할 수 없는 값을 가지므로, 핵심은 이를 이용해 연산하거나 출력하는 것은 매우 위험합니다.

int sum;
sum += 10;

 

  초기화도 안한 sum 변수에 10을 더하려고 하면 문제가 생깁니다. 아무값도 안들어 있는 상태이기 때문이죠. 이와 마찬가지로 sum을 printf문으로 출력하려 하는 것도 문제가 생깁니다.

∨ &와 &&, |와 || ★★

  &랑 |는 비트 연산자라고 있는데 이거 아마 문제 안나올 가능성 크다고 봅니다. 알아두면 좋긴 한데... 공부하기 귀찮으면 안해도 괜찮다고 생각해요.. 어차피 나오면 70%는 틀릴 거라고 생각합니다. 솔직히 잘 안써서 그냥 스킵하시면 됩니다. 하드웨어 제어 쪽은 자주 쓴다고 들었는데 솔직히 저는 10번도 안써본거 같아요.

 

  근데 여기서 중요한 건 &, && 둘다 AND 연산자이고, |, || 둘다 OR 연산자라는 것입니다. 이걸 헷갈리시면 안됩니다! 

&는 비트 AND 연산자

|는 비트 OR 연산자

 

&&는 논리 AND 연산자 <-- 우리가 조건식에서 자주 쓰는 "그리고"

||는 논리 OR 연산자 <-- 우리가 조건식에서 자주 쓰는 "또는"

 

∨ if와 else if 헷갈리는 실수 ★★★

  조건문에서 if문을 써야 하는지, else if문을 써야 하는지, else문을 써야 하는지, 아니면 if문을 이어 써야 하는지를 물어보는 문제입니다. 나올지는 모르겠지만 if문을 활용하는 능력은 중요하므로 이 내용을 넣었습니다.

 

  이건 제가 if문 글에서 설명드린 내용인데 한 번 풀어보시겠습니까? 다음 코드에서 잘못된 부분을 고쳐 보세요.

/*값을 입력받아 3의 배수인지 5의 배수인지 확인하는 프로그램*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int num;

    printf("값 입력:");
    scanf("%d", &num);
    
    // 변수 num이 3의 배수인 지 확인하는 조건식.
    if (num % 3 == 0) {
        printf("%d는 3의 배수이다.\n", num);
    }

    // 변수 num이 5의 배수인 지 확인하는 조건식.
    else if (num % 5 == 0) {
        printf("%d는 5의 배수이다.\n", num);
    }

    return 0;
}

 

  무엇이 문제인 지 모르겠다면 직접 실행해보시는 것도 좋습니다. 9과 15를 넣어보세요. 아래 이 글에서 이 내용을 설명드렸으니 참고해보시면 될 것 같습니다. 정답만 말씀드리자면 if - else if 가 아니라 if - if 문으로 작성해야 합니다.

Chapter 10. C언어 : 조건문. 프로그램의 실행 흐름의 분기. if문의 모든것. — 검정부기

 

Chapter 10. C언어 : 조건문. 프로그램의 실행 흐름의 분기. if문의 모든것.

안녕하세요! 이번 글에서는 조건문인 if에 대해 배워보도록 하겠습니다. 조건문은 프로그램 실행 분기를 제어하는 중요한 문법입니다. 이제부터 본격적으로 코딩이 시작된다고 말할 수 있습니

alittleboogie.tistory.com

 

∨ 반복문과 세미콜론 ; ★

  세미콜론 ;을 적절한 곳에 써주는 것도 중요하지만 쓰지 않아야 하는 곳에 쓰는 것도 문제가 생깁니다. 특히 이 잘못된 곳에 세미콜론을 써주는 문제는 if문, for문, while문에 주로 생길 수 있습니다. 이 부분도 자주 실수하는 포인트가 될 수 있으니 짚고 넘어가봅시다. if, for while문의 형식은 다음과 같습니다.

if (조건식) {
	실행할 코드;
}

for (초기식;조건식;증감식) {
	실행할 코드;
}

while(조건식) {
	반복할 코드;
}

 

  이를 참고하여 다음 코드의 출력 결과를 예상해봅시다.

#include <stdio.h>

int main(void) {
	for (int i = 0; i < 5; i++); {
		printf("Hello!! ");
	}
	return 0;
}

 

  출력 결과는 다음과 같습니다. "Hello!! "를 5번 출력해야 할 것 같은데 무엇이 문제일까요? 

Hello!!

 

  정답은 for문 뒤에 세미콜론에 있습니다. 세미콜론 때문에 for문이 반복하는 즉시 세미콜론을 만나 아무 내용없는 코드만 반복하기 때문입니다. for문이 끝나고 나서 printf문을 만나 "Hello!! "를 한 번 출력하고 return 0;을 만나 프로그램은 종료하게 됩니다.

for (int i = 0; i < 5; i++); { // <-- i++); 여기서 세미콜론 ;을 빼야 한다!
	printf("Hello!! ");
}

  if문과 while문에서도 마찬가지입니다. 다음 코드의 출력 결과를 예상해보세요. while문은 if문을 반복시킨 것 뿐이므로 if문의 경우만 보도록 합시다.

#include <stdio.h>

int main(void) {
	if (0); {
		printf("hello");
	}
	return 0;
}

  출력 결과는 다음과 같습니다. if(0)이어서 실행이 안될 것 같지만 뒤에 세미콜론 ;이 있기 때문에 "if (0); "이게 if문의 전부입니다. 따라서 그 뒤에 { printf("hello"); }는 if문과 별개인 코드가 됩니다.

hello

 

∨ 수학에선 올바른 조건식 ★★★★★ 괄호 적극적으로 쓰자!

  솔직히 부분은 시험에 나올 진 미지수인데, 이 내용을 매우 강조하시는 교수님이 계시다고 들었습니다. 그래서 한번 보고 갑시다. 다음의 조건식이 논리적으로 올바르다고 생각하시나요?

if (2 < x < 5) {
	printf("x는 2보다 크고 5보다 작다");
}

 

  수학에선 2 < x < 5 가 아무 문제가 없는데 컴퓨터 과학에선 문제가 있습니다.. 이게 컴파일 에러는 아니고 비교 연산자인 <가 연산자 우선순위에 의해서 어째어째 계산을 하긴 할텐데 의도대로 실행은 되지 않습니다. 아래 코드 실행해보시면 x는 7인데 실행되는 것을 보실 수 있습니다.

#include <stdio.h>

int main(void) {
	int x = 7;
	if (2 < x < 5) {
		printf("x는 2보다 크고 5보다 작다.");
	}
	return 0;
}

 

  일단 이 식이 문제라는 것을 아는 것이 제일 중요하구요. 고치는 방법도 가볍게 알아보겠습니다.

(x > 2 && x < 5)

 

  그냥 && 사용하면 됩니다. (2보다 크다 "그리고" 5보다 작다) 근데 사실 조건식 같은 경우는 조건식마다 괄호로 묶어주는 것이 의도도 확실하고 무엇보다 안전하니깐 괄호를 적극적으로 쓰는 것을 추천합니다.

((x > 2) && (x < 5)) // 이게 안전하긴 함. 괄호 적극적으로 쓰자.

 

∨ for 또는 if 등에서 중괄호★★★

  이 부분도 문제에 나올 수도 있고 또 실제로 자주 범하게 되는 실수이므로 짚고 넘어갑시다. if문과 for문, while문들의 형식은 대개 비슷합니다. 실행할 코드, 또는 반복할 코드가 중괄호 {}로 감싸져 있다는 것인데요. 만약 실행할 코드, 또는 반복할 코드가 한 줄이라면 이 중괄호를 생략할 수 있습니다. 하지만 꼭 한 줄만 영향을 받습니다. 

if (조건식) {
	실행할 코드;
}

for (초기식;조건식;증감식) {
	반복할 코드;
}

whlie (조건식) {
	반복할 코드;
}

 

  이를 참고하여 다음 코드의 결과를 예상해봅시다.

#include <stdio.h>

int main(void) {
	for (int i = 0; i < 5; i++)
		printf("hi ");
	return 0;
}

 

  어렵지 않았을 겁니다. 정답은 다음과 같습니다.

hi hi hi hi hi

 

 

그럼 다음 코드의 결과는 어떻게 될까요?

int main(void) {
	for (int i = 0; i < 5; i++)
		printf("hi ");
		printf("world ");
	return 0;
}

 

  정답은 다음과 같습니다. 

hi hi hi hi hi world

 

   주의할 점은 for문 다음 줄을 들여쓰기한 것은 가독성을 위해서지 들여쓰기를 한다고 해서 for문에 포함되는 것은 아닙니다. for문으로 여러 코드를 감싸려면 중괄호 { }로 감싸야 합니다. 이는 별거 아니지만 실전에서는 긴장해서 실수할 수 있으니 인지만 하신다면 문제 없을 것 같습니다! 

 

 

∨ <= 표기 잘못하는 경우 ★

  컴퓨터 프로그래밍 시험은 수기로 진행됩니다. 따라서 컴퓨터에는 없는 표기를 하게 되면 감점 요소가 될 수 있는데요. 대표적으로 "크거나 같다"와 "작거나 같다"입니다. 컴퓨터에선 각각 ">=", "<="로 나타내야 합니다. 아래와 같이 표현하지 않도록 주의합시다. 이게 감점 요소가 될 지는 모르겠지만 혹시 모르니 지켜줍시다.

 

∨ 참과 거짓을 나타내는 값 ★★★★

  이 내용 나올거라고 확신합니다. C언어에서는 참과 거짓을 값으로 나타낼 수 있습니다. 우선 거짓은 0으로 나타냅니다. 그리고 0 외 나머지 값들은 그냥 다 참입니다. -2도 참입니다. -1도 참입니다. '0'도 참입니다. ('0'은 아스키 코드값으로 48이어서 그렇습니다.) 이것만 알면 됩니다. 아마 조건식에 -1같은 값 넣고 낚으려는 문제 있을겁니다. 절대로 낚이시면 안됩니다. -1은 참입니다!!

 

∨ 참고 #define _CRT_SECURE_NO_WARNINGS

  저도 이게 감점 요소인지는 모르겠는데, scanf() 함수는 보안 상의 이유로 그냥 썼을 경우 프로그램이 실행이 안됩니다. 그래서 scanf_s() 함수를 대신 쓰거나 프로그램 상단에 #define _CRT_SECURE_NO_WARNINGS를 쓰면 입력 기능을 문제 없이 사용할 수 있습니다. 

 

  쓰면서 모르시는 것이 있거나 하면 그냥 막 물어보셔도 됩니다. 아무런 댓글 다 상관없습니다. 쓰다가 생각났는데 컴프가 절대평가였죠? "이 개념은 나와도 다 틀릴거니 걱정안해도 될거다" 이야기 했는데 다 의미없었네요. 최대한 열심히 공부하셔서 좋은 성적 받으시길 바랍니다.

 

'강의 아카이브 > 컴퓨터 프로그래밍' 카테고리의 다른 글

컴퓨터 프로그래밍 : 기말 대비  (0) 2026.04.23
컴퓨터 프로그래밍 : 중간 대비 문제  (0) 2026.04.23
컴퓨터 프로그래밍 : 중간고사 요약  (0) 2026.04.21
'강의 아카이브/컴퓨터 프로그래밍' 카테고리의 다른 글
  • 컴퓨터 프로그래밍 : 기말 대비
  • 컴퓨터 프로그래밍 : 중간 대비 문제
  • 컴퓨터 프로그래밍 : 중간고사 요약
검정부기
검정부기
안녕하세여. 한성대학교 AI응용학과에 재학중인 대학생입니다!! 공부 내용 개인적으로 정리하고, 도움이 될만한 내용은 공유하기 위해 개인적으로 만든 블로그입니다. 댓글 아무거나 쓰셔도 상관없습니다. 무엇이든 질문하셔도 됩니다, 틀린 질문도 괜찮습니다, 성실히 답변해드리겠습니다!
  • 검정부기
    검정부기
    검정부기
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • 강의 아카이브 (11)
        • Python for AI (1)
        • 선형대수 (2)
        • 컴퓨터 프로그래밍 (4)
        • 웹프로그래밍기초 (2)
        • 확률 및 통계 (2)
        • 사회데이터의 이해 (0)
        • 생활 속의 인공지능 (0)
        • 생활 속의 빅데이터 (0)
      • 지식 아카이브 (12)
        • 파이썬 (1)
        • C언어 (11)
        • 웹프로그래밍 (0)
        • 확률 통계 (0)
        • 선형대수 (0)
        • git & github (0)
        • 리눅스 (0)
        • 컴퓨터 구조 (0)
        • 운영체제 (0)
        • 네트워크 (0)
      • Daily 아카이브 (29)
        • 공부일지 (22)
        • IT 에세이 (0)
        • 프로젝트 (1)
        • 아무거나 쓰는 곳 (4)
        • 연습 일지 (0)
        • 일기 (2)
      • 알쓸 아카이브 (2)
        • 군대 (IT) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 블로그 사용법
    • 안녕하세용. 반갑습니다.
  • 인기 글

  • 태그

    ai
    강의
    서류심사
    정보보호병
    ai학과
    파이썬
    수업정보
    육군
    시험대비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
검정부기
컴퓨터 프로그래밍 : 중간고사 대비
상단으로

티스토리툴바