본문 바로가기
C++/문제풀이

[C++] if문 연습문제

by 씐 2023. 10. 2.
728x90

Q1. 다중 if~else문을 사용해서 정수 한 개를 입력받아 양수인지, 음수인지, 0인지 판단하는 프로그램을 작성하시오.

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  int i;
  
  cout << "정수를 입력하시오 -> ";
  cin >> i;
  
  if (i > 0){
    cout << i << "은 양수이다.\n";
  } else if(i == 0) {
    cout << i <<"은 0이다.\n";
  } else {
    cout << i << "은 음수이다.\n";
  }
}

<결과>

 

 

Q2. 정수 2개를 입력받아 최대값을 구하는 프로그램을 작성하시오.

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  int i1, i2;
  
  cout << "정수를 입력하세요 -> ";
  cin >> i1 >> i2;
  
  if(i1 > i2) {
    cout << "최대값은 " << i1 << "이다.\n"; 
  } else if (i1 < i2) {
    cout << "최대값은 " << i2 << "이다.\n"; 
  } else {
    cout << i1 << "와 " << i2 <<"은 같다.\n";
  }
}

 

<결과>

 

 

Q3. 다중 if~else문을 사용해서 2차원 공간상의 좌표값이 주어졌을 때 그 좌표가 속하는 사분면을 출력하는 프로그램을 작성하시오.

 

<코드>

#include <iostream>
using namespace std;
int main()
{
   int x, y;
   
   cout << "2차원 공간상의 좌표값을 입력 -> ";
   cin >> x >> y;
   
   if(x > 0 && y > 0){
     cout << "1사분면\n";
   } else if(x < 0 && y > 0) {
     cout << "2사분면\n";
   } else if(x < 0 && y < 0) {
     cout << "3사분면\n";
   } else {
     cout << "4사분면\n";
   }
}

 

<결과>

 

 

Q4. 정수 3개를 입력받아 가장 작은 값을 구하는 프로그램을 작성하시오.

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  int i1, i2, i3;
  int min;
  
  cout << "세 개의 정수 입력 >>";
  cin >> i1 >> i2 >> i3;
  
  
  if(i1 > i2 && i2 > i3){
    min = i3;
  } else if (i1 > i2 && i2 < i3){
    min = i2;
  } else {
    min = i1;
  }  
  
  cout << "가장 작은 값 : " << min << "\n"; 
}

 

<결과>

 

 

Q5. 문자 하나가 주어졌을 때 그 문자가 알파벳 문자인지 숫자인지 아니면 기타 문자인지를 출력하는 프로그램을 작성하시오. 알파벳이나 숫자를 제외한 나머지 문자들은 모두 기타 문자로 간주한다. (if문 조건식의 and)

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  char chr;
  
  cout << "문자 한개를 입력하세요 -> ";
  cin >> chr;
  
  if(chr >= 48 && chr <= 57){
    cout << "숫자\n";
  } else if(chr >= 65 && chr <= 90){
    cout << "대문자 알파벳\n";
  } else if(chr >= 97 && chr <= 122){
    cout << "소문자 알파벳\n";
  } else {
    cout << "기타 문자\n";
  }
}

 

<결과> 

 

<해설>

ASCII(아스키) 표를 참고하였다.

 

 

Q6. 정수, 연산자(+, -, *, / 중 하나), 정수를 입력받아 해당 연산자에 대한 결과를 구해서 출력하는 프로그램을 if~else문으로 작성하시오. 단, 0으로 나눌 경우 불가능임을 출력한다.

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  float i1, i2, result;
  char opr;
  
  cout << "두 정수와 +, -, *, / 중 하나의 연산자를 입력하되\n 정수 연산자 정수 순으로 입력 하세요. (ex. 3 + 4)";
  cin >> i1 >> opr >> i2;
  
  if(opr == '+'){
    result = i1 + i2; 
  } else if(opr == '-') {
    result = i1 - i2;
  } else if(opr == '*') {
    result = i1 * i2;
  } else if(opr == '/') {
    result = i1 / i2;
    if(i2 == 0){
      cout << "0으로 나눌 수 없습니다." << "\n";
    }
  }
  cout << i1 << opr << i2 << "=" << result;
}

 

<결과>

 

<해설>

대입 연산자(=)와 관계 연산자(==)

  • 동등 연산자(==) 대신 대입 연산자(=)를 사용하다 보면 원치 않는 결과를 얻을 수 있다.
  • opr == '+' 대신 opr = '+'을 기술한다면 모든 opr을 '+'로 보게 된다.
    • '='은 대입 연산자이기 때문에 opr이 '+'인지를 검사하는 것이 아니라 변수 opr에 '+'을 대입하기 때문에 첫번째 조건문에서 opr에 +를 대입한 것이 되어 첫번째 조건문에서 true가 된다.
    • 그래서 7 * 8을 해도 결과는 7+ 8이 되어 15의 결과가 나오게 된다.
  • result = i1 + i2 대신 result == i1 + i2을 기술한다면 0(false)과 1(true)의 결과값만 갖게 된다.
    • '=='은 관계 연산자이기 때문에 false인지 true인지 판단한다. result == i1 + i2로 기술하게 된다면 result와 i1 + i2의 값이 같은지를 물어보게 되는 것이고, 당연히 이 둘의 값은 같지 않기 때문에 0(false)를 내뱉게 된다.
    • 그래서 7 + 8을 하면 0이 된다.
    • 하지만 첫번째 조건문에서만 적용되기 때문에 다른 연산자(다른 opr)에서는 정상적으로 연산이 된다.

 

 

Q7. 문자를 입력받아 그 문자를 이니셜로 각 나라 이름을 출력하는 프로그램을 if~else문으로 작성하시오. A 혹은 a이면 American, B 혹은 b이면 Britain, C 혹은 c이면 canada, J 혹은 j이면 Japan, 그 외에는 The Others라고 출력한다. (if문 조건식의 or)

 

<코드>

#include <iostream>
using namespace std;
int main()
{
  char chr;
  
  cout << "문자 한 개를 입력하세요 -> ";
  cin >> chr;
  
  if(chr == 'A' || chr == 'a'){
    cout << "American";
  } else if (chr == 'B' || chr == 'b'){
    cout << "Britain";
  } else if (chr == 'C' || chr == 'c'){
    cout << "Canada";
  } else if (chr == 'J' || chr == 'j'){
    cout << "Japan";
  } else {
    cout << "The Others";
  }
}

 

<결과> 

'C++ > 문제풀이' 카테고리의 다른 글

[C++] 함수  (2) 2024.09.30
[C++] for문, while문 연습문제(2)  (0) 2023.10.20
[C++] for문, while문 연습문제(1)  (2) 2023.10.05
[C++] 자료형과 연산자 연습문제  (2) 2023.09.18