C++/C++ 강좌 문제 해답
[C++ 강좌 해답] 3-2. 조건문 정답 공개 및 해설
카루-R
2022. 2. 16. 15:19
반응형
[카루의 C++ 강좌] 3-2. 조건문과 if ~ else if ~ else
오늘은 조건문을 배워보겠습니다. 예전에 배웠던 삼항 조건 연산자 기억하시나요? 그 연산자가 블록이 되었다고 보시면 쉽습니다. (조건식) ? (참일 때 실행할 식) : (거짓일 때 실행할 식); 자세
karupro.tistory.com
3-2 강좌의 도전 과제 해답을 설명합니다.
1. 두 수를 입력받고, 더 큰 수를 출력하는 프로그램을 작성하세요.
// 모범 답안 (전체 코드)
#include <iostream>
int main()
{
double num1, num2;
std::cout << "두 수를 입력하세요: ";
std::cin >> num1 >> num2;
if (num1 > num2)
std::cout << num1 << "이(가) 더 큽니다." << std::endl;
else if (num1 < num2)
std::cout << num2 << "이(가) 더 큽니다." << std::endl;
else
std::cout << "두 수는 같습니다." << std::endl;
}
정수라고 한정하지 않았으니 자료형을 double로 선언했습니다. int로 하셔도 크게 상관은 없습니다.
2. 정수를 입력받고 그 값에 따라 다음과 같이 출력하는 프로그램을 작성하세요.
3의 배수 입력 -> "3의 배수" 출력
5의 배수 입력 -> "5의 배수" 출력
15의 배수 입력 -> "15의 배수" 출력
기타 다른 수 입력 -> "해당 없음" 출력
// 모범 답안 (전체 코드)
#include <iostream>
int main()
{
int in{};
std::cout << "정수를 입력하세요: ";
if (std::cin >> in; in % 3 == 0 && in % 5 == 0)
std::cout << "15의 배수";
else if (in % 3 == 0)
std::cout << "3의 배수";
else if (in % 5 == 0)
std::cout << "5의 배수";
else
std::cout << "해당 없음";
}
15의 배수, 즉 3과 5의 공배수일 때가 가장 위에 있어야 합니다. 그렇지 않으면 의도치 않은 동작이 일어날 수 있습니다.
3. std::string에 문자열을 입력받고, "apple"을 입력한 경우 "정답"을 출력하세요.
// 모범 답안 (전체 코드)
#include <iostream>
int main()
{
std::string str;
if (std::cin >> str; str == "apple")
std::cout << "정답";
}
별 거 없습니다. 비교할 대상이 문자열이라는 차이가 있을 뿐 입니다.
4. [고난이도] 세 개의 실수를 입력받아 그 중 가장 큰 수를 출력하세요.
<조건>
1. 범위기반 for문을 반드시 사용합니다. 배열을 쓰라는 뜻입니다.
2. if문의 사용 횟수에는 제한을 두지 않습니다.
3. 세 수가 모두 같은 경우에는 아무것도 출력하지 않습니다.
// 모범 답안 (전체 코드)
#include <iostream>
int main()
{
double darr[3]{};
for (auto& var : darr)
std::cin >> var;
if (darr[0] == darr[1] && darr[1] == darr[2] && darr[2] == darr[0])
return 0; // 세 수가 모두 같은 경우에는 아무것도 출력하지 않고 종료 (조건 3)
if (darr[0] > darr[1] && darr[0] > darr[2])
std::cout << darr[0];
else if (darr[1] > darr[0] && darr[1] > darr[2])
std::cout << darr[1];
else if (darr[2] > darr[0] && darr[2] > darr[1])
std::cout << darr[2];
else // 이 문장이 실행된다는 것은 입력된 수 중 같은 수가 존재한다는 것
{
if (darr[0] == darr[1])
std::cout << (darr[0] > darr[2] ? darr[0] : darr[2]);
else if (darr[1] == darr[2])
std::cout << (darr[1] > darr[0] ? darr[1] : darr[0]);
else
std::cout << (darr[2] > darr[1] ? darr[2] : darr[1]);
}
}
이건 조금 어려우셨을 텐데, 위처럼 다양한 상황을 고려하여 프로그램을 작성하시면 됩니다...만
물론 이것도 나중에 STL을 배우면 아래처럼 간단하게 끝납니다.
#include <iostream>
#include <algorithm>
int main()
{
double darr[3]{};
std::for_each(std::begin(darr), std::end(darr), [](auto& n){ std::cin >> n; });
std::sort(std::begin(darr), std::end(darr));
if (darr[0] != darr[1])
std::cout << darr[2];
}
물론 이 과정에 저런 if~else와 반복문들이 포함되어있기에 작동이 되는겁니다.그걸 알기 위해서 일단은 기초부터 차곡차곡 쌓아가야 합니다.
반응형