반응형
1. 연산자 =와 ==의 차이점을 기술하시오.
'='은 r-value를 l-value에 대입하는 대입 연산자이고, ==은 좌변과 우변의 값이 동일한지를 묻는 관계연산자이다.
2. 다음 연산자를 우선순위가 높은 순서대로 정리하시오.
대입, 산술, 관계, 논리, 조건, 증감, 비트, 콤마
->증감-산술-관계-비트-논리-조건-대입-콤마
3. 다음 프로그램을 실행한 결과를 추정하여 결과값을 직접 적어본 후 프로그램을 실행하여 추정한 값과 실행 값을 비교해보시오.
①
#include <stdio.h>
int main(void)
{
int x = 3, y = 4;
printf("%d\n", ++x * 2);
printf("%d\n", y-- % 5);
return 0;
}
추정치:
x는 증가 이후 연산에 사용되므로 4로 증가 후 두 배가 되고, y는 연산에 사용된 이후 감소하므로 나머지는 그대로 4. 따라서 출력값은 8 4
실행결과:
②
#include <stdio.h>
int main(void)
{
int x = 15, y = 21;
printf("%d\n", x & y);
printf("%d\n", x | y);
printf("%d\n", x ^ y);
return 0;
}
추정치:
15는 2진수로 1111, 21은 10101이다. 비트를 비교해 연산해보면 각각 5, 31, 26이 된다.
실행결과:
③
#include <stdio.h>
int main(void)
{
int x, y, z;
x = -3 * 5 % 5 + 1;
y = 1;
z = 1;
y = x && y || z;
z += x << 1 + y++;
printf("x=%d\n", x);
printf("y=%d\n", y);
printf("%z=d\n", z);
return 0;
}
추정치:
x는 우선순위에 따라 계산하면 1이다. y는 x&&y연산에서 x와 y값이 달라 거짓이 되므로 0이 되었다가 y||z연산에서 z의 값이 참이므로 1이 된다. x가 1이었고 이를 2진수로 바꾸면 01이다. <<연산으로 비트이동하면 10이 되고 다시 10진수로 변환하면 2이다. y는 연산 이후 1증가한다. z는 2+1=3에서 복합대입연산이 더해져 1+3=4가 되고, y는 2가 된다. 따라서 결과는 x=1 y=2 z=3 이다.
오류분석
11행: 비트이동연산자보다 산술연산자의 우선순위가 높다. 따라서 1+y가 먼저 계산된다. x의 2진수 값이 01이므로 두 번 비트이동하면 100, 10진수로 4가 된다. 이후 복합대입연산자에 의해 z값에 추가로 4를 더하는 연산이 시행되 z의 값은 5가 된다.
④
#include <stdio.h>
int main(void)
{
int x = 5, y;
double z;
y = x / 2;
printf("y=%d\n", y);
y = (double)x / 2;
printf("y=%d\n", y);
z = x / 2;
printf("z=%.1lf\n", z);
z = (double)(x / 2);
printf("z=%.1lf\n", z);
return 0;
}
추정치:
첫 번째 y를 출력하면 x를 2로 나눈 몫인 2가 출력된다. 두 번째 y를 출력하면 실수형으로 변환된 x를 2로 나누었지만 y의 자료형은 정수형이므로 2가 출력된다. z는 정수끼리 나누었으므로 처음엔 2.0으로 출력된다. 두 번째에는 괄호가 있지만 정수끼리 나눗셈을 먼저 한 이후 형변환이 이루어지므로 2.0이 출력된다. 따라서 2 2 2.0 2.0이 출력된다.
실행결과:
4. 다음 코드 옆 밑줄 부분(int1, int2, r1, r2값)에 변수의 값을 적으시오.
int int1, int2, int3 = 8;
double r1, r2;
int1 = int3 / 5;
int2 = int3 / 5.0;
r1 = (double)(int3 / 5);
r2 = (double)int3 / 5;
int1: 8/5=1이므로 1이다.
int2: 8/5.0 역시 1이다. 정수형이므로 1이다.
r1: 1을 double형으로 변환했으므로 1.000000...이다.
r2: double형 3을 정수형 5로 나누었으므로 1.600000...이다.
5. 센티미터(cm)로 표현된 키를 입력하면 피트(feet)와 인치(inch)로 변환하는 프로그램을 작성하시오. (소수 2자리)
#include <stdio.h>
int main(void)
{
double height, feet, inch;
printf("키(cm)를 입력하세요:");
scanf_s("%lf", &height);
inch = height / 2.54;
feet = inch / 12.0;
printf("입력하신 키 %.2lf 센티미터는 %.2lf 피트와 %.2lf 인치에 해당합니다.\n", height, feet, inch);
return 0;
}
실행결과:
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 4 (11~16) (0) | 2018.02.02 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 4 (6~10) (0) | 2018.02.01 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 3 (0) | 2018.01.18 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 2 (0) | 2018.01.17 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 1 (0) | 2018.01.16 |