본문 바로가기
Language/Java

[명품 JAVA Programming]2장 연습문제

by DEV Lee 2020. 7. 8.

이론문제

1. 자바에서 클래스를 선언할 때 사용하는 자바의 키워드는?

 

2. 다음은 10과 20을 더해 합을 출력하려고 작성한 자바 프로그램이지만 오류가 있다.

 

1) 오류를 찾아내서 고쳐라

 

2) 이 자바 클래스를 저장하는 소스파일 이름은?

 

3) 명령창에서 이 프로그램을 컴파일하는 명령은?

 

4) 명령창에서 이 프로그램을 실행하는 명령은?

 

 


실습문제

1. Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와같이 출력하는 프로그램을 작성하라.

풀이

import java.util.Scanner;

public class EX01 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("원화를 입력하세요(단위 원)>>");
		int won=scan.nextInt();
		double dollar=won/1100;
		System.out.println(won+"원은 $"+dollar+"입니다.");
	}
}

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

풀이

import java.util.Scanner;

public class EX02 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("2자리수 정수 입력(10~99)>>");
		int num=scan.nextInt();
		if(num%10==num/10) {
			System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
		}
		else
			System.out.println("No! 같지 않습니다.");
	}
}

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

풀이

import java.util.Scanner;

public class EX03 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("금액을 입력하시오>>");
		int money=scan.nextInt();
		System.out.println("오만원권 "+money/50000+"매");
		money-=(money/50000)*50000;
		System.out.println("만원권 "+money/10000+"매");
		money-=(money/10000)*10000;
		System.out.println("천원권 "+money/1000+"매");
		money-=(money/1000)*1000;
		System.out.println("백원 "+money/100+"개");
		money-=(money/100)*100;
		System.out.println("오십원 "+money/50+"개");
		money-=(money/50)*50;
		System.out.println("십원 "+money/10+"개");
		money-=(money/10)*10;
		System.out.println("일원 "+money+"개");
	}
}

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

풀이

import java.util.Scanner;

public class EX04 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("정수 3개 입력>>");
		int num1=scan.nextInt();
		int num2=scan.nextInt();
		int num3=scan.nextInt();
		if((num1>=num2 && num1<=num3) || (num1>=num2 && num1<=num3))
			System.out.println("중간 값은 "+num1);
		else if((num2>=num1 && num2<=num3) || (num2>=num1 && num2<=num3))
			System.out.println("중간 값은 "+num2);
		else
			System.out.println("중간 값은 "+num3);
	}
}

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

풀이

import java.util.Scanner;

public class EX05 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("정수 3 개를 입력하시오>>");
		int num1=scan.nextInt();
		int num2=scan.nextInt();
		int num3=scan.nextInt();
		
		if((num1+num2)>num3 && (num2+num3)>num1 && (num1+num3)>num2)
			System.out.println("삼각형이 됩니다.");
		else
			System.out.println("삼각형이 안됩니다.");
	}
}

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

풀이

import java.util.Scanner;

public class EX06 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("1~99사이의 정수를 입력하세요");
		int num=scan.nextInt();
		
		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("박수 짝");
	}
}

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

풀이

import java.util.Scanner;

public class EX07 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("점 (x,y)의 좌표를 입력하시오>>");
		int x=scan.nextInt();
		int y=scan.nextInt();
		
		if((x>=100 && x<=200) && (y>=100 && y<=200))
			System.out.println("("+x+","+y+")는 사각형 안에 있습니다.");
		else
			System.out.println("("+x+","+y+")는 사각형 안에 없습니다.");
	}
}

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

풀이

import java.util.Scanner;

public class EX08 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("점 (x1,y1)의 좌표를 입력하시오>>");
		int x1=scan.nextInt();
		int y1=scan.nextInt();
		
		System.out.print("점 (x2,y2)의 좌표를 입력하시오>>");
		int x2=scan.nextInt();
		int y2=scan.nextInt();
		
		//x1<x2 && y1<y2 임을 가정함
		if((x1>100 && x1<200 && y1>100 && y1<200) || (x2>100 && x2<200 && y2>100 && y2<200) || (x1<200 && y1<200 && x2>100 && y2>100))
			System.out.println("("+x1+","+y1+"), "+"("+x2+","+y2+")는 사각형과 충돌합니다.");
		else
			System.out.println("충돌하지 않습니다.");
	}

맞는지는 모르겠다...

 


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

풀이

import java.util.Scanner;

public class EX09 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("원의 중심과 반지름 입력>>");
		double x1=scan.nextDouble();
		double y1=scan.nextDouble();
		double r=scan.nextDouble();
		
		System.out.print("점 입력>>");
		double x2=scan.nextDouble();
		double y2=scan.nextDouble();
		
		if(Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))<r)
			System.out.println("점 ("+x2+","+y2+")는 원 안에 있다.");
	}
}

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

풀이

import java.util.Scanner;

public class EX10 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("원의 중심과 반지름 입력>>");
		double x1=scan.nextDouble();
		double y1=scan.nextDouble();
		double r1=scan.nextDouble();
		
		System.out.print("원의 중심과 반지름 입력>>");
		double x2=scan.nextDouble();
		double y2=scan.nextDouble();
		double r2=scan.nextDouble();
		
		if(Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))<(r1+r2))
			System.out.println("두 원은 서로 겹친다.");
		
		scan.close();
	}
}

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

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

import java.util.Scanner;

public class EX11_1 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("달을 입력하세요>>");
		int m=scan.nextInt();
		
		if((m>=3)&&(m<=5))
			System.out.println("봄");
		else if((m>=6)&&(m<=8))
			System.out.println("여름");
		else if((m>=9)&&(m<=11))
			System.out.println("가을");
		else if((m>=1)&&(m<=2)||m==12)
			System.out.println("겨울");
		else
			System.out.println("잘못입력");
		scan.close();
	}
}

2) switch문을 이요하여 프로그램을 작성하라

import java.util.Scanner;

public class EX11_2 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("달을 입력하세요>>");
		int m=scan.nextInt();
		
		switch(m) {
		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;
		case 12:case 1:case 2:
			System.out.println("겨울");
			break;
		default:
			System.out.println("잘못입력");
			break;
		}

		scan.close();
	}
}

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

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

import java.util.Scanner;

public class EX12_1 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("연산>>");
		int num1=scan.nextInt();
		String str=scan.next();
		int num2=scan.nextInt();
		char c=str.charAt(0);
		
		if(c=='+')
			System.out.println(num1+"+"+num2+"의 계산 결과는 "+(num1+num2));
		else if(c=='-')
		System.out.println(num1+"-"+num2+"의 계산 결과는 "+(num1-num2));
		else if(c=='*')
			System.out.println(num1+"*"+num2+"의 계산 결과는 "+(num1*num2));
		else if(c=='/' && num2==0)
			System.out.println("0으로 나눌 수 없습니다.");
		else if(c=='/')
			System.out.println(num1+"/"+num2+"의 계산 결과는 "+((double)num1/num2));
		scan.close();
	}
}

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

import java.util.Scanner;

public class EX12_2 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("연산>>");
		int num1=scan.nextInt();
		String str=scan.next();
		int num2=scan.nextInt();
		char c=str.charAt(0);
		
		switch(c) {
		case '+':
			System.out.println(num1+"+"+num2+"의 계산 결과는 "+(num1+num2));
			break;
		case '-':
			System.out.println(num1+"-"+num2+"의 계산 결과는 "+(num1-num2));
			break;
		case '*':
			System.out.println(num1+"*"+num2+"의 계산 결과는 "+(num1*num2));
			break;
		case '/':
			if(num2==0) {
				System.out.println("0으로 나눌 수 없습니다.");
				break;
			}
			System.out.println(num1+"/"+num2+"의 계산 결과는 "+((double)num1/num2));
			break;
		}
		scan.close();
	}
}

댓글