연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH3 (1~5번)

라이피 (Lypi) 2018. 4. 28. 12:32
반응형

문제 출처 : 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--);
}


반응형