개인 학습용 해설/명품 Java Programming

명품 JAVA Programming 4판 2장 연습문제 - 실습문제

SeongJo 2020. 10. 15. 18:00
반응형

 

안녕하세요

개인 문제풀이 이므로 오답이 있을 수 있습니다.

오답 또는 답이 애매한 내용은 댓글로 말씀해주시면 감사드리겠습니다!

 

 


 

 

01. Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라.$1=1100원으로 가정하고 계산하라

원화를 입력하세요(단위 원)>>3300 
3300원은 $3.0입니다.

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Scanner;
 
public class One {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        float dollar;
        System.out.print("원화를 입력하세요(단위 원)>> ");
        int won = sc.nextInt();
        dollar = (float)won/1100;
        
        System.out.println(won +"원은 $" + dollar + "입니다." );
        sc.close();
    }
}
 
 

 

 

 

 

02. Scanner 클래스를 이용하여 2자리의 정수(10~99사이)를 입력받고, 십의 자리와 1의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.

2자리수 정수 입력(10~99)>>77
Yes! 10의 자리와 1의 자리가

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class Two {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        
        System.out.print("2자리수 정수 입력(10~99)>> ");
        
        int num = sc.nextInt();
        
        if (num/10 == num%10)
            System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
        else
            System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
        
        sc.close();
    }
}
 
 

 

 

 

03. Scanner 클래스를 이용하여 적수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 10원짜리 동전 각 몇개로 변환되는지 출력하라.

금액을 입력하시오>>65376
오만원권 1매
만원권 1매
천원권 5매
백원 3개
오십원 1개
십원 2개
일원 6개

[ 소스코드 ] <- 배열을 사용하면 더 쉽게 풀 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.Scanner;
 
public class Three {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        int a,b,c,d,e,f,g;
        
        System.out.print("금액을 입력하시요>> ");        
        int num = sc.nextInt();
        
        a = num/50000;
        num%=50000;
        b = num/10000;
        num%=10000;
        c = num/1000;
        num%=1000;
        d = num/100;
        num%=100;
        e = num/50;
        num%=50;
        f = num/10;
        num%=10;
        g=num/1;
        
        System.out.println("오만원권 "+a+"매");
        System.out.println("만원권 "+b+"매");
        System.out.println("천원권 "+c+"매");
        System.out.println("백원 "+d+"매");
        System.out.println("오십원 "+e+"매");
        System.out.println("십원 "+f+"매");
        System.out.println("일원 "+g+"매");
 
        sc.close();
    }
}
 
 

 

 

 

04. Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의하라.

정수 3개 입력>>20 100 33
중간 값은 33

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;
 
public class four {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        int middle=0;
        
        System.out.print("정수 3개 입력>> ");        
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        
        if(num1 >num2 && num1 <num3)
            middle =num1;
        else if(num2>num1 && num2<num3)
            middle =num2;
        else
            middle = num3;
        
        System.out.println("중간 값은 " + middle);
 
        sc.close();
    }
}
 
 

 

 

 

 

 

05. Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라. 삼각형이 되려면 두 변의 합이 다른 한 변의 합보다 커야 한다.

정수 3개를 입력하시오>>4 3 5
삼각형이 됩니다.

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;
 
public class five {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("정수 3개 입력하시오>> ");        
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        
        if((num1+num2==num3)|| (num2+num3 ==num1) || (num1+num3 ==num2))
            System.out.println("삼각형이 안됩니다.");
        else
            System.out.println("삼각형이 됩니다.");
        sc.close();
    }
}
 

 

 

 

 

06. 369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을, 36인 경우 "박수짝짝"을 출력하면 된다.

1~99 사이의 정수를 입력하시오>>36
박수짝짝

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
 
public class six {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("1~99 사이의 정수를 입력하시오>> ");        
        int num = sc.nextInt();
        
        if(num<1 || num>99)
            System.out.println("범위에 없는 값입니다.");
        
        if((num/10==3 || num/10==6 || num/10==9&& (num%10==3 || num%10==6 ||num%10==9))
            System.out.println("박수짝짝");            
        else if((num/10==3 || num/10==6 || num/10==9|| (num%10==3 || num%10==6 ||num%10==9))
            System.out.println("박수짝");
 
        sc.close();
    }
}
 
 

 

 

 

 

 

07. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. (100, 100)과 (200, 200(의 두점으로 이루어진 사각형이 있을 때, Scanner를 이용하여 정수 x와 y값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.

점 (x, y)의 좌표를 입력하시오>>150 150
(150, 150)는 사각형 안에 있습니다.

[ 소스코드 ] -겹치는 부분이 하나라도 존재하는 경우를 원하면 num>=100 && num1>=100 부분을 ||로 바꿔주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class seven {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("점 (x,y)의 좌표를 입력하시오>> ");        
        int num = sc.nextInt();
        int num1 = sc.nextInt();
        
        if((num>=100 && num1>=100&& (num<=200 && num<=200))
            System.out.println("("+num+","+num1+")"+"는 사각형 안에 있습니다.");
        else
            System.out.println("("+num+","+num1+")"+"는 사각형 안에 없습니다.");
        sc.close();
    }
}
 

 

 

 

 

08. 2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 직사각형을 구하는 두 점 (x1, y1), (x2, y2)를 입력받아 (100, 100), (200, 200)의 두점으로 이루어진 직사각형과 충돌하는지 판별하는 프로그램을 작성하라.

힌트)
다음은 점(x, y)가 (rectx1, recty1), (rectx2, recty2)의 사각형 안에 있으면 true를 리턴하는 메소드이다. 이 메소드를 활용하라
public static boolean inRcet(int x, int y, int rectx1, int recty1, int rectx2, int recty2) {
    if (( x >= rectx1 && x <= rectx2) && (y >= recty1 && <= recty2))
        return true;
    else
        return false;
}

[ 소스코드 ] - 문제에서 100, 100, 200, 200을 범위로 줬기 때문에 호출 범위를 x, y ,100, 100, 200, 200으로 지정해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class eight {
    public static boolean inRect(int x, int y, int rectx1, int recty1, int rectx2, int recty2) {
        if((x >= rectx1 && x <= rectx2) && (y >= recty1 && y <= recty1))
            return true;
         else
            return false;
    }
    
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("점 (x,y)의 좌표를 입력하세요>> ");
        int x =sc.nextInt();
        int y =sc.nextInt();
        
        if(inRect(x,y,100,100,200,200== true)
            System.out.println("충돌");
        else
            System.out.println("비충돌");
        sc.close();
    }
}
 
 

 

 

 

09. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라, 그리고 실수 값으로 다른 점 (x, y)를 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라.

원의 중심과 반지름 입력>>10 10 6.5
점 입력>>13 13
점 (13.0, 13.0)는 원 안에 있다.

 

힌트)
중심에서 점 (x,y) 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다. 변수 x에대한 제곱근의 값은 Math.sqrt(x)를 이용하면 된다. Math는 6장에서 설명한다.


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class nine {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("원의 중심과 반지름 입력>> ");
        double num =sc.nextDouble();
        double num1 =sc.nextDouble();
        double r = sc.nextDouble();
        
        System.out.print("점 입력>> ");
        double i = sc.nextDouble();
        double j = sc.nextDouble();
        
        double call = Math.sqrt(((i-num)*(i-num)) + ((j-num1)*(j-num1)));
        
        if (call<=r)
            System.out.println("점 (" + i + "," + j + ")는 원 안에 있다.");
        else
            System.out.println("점 (" + i + "," + j + ")는 원 안에 없다.");
        sc.close();
    }
}
 
 
 

 

 

 

10. 원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지림을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.

첫번째 원의 중심과 반지름 입력>>10 10 3
두번째 원의 중심과 반지름 입력>>12 12 2
두 원은 서로 겹친다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ten {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("첫번째 원의 중심과 반지름 입력>> ");
        double num = sc.nextDouble();
        double num1 = sc.nextDouble();
        double r = sc.nextDouble();
        
        System.out.print("두번째 원의 중심과 반지름 입력>> ");
        double i = sc.nextDouble();
        double j = sc.nextDouble();
        double r1 = sc.nextDouble();
      
        double call = Math.sqrt(((num-i)*(num-i)) + ((num1-j)*(num1-j)));
      
        if(call <= r+r1)
           System.out.print("두 원은 서로 겹친다.");
        else
           System.out.print("두 원은 서로 겹치지 않는다.");
        sc.close();
   }
}
 
 

 

 

 

 

11. 숫자를 입력받아 3~5는 "봄". 6~8은 "여름", 9~11은 "가을", 12,1,2의 경우 "겨울"을, 그 외 숫자를 입력한 경우 "잘못입력"을 출력하는 프로그램을 작성하라.

달을 입력하세요(1~12)>>9
가을

(1) if-else 문을 이용하여 프로그램을 작성하라.

(2) switch 문을 이용하여 프로그램을 작성하라.

 

[ 1번 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class eleven {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("달을 입력하세요(1~12)>> ");        
        int num = sc.nextInt();
        
        if(num>2 && num <=5)
            System.out.println("봄");
        else if(num>5 && num <=8)
            System.out.println("여름");
        else if(num>8 && num <=11)
            System.out.println("가을");
        else if(num>12 || num <1)
            System.out.println("잘 못 입력된 값입니다.");
        else
            System.out.println("겨울");
 
        sc.close();
    }
}
 
 

 

[ 2번 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Scanner;
 
public class eleven {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("달을 입력하세요(1~12)>> ");        
        int num = sc.nextInt();
        
        switch(num) {
        case 1:
        case 2:
        case 12:
            System.out.println("겨울");
            break;
        case 3 :
        case 4 :
        case 5 :
            System.out.println("봄");
            break;
        case 6 :
        case 7 :
        case 8 :
        System.out.println("여름");
        break;
        case 9 :
        case 10 :
        case 11 :
            System.out.println("가을");
            break;
        default:
            System.out.println("잘못 입력된 값입니다.");
            break;
        }
        
        sc.close();
    }
}
 
 

 

 

 

12. 사칙 연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 +, -, *, /의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다."를 출력하고 종료한다.

연산>>2 + 4
2+4의 계산 결과는 6
힌트)
연산자는 scanner.next()를 이용하여 문자열로 입력받으면 된다. 문자열 s 가 "+"와 같은지 검사하려면 if(s.equals("+"))를 이용하며, true이면 s와 "+"가 같다.

(1) 연산 식을 구분할 때 if-else 문을 이용하여 프로그램을 작성하라.

(2) 연산 식을 구분할 때 switch문을 이용하여 프로그램을 작성하라.

 

[ 1번 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Scanner;
 
public class twelve {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      
      String sign;
      System.out.print("연산>>");
      double num = sc.nextDouble();
      sign = sc.next();
      double num1 = sc.nextDouble();
      
      if(sign.equals("+"))
         System.out.print(num+sign+num1+"의 계산 결과는 "+(num + num1));
      else if(sign.equals("-"))
          System.out.print(num+sign+num1+"의 계산 결과는 "+(num - num1));
      else if(sign.equals("*"))
         System.out.print(num+sign+num1+"의 계산 결과는 "+(num*num1));
      else if(sign.equals("/"))
      {  
         if(num1==0)
            System.out.print("0으로 나눌 수 없습니다.");
         else
            System.out.print(num+sign+num1+"의 계산 결과는 "+(num/num1));
      }
      sc.close();
   }
}
 
 

 

 

[ 2번 소스코드 ]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Scanner;
 
public class twelve {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      
      String sign;
      
      System.out.print("연산>> ");
      double num = sc.nextDouble();
      sign = sc.next();
      double num1 = sc.nextDouble();
 
      switch(sign) {
      case "+" :
         System.out.print(num+sign+num1+"의 계산 결과는 "+(num+num1));
         break;
      case "-":
          System.out.print(num+sign+num1+"의 계산 결과는 "+(num-num1));
         break;
      case "*":
          System.out.print(num+sign+num1+"의 계산 결과는 "+(num*num1));
         break;
      case "/":
         if(num1==0) {
            System.out.print("0으로 나눌 수 없습니다.");
            break;
         }
         else {
            System.out.print(num+sign+num1+"의 계산 결과는 "+(num+num1));
            break;
         }
      default:
         System.out.print("잘못 입력하였습니다.");
         break;
      }
      sc.close();
   }
}
 
 

 


 

 

다음 포스팅 때 뵙겠습니다. ㅎㅎ

부족한 글 읽어주셔서 감사드립니다!

 

 

 

반응형