반응형
문제 출처 : YES C (정보공학연구소/생능출판사)
1. a가 8이고, b가 0일 경우 a AND(&&) b, a OR(||) b를 구하는 프로그램을 작성하라.
#include <stdio.h> void main() { int a = 8, b = 0; printf("8 && 0 = %d \n", a && b); printf("8 || 0 = %d \n", a || b); } // 결과값 : 8 && 0 = 0 // 결과값 : 8 || 0 = 1
2. a를 99, b를 55로 하여 a<b이면 b2를, a<b가 아닌 경우에는 a2를 c에 대입하는 프로그램을 작성하라.
#include <stdio.h> // 삼항조건연산자를 쓰라는 문제. void main() { int a = 99, b = 55, c; c = (a < b) ? (2 * b) : (2 * a); printf("c의 값은 %d", c); } // a가 b보다 작으면 2*b = 110, a가 b보다 작지 않으면 2*a = 198을 리턴. // 99가 55보다 크므로 198을 리턴한다.
3. 아래의 실행 결과와 같은 결과를 얻을 수 있도록 프로그램을 수정하라. (원하는 실행결과 : f = 1, g = 96)
예시 코드
#include <stdio.h> void main() { int a = 3, b = 11; int f, g; f = b >> 2; g = a << 5; printf("f=%d, g=%d \n", f, g); } // 결과값 f = 2, g = 96;
수정 코드
#include <stdio.h> // b >> 2를 b >> 3을 수정했다. void main() { int a = 3, b = 11; int f, g; f = b >> 3; g = a << 5; printf("f=%d, g=%d \n", f, g); } // 결과값 f = 1 , g = 96;
/*
비트 연산자이므로 이진수로 살펴 보자.
a인 3의 이진수는 0000 0011;
b인 11의 이진수는 0000 1011;
b >> 2 를 하면 이진수로 0000 0010 십진수로 하면 2
a << 5 를 하면 이진수로 0110 0000 십진수로 하면 96
기본적으로 자리수를 벗어난 비트는 버려지고, 새로운 비트는 0으로 채워진다.
이를 이용하면 a >> n은 a/2^n, a << n은 a*2^n을 대신할 수 있다.
*/
/*
signed int형은 <<는 논리 비트 이동, >>는 산술 비트 이동
unsigned int형은 >>, <<모두 논리 비트 이동이라고 하는데
아직 뭔 의미인지 잘 모르겠음.
*/
4. a가 10, b가 12인 경우 a==b, a != b, ++a == --b의 값을 구하는 프로그램을 작성하라.
#include <stdio.h> void main() { int a = 10, b = 12; printf("a == b => %d // a:%d, b:%d \n", a == b, a, b); printf("a != b => %d // a:%d b:%d \n", a != b, a, b); printf("++a == --b => %d // a:%d b:%d \n", ++a == --b, a, b); //0은 거짓, 1은 참을 의미 }
5. a가 50인 경우 차례로 ++a, a++, --a, a--를 수행하는 프로그램을 작성하라.
#include <stdio.h> void main() { int a = 50; printf("++a : %d \n", ++a); printf("a++ : %d \n", a++); printf("--a : %d \n", --a); printf("a-- : %d \n", a--); }
반응형