#include <stdio.h>
int main(void) {
int a = 10, b = 3;
printf("a + b = %d\n", a + b); // 13
printf("a - b = %d\n", a - b); // 7
printf("a * b = %d\n", a * b); // 30
printf("a / b = %d\n", a / b); // 3 (정수 나눗셈)
printf("a %% b = %d\n", a % b); // 1 (나머지)
return 0;
}
#include <stdio.h>
int main(void) {
int a = 5, b = 5;
int result1, result2;
// 전위형
result1 = ++a; // a를 증가시킨 후 대입
printf("a = %d, result1 = %d\n", a, result1); // a = 6, result1 = 6
// 후위형
result2 = b++; // 대입 후 b를 증가
printf("b = %d, result2 = %d\n", b, result2); // b = 6, result2 = 5
return 0;
}
#include <stdio.h>
int main(void) {
int x = 10;
x += 5; // x = x + 5
printf("x = %d\n", x); // 15
x -= 3; // x = x - 3
printf("x = %d\n", x); // 12
x *= 2; // x = x * 2
printf("x = %d\n", x); // 24
x /= 4; // x = x / 4
printf("x = %d\n", x); // 6
x %= 4; // x = x % 4
printf("x = %d\n", x); // 2
return 0;
}
#include <stdio.h>
int main(void) {
int a = 10, b = 20;
printf("a > b: %d\n", a > b); // 0 (거짓)
printf("a < b: %d\n", a < b); // 1 (참)
printf("a == b: %d\n", a == b); // 0 (거짓)
printf("a != b: %d\n", a != b); // 1 (참)
// 논리 연산자
printf("a > 5 && b < 30: %d\n", a > 5 && b < 30); // 1 (참 AND 참)
printf("a > 15 || b < 30: %d\n", a > 15 || b < 30); // 1 (거짓 OR 참)
printf("!(a > b): %d\n", !(a > b)); // 1 (NOT 거짓)
return 0;
}
#include <stdio.h>
int main(void) {
unsigned char a = 12; // 00001100
unsigned char b = 10; // 00001010
printf("a & b = %d\n", a & b); // 8 (00001000)
printf("a | b = %d\n", a | b); // 14 (00001110)
printf("a ^ b = %d\n", a ^ b); // 6 (00000110)
printf("~a = %d\n", ~a); // 243 (11110011)
printf("a << 1 = %d\n", a << 1); // 24 (00011000)
printf("a >> 1 = %d\n", a >> 1); // 6 (00000110)
return 0;
}
#include <stdio.h>
int main(void) {
int a = -10, b = 20;
int abs_a, max_val;
// 절대값 구하기
abs_a = (a < 0) ? -a : a;
printf("a의 절대값: %d\n", abs_a); // 10
// 최대값 구하기
max_val = (a > b) ? a : b;
printf("a와 b 중 최대값: %d\n", max_val); // 20
return 0;
}
#include <stdio.h>
int main(void) {
int i = 10;
double d = 3.14;
// 암시적 형변환
double result1 = i + d; // int -> double
printf("i + d = %f\n", result1); // 13.140000
// 명시적 형변환
int result2 = (int)d + i; // double -> int
printf("(int)d + i = %d\n", result2); // 13
// 나눗셈에서의 형변환
int x = 10, y = 3;
double div1 = x / y; // 정수 나눗셈 후 double로 변환
double div2 = (double)x / y; // 실수 나눗셈
printf("x / y = %f\n", div1); // 3.000000
printf("(double)x / y = %f\n", div2); // 3.333333
return 0;
}
다음 중 후위형 증감 연산자(x++, x--)의 특징으로 옳은 것은?
정답: 2
풀이: 후위형 증감 연산자(x++, x--)는 수식을 평가한 후에 변수의 값을 증가시키거나 감소시킨다. 예를 들어 y = x++;에서는 먼저 x의 값을 y에 대입한 후에 x의 값을 1 증가시킨다.
다음 C 코드의 출력 결과는?
int x = 5, y;
y = x++ + ++x;
printf("%d %d", x, y);
정답: 1
풀이:
y = x++ + ++x에서 연산 순서는 다음과 같다:다음 중 비트 연산에 대한 설명으로 옳지 않은 것은?
a & b는 a와 b의 대응되는 비트가 모두 1일 때만 1을 반환한다.a | b는 a와 b의 대응되는 비트 중 하나라도 1이면 1을 반환한다.a << 2는 a의 각 비트를 왼쪽으로 2칸 이동시키고, 2를 곱한 효과가 있다.a >> 2는 a의 각 비트를 오른쪽으로 2칸 이동시키고, 2로 나눈 몫의 효과가 있다.정답: 3
풀이: a << 2는 a의 각 비트를 왼쪽으로 2칸 이동시키는 연산으로, 이는 a에 2^2 = 4를 곱한 효과가 있다(2가 아님). 예를 들어, 5(101) << 2는 20(10100)이 된다.
다음 C 코드의 출력 결과는?
int x = 10, y = 5;
printf("%d", x > y ? x : y);
정답: 1
풀이: 조건 연산자 ?:는 조건식이 참일 때 첫 번째 값을, 거짓일 때 두 번째 값을 반환한다. x > y는 참(1)이므로 x의 값인 10이 출력된다.
다음 중 C에서 논리 연산자에 관한 설명으로 옳은 것은?
&& 연산자는 두 피연산자가 모두 0이 아니면 0을 반환한다.|| 연산자는 두 피연산자 중 하나라도 0이 아니면 해당 피연산자의 값을 반환한다.! 연산자는 피연산자가 0이면 1을, 0이 아니면 0을 반환한다.정답: 3
풀이:
&& 연산자는 두 피연산자가 모두 0이 아니면 1을 반환한다.|| 연산자는 두 피연산자 중 하나라도 0이 아니면 1을 반환한다.! 연산자는 피연산자가 0이면 1을, 0이 아니면 0을 반환한다.다음 코드의 실행 결과를 적고, 그 과정을 설명하시오.
int a = 15, b = 20;
int c = a & b;
int d = a | b;
int e = a ^ b;
printf("%d %d %d", c, d, e);
정답: 4 31 27
풀이:
다음 코드의 실행 결과를 적고, 각 변수의 값이 어떻게 변화하는지 설명하시오.
int x = 5;
int y = 3;
int z = 2;
x += y -= z;
printf("%d %d %d", x, y, z);
정답: 6 1 2
풀이:
y -= z가 계산된다: y = y - z = 3 - 2 = 1x += (y -= z)를 계산: x = x + (y - z) = 5 + 1 = 6다음 코드의 실행 결과를 적고, 형변환이 어떻게 적용되는지 설명하시오.
int a = 10;
int b = 3;
double result1 = a / b;
double result2 = (double)a / b;
printf("%.2f %.2f", result1, result2);
정답: 3.00 3.33
풀이:
result1 = a / b에서 a와 b는 모두 정수형이므로 정수 나눗셈이 수행되어 3이 나온다. 이후 double 형으로 저장되어 3.00이 된다.result2 = (double)a / b에서 a가 명시적으로 double로 형변환되었으므로 a/b는 실수 나눗셈이 수행되어 3.333333...이 나온다. 소수점 둘째 자리까지 출력하므로 3.33이 된다.사용자로부터 6자리 정수를 입력받아 천 단위로 콤마(,)를 찍어 출력하는 프로그램을 작성하시오. (나머지 연산자 사용)
답안:
#include <stdio.h>
int main(void) {
int num;
int thousands, rest;
printf("6자리 정수를 입력하세요: ");
scanf("%d", &num);
thousands = num / 1000;
rest = num % 1000;
printf("%d,%03d\n", thousands, rest);
return 0;
}
설명:
비트 연산자를 사용하여 정수의 특정 위치 비트를 1로 설정하는 프로그램을 작성하시오. 사용자로부터 정수와 비트 위치(0~31)를 입력받아 해당 비트를 1로 설정한 후 결과를 출력하시오.
답안:
#include <stdio.h>
int main(void) {
unsigned int num, pos, result;
printf("정수를 입력하세요: ");
scanf("%u", &num);
printf("설정할 비트 위치(0~31)를 입력하세요: ");
scanf("%u", &pos);
if (pos > 31) {
printf("비트 위치는 0~31 사이여야 합니다.\n");
return 1;
}
// 해당 위치의 비트를 1로 설정
result = num | (1 << pos);
printf("원래 수: %u (이진수: ", num);
// 이진수 출력 (간단한 방법)
for (int i = 31; i >= 0; i--) {
printf("%d", (num >> i) & 1);
}
printf(")\n");
printf("결과 수: %u (이진수: ", result);
for (int i = 31; i >= 0; i--) {
printf("%d", (result >> i) & 1);
}
printf(")\n");
return 0;
}
설명:
1 << pos로 해당 위치에만 1이 있는 마스크를 생성한다.