p.83
문제1. ("8.3s/n" , str);이라고 했는데 이건 3문자만 출력한다고 생각하면되나요?
간혹 -10.3/s 10.3/s를 출력하라는 말이있는데 이거는 왼쪽 오른쪽기준이라는 말을 확실히 알겠습니다만 -가 없어도
보통은 왼쪽출력이라 생각하면 되겠지요?
p.90
문제1. 전역변수와 지역변수로 a는 리턴값을 가지고 b는 변함이 없는데 쉽게 b는 {}안에서만 효력이 있다고 생각하면 되나요?
p.100
문제4. myVar.a += myVatr.b -= myVar.c *= 10; 이라 나와있는 이런 부분은 보통 뒤에서부터 풀이를 하나요?
저는 myVar.a += myVatr.b 하고 myVatr.b -= myVar.c 이런식으로 했는데 뒷부분 문제도 다 뒤부터 풀고 앞에 식에 적용하더라구요...
p.102-125
문제3. 이진수로 변환하면 1111과 10011로 자릿수 하나차이로 저는 01111과 10011로 계산했는데
여기서는 왜 8자리로 끊는지 알려주세용
문제8. 실수형을 왜 이렇게 나타내는지 이해가 가질 않습니다ㅜㅜ 실수형은 소수점6자리를 나타낸다면 왜1234.567871로 뒤에가 71로 끝나는지 궁금합니다.
문제10. 교재 60쪽을 참고하여 우선순위를 두고 풀이했는데 먼저 * / % 순아닌가요?
왜 답지는 반대로 풀이하나용?ㅜㅜ
또한 ++이나 -로 나온부분은 먼저하고 그 주변의 식을 계산해주나요??
문제17번에서 d=d*(7-c++)로 계산해주더라구용
문제19번에서도 우선순위를 + -로 볼때 0-1+5면 그냥 앞부터 계산인가요?
우선순위에만 초점을 두고 문제풀이를 하니까 너무 헷갈려서 알려주세여ㅜㅜㅜㅜㅜㅜㅜ
문제34. for문을 출력하라는 뜻으로 생각하고 1-0, 2-2,...으로 진행하는 건 알겠는데 6-20으로 for문을 빠져나오게 되는데 어째서 6-20은 답이 아닌가요?
문제40. for(i =1; i <= 5; ++i);
hap += i; 라는 문장에서 저는 for(초기값, 최종값, 증가값)으로 취급하여 결과를 hap=hap+i로 출력한다고 생각했는데 문장이 세미콜론으로 끝나기 때문에 for문을 종료한 후 마지막 i값만을 hap에 적용해준건가요?
그럼 지금까지와의 문제하곤 조금 다른 문제인가요?
문제52, 좀 부연 설명해주세요..
긴글 읽어주셔서 감사합니다!!
안녕하세요.
1)
예, 맞습니다.
문자열 서식 연산자인 %s는 왼쪽 부터 출력합니다. 하지만 %-8.3s와 같이 -가 붙으면 오른쪽 부터 출력됩니다.
2)
예, 맞습니다.
지역변수는 해당 변수가 선언된 { } 안에서만 유효합니다.
3)
myVar.a += myVatr.b -= myVar.c *= 10;
위 수식은
myVar.a += (myVatr.b -= myVar.c *= 10);
으로 뒤 괄호 부분을 하나로 생각해서 A라고 하면
myVar.a += A; 이므로 myVar.a = myVar.a + A;
와 같습니다. 위 수식을 계산하려면 먼저 A를 계산해야 하는데, A는
myVatr.b -= myVar.c *= 10
으로 역시 뒤쪽을 괄호로 묶으면
myVatr.b -= (myVar.c *= 10)
와 괕습니다. 뒤 괄호를 B라고 생각하면
myVatr.b -= B 이므로 myVar.b = myVar.b - B
와 같습니다. 위 수식을 계산하려면 먼저 B를 계산해야 하는데, B는
myVar.c *= 10
으로
myVar.c = myVar.c * 10
과 같습니다. 이제 뒤쪽 괄호 부분들을 계산한 후 그 결과를 앞쪽에 대입하여 계산하면 됩니다.
이런 원리 때문에 뒤에서부터 계산되는 것처럼 인식되는 것입니다.
4)
정수형 변수는 크기가 1byte이기 때문입니다. 그러므로 1byte, 즉 8bit로 표현해서 계산하는 것입니다.
5)
float a = 123456789.0e-5f;
printf("소수점a = %6.1f 지수형a = %e\n", a, a);
123456789.0e-5f 에 의해 지수형태로 저장된 a의 값을 원래대로 변경하면 소수점 위치를 왼쪽으로 5칸 이동한 값인
1234.56789가 됩니다.
이 값을 6.1f로 출력하면
______ 소수점을 포함하여 6자리를 확보하여 소수점 1자리를 출력해야 하므로
____.6 이 됩니다. 소수점 첫 째자리까지 출력해야 하는데, 둘째 자리에서 반올림이 되어 .6이 출력되었습니다.
나머지 4자리에 정수 부분을 출력합니다. 만일 출력할 정수 부분보다 확보된 자리수가 적으면 정수는 모두 출력됩니다.
1234.6이 출력됩니다.
%e로 출력하면
소수점 자리수가 지정되지 않으면 f나 e는 모두 기본적으로 소수점 6자리로 출력합니다.
e는 정수 부분을 1자리만 출력하므로
1.234568 이 됩니다. 역시 소수점 마지막 6자리는 7째 자리에서 반올림 된 것이고
1.234568 은 원래의 값 1234.56789에서 소수점 위치가 왼쪽으로 3자리 이동했으므로 e+03이 되어
1.234568e+03으로 출력이 되는 것입니다.
6)
* / %의 우선 순위는 같고 + - 보다는 높습니다.
그러므로 같은 우선 순위에서는 나온 순서대로 진행하므로
%, /, *을 먼저 하고 나중에 -를 계산합니다.
7)
++이나 --가 다른 수식에 포함된 경우 ++a와 같이 전치인경우 먼저 증가한 후 수식에 a를 적용하고
a++와 같이 후치인 경우 a의 값을 우선 수식에 사용한 후 나중에 증가를 합니다.
8)
출력은 for문 안에서만 수행합니다.
i가 6이고 hap이 20이 된 후에는 for문을 진입하지 못하고 빠져나오기 때문에 출력은 되지 않습니다.
9)
예, 맞습니다.
for문 뒤에 세미콜론(;)이 있으면 for문에 따린 실행문은 없으므로 for문만 수행합니다.
그런 다음 for문이 완료되면 그 아래 문장인 hpa+=i;를 수행합니다.
10)
main() 함수에서 push()나 pop() 함수를 호출할 때마다 해당 함수를 수행하는 과정입니다.
해설이 자세히 설명되어 있는 내용인데, 혹 해설이 잘 이해되지 않으신다면
2장 예상문제는 토막강의가 제공되지 강의를 확인해 보세요.
강의는 왼쪽의 프리미엄존 - 토막강의 코너 맨 위 공지사항에 등록되어 있습니다.
오늘도 즐거운 하루 되세요.
-
*2017-10-11 09:40:55
안녕하세요.
1)
예, 맞습니다.
문자열 서식 연산자인 %s는 왼쪽 부터 출력합니다. 하지만 %-8.3s와 같이 -가 붙으면 오른쪽 부터 출력됩니다.
2)
예, 맞습니다.
지역변수는 해당 변수가 선언된 { } 안에서만 유효합니다.
3)
myVar.a += myVatr.b -= myVar.c *= 10;
위 수식은
myVar.a += (myVatr.b -= myVar.c *= 10);
으로 뒤 괄호 부분을 하나로 생각해서 A라고 하면
myVar.a += A; 이므로 myVar.a = myVar.a + A;
와 같습니다. 위 수식을 계산하려면 먼저 A를 계산해야 하는데, A는
myVatr.b -= myVar.c *= 10
으로 역시 뒤쪽을 괄호로 묶으면
myVatr.b -= (myVar.c *= 10)
와 괕습니다. 뒤 괄호를 B라고 생각하면
myVatr.b -= B 이므로 myVar.b = myVar.b - B
와 같습니다. 위 수식을 계산하려면 먼저 B를 계산해야 하는데, B는
myVar.c *= 10
으로
myVar.c = myVar.c * 10
과 같습니다. 이제 뒤쪽 괄호 부분들을 계산한 후 그 결과를 앞쪽에 대입하여 계산하면 됩니다.
이런 원리 때문에 뒤에서부터 계산되는 것처럼 인식되는 것입니다.
4)
정수형 변수는 크기가 1byte이기 때문입니다. 그러므로 1byte, 즉 8bit로 표현해서 계산하는 것입니다.
5)
float a = 123456789.0e-5f;
printf("소수점a = %6.1f 지수형a = %e\n", a, a);
123456789.0e-5f 에 의해 지수형태로 저장된 a의 값을 원래대로 변경하면 소수점 위치를 왼쪽으로 5칸 이동한 값인
1234.56789가 됩니다.
이 값을 6.1f로 출력하면
______ 소수점을 포함하여 6자리를 확보하여 소수점 1자리를 출력해야 하므로
____.6 이 됩니다. 소수점 첫 째자리까지 출력해야 하는데, 둘째 자리에서 반올림이 되어 .6이 출력되었습니다.
나머지 4자리에 정수 부분을 출력합니다. 만일 출력할 정수 부분보다 확보된 자리수가 적으면 정수는 모두 출력됩니다.
1234.6이 출력됩니다.
%e로 출력하면
소수점 자리수가 지정되지 않으면 f나 e는 모두 기본적으로 소수점 6자리로 출력합니다.
e는 정수 부분을 1자리만 출력하므로
1.234568 이 됩니다. 역시 소수점 마지막 6자리는 7째 자리에서 반올림 된 것이고
1.234568 은 원래의 값 1234.56789에서 소수점 위치가 왼쪽으로 3자리 이동했으므로 e+03이 되어
1.234568e+03으로 출력이 되는 것입니다.
6)
* / %의 우선 순위는 같고 + - 보다는 높습니다.
그러므로 같은 우선 순위에서는 나온 순서대로 진행하므로
%, /, *을 먼저 하고 나중에 -를 계산합니다.
7)
++이나 --가 다른 수식에 포함된 경우 ++a와 같이 전치인경우 먼저 증가한 후 수식에 a를 적용하고
a++와 같이 후치인 경우 a의 값을 우선 수식에 사용한 후 나중에 증가를 합니다.
8)
출력은 for문 안에서만 수행합니다.
i가 6이고 hap이 20이 된 후에는 for문을 진입하지 못하고 빠져나오기 때문에 출력은 되지 않습니다.
9)
예, 맞습니다.
for문 뒤에 세미콜론(;)이 있으면 for문에 따린 실행문은 없으므로 for문만 수행합니다.
그런 다음 for문이 완료되면 그 아래 문장인 hpa+=i;를 수행합니다.
10)
main() 함수에서 push()나 pop() 함수를 호출할 때마다 해당 함수를 수행하는 과정입니다.
해설이 자세히 설명되어 있는 내용인데, 혹 해설이 잘 이해되지 않으신다면
2장 예상문제는 토막강의가 제공되지 강의를 확인해 보세요.
강의는 왼쪽의 프리미엄존 - 토막강의 코너 맨 위 공지사항에 등록되어 있습니다.
오늘도 즐거운 하루 되세요.