★ 「2019학년도 1학기」 수/업/노/트 ★
by. 동동매니저 >_<
▶ 일자 : 2019년 03월 18일 (월)
▶ 과목 : C++ 프로그래밍 실습
▶ 담당 교수님 : SCH 한상욱 교수님
※ 실습 내용을 요약해보면?
★ 연산자 복습!! 다음 수식의 결과는?
(int a = 5, b = 10으로 가정)
1. a+b/3*3
2. b<<2
3. a!=b
4. b%a
5. (a>b)?a:b
6. sizeof(a)
7. c=a++; (c의 값은?)
8. a+=b; (a의 값은?)
9. a&b
10. c=(a+b,a-b); (c의 값은?)
☆ 풀이 ☆
1.
▶ 앞에서부터 순서대로 계산하시는 분들도 계신데요... (정말로 이러시면 안돼요!!)
▶ 사칙 연산에서는, 곱셈과 나눗셈의 우선 순위가 높아서, 이들을 먼저 계산해 주셔야 합니다.
▶ 즉, b/3*3을 먼저 계산하고, 이 값에 a를 더하는 것이죠.
▶ 하지만, a, b가 모두 int고, 나누기 연산자 뒤에 나온 수도 정수이기 때문에, 나누는 과정에서 소수점 이하가 잘리게 됩니다.
▶ 즉, 10/3 = 3.333...이고, 이를 3으로 해석하게 됩니다.
▶ 여기에 3을 곱하고, 5를 더하면 3*3+5 = 14가 되는 것이죠.
2.
▶ 이 연산자는 비트 연산자로, 비트를 좌측으로 옮기고, 새로 생긴 자리에 0을 채우는 것입니다.
▶ 즉, 한 번 옮길 때 마다 2씩 곱해지는 것이죠.
▶ 여기에서는 2가 주어졌으므로, 10*2*2 = 40이 됩니다.
3.
▶ a와 b가 다른지를 검사합니다. (당연히 다르겠죠?)
▶ 따라서 이 식은 거짓이 되고, C에서는 이를 0으로 처리합니다.
4.
▶ b를 a로 나눈 나머지를 계산합니다. (당연히 0이겠죠?)
5.
▶ 삼항 연산자로, ? 앞의 조건이 참이면 앞의 수식을, 거짓이면 뒤의 수식을 반환합니다.
▶ 여기에서는, 두 수 중에서 큰 수를 찾는 수식으로 보셔도 무방합니다.
▶ 따라서, 10이 반환됩니다.
6.
▶ 자료형의 크기를 반환합니다.
▶ C언어에서는, int를 4바이트로 처리합니다.
7.
▶ 여기에서는 후위 연산자를 사용했습니다.
▶ 즉, a의 값이 c에 대입되고 나서 a가 증가하게 됩니다.
▶ 따라서, 정답은 5입니다.
8.
▶ 이는 a=a+b와 같은 의미입니다. (당연하겠지만, 15가 대입되겠죠?)
9.
▶ 비트 연산자가 한 번 더 나왔어요...
▶ 이는 비트 AND 연산으로, 각 비트가 모두 1일 때에만 1로 처리합니다.
▶ a = 5 = 0101(2), b = 10 = 1010(2)가 되겠죠?
▶ 따라서, 정답은 0!!
10.
▶ 제가 유일하게 모르는 부분인데요...
▶ 이 연산자의 의미는, 가장 뒤의 연산이 실행됩니다.
▶ 따라서 가장 뒤에 나온 a-b가 실행되고, -5가 대입됩니다.
※ 오늘 실습한 문제!!
▶ 문제 1
사용자로부터 문자열을 계속 입력받는 프로그램을 작성하시오. 단, "yes"를 입력하면 프로그램을 종료한다.
(대소문자 구분!!)
★ 실행 예시
문자열을 입력하세요>>no
문자열을 입력하세요>>SCH
문자열을 입력하세요>>yes
종료합니다...
※ 문제를 풀어보면? (C++ 소스 코드)
★ 문제 1
#include <iostream>
#include <cstring>
using namespace std;
int main(void) {
char input[100];
while (true) {
cout << "문자열을 입력하세요>>";
cin.getline(input, 100);
if (strcmp(input, "yes") == 0) {
cout << "종료합니다..." << endl;
break;
}
}
return 0;
}
※ 수업을 듣고 나서 느낀 점!!
C언어의 연산자 문제에서 살짝 가물가물한 부분이 있었는데, 생소한 부분을 제외하고는 그래도 기억력이 좋은 느낌?
언젠가는 LAB에도 돌어가서 실력도 키우고 싶어요...
※ 기타 참고 사항!!
Report : 교재 2장 연습문제 풀어오기!!