AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 4장 연산자 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 4장 연산자

아랑팡팡 2023. 3. 16. 11:56
728x90

4-1 혼자해보기

#include<stdio.h>

int main(void) {

	int a, b, d;
	a = 5; b = 10;

	a = b++;

	d = ++a;
	printf("a = %d, b = %d, d = %d\n", a, b, d);

	a = b + ++d;
	printf("a = b + ++문장 실행 후\n");
	printf("a = %d, b = %d, d = %d\n", a, b, d);

	return 0;
}

a = 11, b = 11, d = 11
a = b + ++문장 실행 후
a = 23, b = 11, d = 12

 

01. 다음 프로그램의 오류를 수정하시오.

int x = 5, y = 3;
const int z = 3;
x = x + 5;
y + 3 = x;
z = z + 4;

수정

int x = 5, y = 3;
	const int z = 3;
	x = x + 5;
	y = x - 3;
	// 상수값은 변경할 수 없다. z = z + 4;

- lvalue와 rvalue의 구별

대입 연산자를 기준으로 왼쪽에 lvalue(오로지 변수만 넣을 수 있다), 오른쪽에 피연산자를rvalue(값, 변수, 수식 등을 넣을수 있다.)

- const는 변수를 상수로 선언하여 값을 변경할수 없게 만든다. 상수는 선언될 때 값이 할당되어야 한다.

const int z = 3; 에서 z = z + 4; 로 값을 변경하려면 에러가 발생한다.

 

4-2 혼자해보기

사용자에게 밑변과 높이를 입력받아 삼각형의 높이를 구하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int length, area, hei;
	printf("삼각형 맡변의 길이를 입력하시오\n");
	scanf("%d", &length);

	printf("삼각형의 높이 입력\n");
	scanf("%d", &hei);

	area = length * hei / 2;
	printf("정사각형의 넓이는 %d이다.\n", area);

	return 0;
}

 

02. 다음 프로그램에서 x,y,z의 최종 결과값은 얼마인가?

int x = 10, y = 10, z;
x = y++;
z = (++x) % 3;

x = 11, y = 11, z = 2

 

03. 다음 프로그램의 연산 결과를 직접 확인해보시오.

1)

int a = 10, b = 15, c = 0;
printf("%d\n", a >= b || c);

거짓 = 0

 

2)

int a = 10, b = 15, c = 0;
printf("%d\n", a < b && a < c);

0

 

3)

int a, b, c;
a = 20; b = 10;

a += b;

c = ++a;
printf("a = %d, b = %d, c = %d\n", a, b, c);

a = b + ++c;
printf("a = b + ++c 문장 실행 후\n");
printf("a = %d, b = %d, c = %d\n", a, b, c);

unsigned char number = 176;
unsigned char b = 128;
const unsigned char level = 127;
printf("number의 첫번째 비트 값은 %d \n", (number &b) > level);

a = 31, b = 10, c = 31

a = 42, b = 10, c = 32

 

04. 정수 3개를 입력받아 합을 계산한 뒤 합이 100보다 크다면 '합격'을 그렇지 않으면 '불합격'을 출력하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int a, b, c;

	printf("성적1 입력 : ");
	scanf("%d", &a);

	printf("성적2 입력 : ");
	scanf("%d", &b);

	printf("성적3 입력 : ");
	scanf("%d", &c);

	int total = a + b + c;

	if (total > 100)
		printf("합격");
	else
		printf("불합격");
	return 0;
}

 

 

05. 정수형 변수 2개를 입력받아 AND, OR, XOR의 비트 논리 연산을 수행하고 연산의 결과 값을 정수형으로 화면에 출력하는 프로그램을 작성하시오.

#include <stdio.h>

int main(void) {
    int num1, num2;
    printf("두 정수를 입력하세요: ");
    scanf("%d %d", &num1, &num2);

    int and_result = num1 & num2;
    int or_result = num1 | num2;
    int xor_result = num1 ^ num2;

    printf("%d & %d = %d\n", num1, num2, and_result);
    printf("%d | %d = %d\n", num1, num2, or_result);
    printf("%d ^ %d = %d\n", num1, num2, xor_result);

    return 0;
}

 

06. unsigned char형으로 정수(0~255)값을 입력받아 총 8비트에서 첫 번째 비트의 값이 무엇인지 알아내는 프로그램은 일반적으로 아래와 같다.

unsigned char number = 176;
unsigned char b = 128;
const unsigned char level = 127;
printf("number의 첫 번째 비트 값은 %d\n", (number &b) > level);

이 프로그램에서 두 번째 비트부터 여덟번째 비트까지의 값을 알아내려면 mask인 b와 level값은 각각 얼마여야 하는가?

10110000 44, 1

 

 

 

 

 

 

728x90
반응형
LIST