[4-1] 다음의 문장들을 조건식으로 표현하라.

1. int 형 변수 x 가 10 보다 크고 20 보다 작을 때 true인 조건식

10 < x && x < 20

2. char 형 변수 ch 가 공백이나 탭이 아닐 때 true인 조건식

ch != ' ' || ch != "\t"

3. char 형 변수 ch 가 ‘x' 또는 ’X' 일 때 true인 조건식

ch == 'x' || ch == 'X'

4. char 형 변수 ch가 숫자(‘0’~‘9’)일 때 인 조건식 true

'0' <= ch && ch <='9'

5. char 형 변수 ch 가 영문자 (대문자 또는 소문자 일 때) true인 조건식

('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')

6. int  형 변수 year 가 400 으로 나눠떨어지거나  또는 4로 나눠떨어지고 100으로 나눠떨어지지

않을 때 true인 조건식

year%400 == 0 || year%4 == 0 || year%100 != 0 

7. boolean  형 변수 powerOn 가 false 일 때 true인 조건식

powerOn == false

8.  문자열 참조변수 str이 “yes”일 때 true인 조건식

str.equals("yes")



[4-2] 1부터 20 까지의 정수 중에서 2 또는 3의 배수가 아닌 수의 총합을 구하시오


class Exercise4_2 {

	public static void main(String[] args) {

		int sum = 0;

		for(int i=1; i <=20; i++) {

			if(i%2!=0 && i%3!=0) //i 2 3 sum i . 가 또는 의 배수가 아닐 때만 에 를 더한다

				sum +=i;

		}

		System.out.println("sum="+sum);

	} // main

}


[4-3] 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10) . 의 결과를 계산하시오


class Exercise4_3 {

	public static void main(String[] args) {

		int sum = 0;

		int total = 0;

		for(int i=1; i <=10; i++) {

			sum +=i;

			total += sum;

		}

		System.out.println("total="+total);

	} // main

}


[4-4] 1+(-2)+3+(-4)+...과 같은 식으로 계속 더해나갔을 때 몇까지 더해야 총합이 100 이상이 되는지 구하시오


class Exercise4_4 {



	public static void main(String[] args) {

		int op = 1;

		int i=0;

		for(int sum=0; sum<100;) {

			++i;

			sum +=i*op;

			op = -op;

			System.out.println("i="+i);

			System.out.println("Sum="+sum);

		}

		System.out.println("최종 i="+i);

		

		int sum = 0;

		i = 0;

		op = 1;

		while (sum<100) {

			++i;

			sum += i*op;

			op = -op;

		}

		System.out.println("최종 i="+i);

	} // main

}


[4-5] 다음의 for문을 while문으로 변경하시오

[연습문제]  /ch4/Exercise4_5.java


class Exercise4_5 {

	public static void main(String[] args) {

		for(int i=0; i<=10; i++) {

			for(int j=0; j<=i; j++)

				System.out.print("*");

			System.out.println();

		}

		

		int i = 0;

		while (i<=10) {

			++i;

			int j = 0;

			System.out.println();

			while (j<i) {

			j++;

			system.out.print("*");

		}

		System.out.println("최종 i="+i);

	} // main

}


[4-6] 두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하는 프로그램을 작성하시오.

<pre class="brush: java">

class Exercise4_6 {

public static void main(String[] args) {

/* int ir = (int)(Math.random()*6+1);

int jr = (int)(Math.random()*6+1);*/

for (int i = 0; i < 7; i++) {

for (int j = 0; j < 6; j++) {

if (i+j==6) {

System.out.println(i+"+"+j+"=6");

}

}

}

}

}

</pre>



[4-7] Math.random() 1 6 value 을 이용해서 부터 사이의 임의의 정수를 변수 에 저장하는

코드를 완성하라 에 알맞은 코드를 넣으시오 . (1) .

[연습문제]  /ch4/Exercise4_7.java

<pre class="brush: java">

class Exercise4_7 {

public static void main(String[] args) {

int value = (int)(Math.random()*7);

System.out.println("value:"+value);

}

}

</pre>




[4-8] 방정식 2x+4y=10의 모든 해를 구하시오 단 x와 y는 정수이고 각각의 범위는 0<=x<=10, 0<=y<=10이다

<pre class="brush: java">

class Exercise4_8 {

public static void main(String[] args) {

for (int x = 0; x < 11; x++) {

for (int y = 0; y < 11; y++) {

if (2*x+4*y==10) {

System.out.println("x="+x+", y="+y);

System.out.println("2*"+x+" + 4*"+y+" = 10");

}

}

}

}

}

//[실행결과] 

//x=1, y=2

//x=3, y=1

//x=5, y=0

</pre>



[4-9] 숫자로 이루어진 문자열 str이 있을 때 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라

만일 문자열이 "12345"라면 ‘1+2+3+4+5’의 결과인 15를 출력이 출력되어야 한다 에 알맞은 코드를 넣으시오

[Hint] String 클래스의 charAt(int i)을 사용

[연습문제]  /ch4/Exercise4_9.java


<pre class="brush: java">

class Exercise4_9 {

public static void main(String[] args) {

String str = "12345";

int sum = 0;

for(int i=0; i < str.length(); i++) {

sum += (int)str.charAt(i)-48;

System.out.println((int)str.charAt(i)-48);

System.out.println(sum);

}

System.out.println("sum="+sum);

}

}

//[실행결과] 15

</pre>


[4-10] int 타입의 변수 num이 있을 때 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라 만일 변수 num의 값이

12345라면 1+2+3+4+5’의 결과인 15를 출력하라

[주의]  문자열로 변환하지 말고 숫자로만 처리해야 한다.

[연습문제] /ch4/Exercise4_10.java


<pre class="brush: java">

class Exercise4_10 {

public static void main(String[] args) {

int num = 12345;

int sum = 0;

/*

(1) . 알맞은 코드를 넣어 완성하시오

*/

while (num>0) {

sum += num%10;

System.out.println(sum);

num /= 10;

System.out.println(num);

}

System.out.println("sum="+sum);

}

}

//[실행결과] 15

</pre>


[4-11] 피보나치(Fibonnaci) 수열 (數列)은 앞을 두 수를 더해서 다음 수를 만들어 나가는 수열이다

예를 들어 앞의 두 수가 1과 1이라면 그 다음 수는 2가 되고 그 다음 수는 1과 2를 더해서 3이 되어서 

1,1,2,3,5,8,13,21,...과 같은 식으로 진행된다

1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오

[연습문제]  /ch4/Exercise4_11.java

<pre class="brush: java">

class Exercise4_11 {

public static void main(String[] args) {

// Fibonnaci 1, 1 . 수열의 시작의 첫 두 숫자를 로 한다

int num1 = 1;

int num2 = 1;

int num3 = 0; // 세번째 값

System.out.print(num1+","+num2);

for (int i = 3 ; i < 11 ; i++ ) {

num3 = num1+num2;

System.out.print(","+num3);

num1 = num2;

num2 = num3;

}

} // end of main

} // end of class

//[실행결과]

//1,1,2,3,5,8,13,21,34,55

</pre>



[4-12] 구구단의 일부분을 다음과 같이 출력하시오.

*/



//[실행결과] 

//2*1=2 3*1=3 4*1=4

//2*2=4 3*2=6 4*2=8

//2*3=6 3*3=9 4*3=12

//5*1=5 6*1=6 7*1=7

//5*2=10 6*2=12 7*2=14

//5*3=15 6*3=18 7*3=21

//8*1=8 9*1=9

//8*2=16 9*2=18

//8*3=24 9*3=27


/*

[4-13] 다음은 주어진 문자열 이 숫자인지를 판별하는 프로그램이다 에 알맞 (value) . (1)

은 코드를 넣어서 프로그램을 완성하시오.

[연습문제]  /ch4/Exercise4_13.java


class Exercise4_13{

	public static void main(String[] args){

		String value = "12o34";

		char ch = ' ';

		boolean isNumber = true;

		// charAt(int i) 반복문과 를 이용해서 문자열의 문자를

		// . 하나씩 읽어서 검사한다

		for(int i=0; i < value.length() ;i++) {

			ch = value.charAt(i);

			System.out.println(ch);

			if(!('0'<=ch && ch<='9')) {

			isNumber = false;

			break;

			}

		}

		if (isNumber) {

			System.out.println(value+" 는 숫자입니다."); 

		} else {

			System.out.println(value+" 는 숫자가 아닙니다."); 

		}

	} // end of main

} // end of class

//[실행결과] 

//12o34 . 는 숫자가 아닙니다


[4-14] 다음은 숫자맞추기 게임을 작성한 것이다 과 사이의 값을 반복적으로 입력 . 1 100

해서 컴퓨터가 생각한 값을 맞추면 게임이 끝난다 사용자가 값을 입력하면 컴퓨터는 자 . ,

신이 생각한 값과 비교해서 결과를 알려준다 사용자가 컴퓨터가 생각한 숫자를 맞추면 .

게임이 끝나고 몇 번 만에 숫자를 맞췄는지 알려준다 에 알맞은 코드를 넣어 프 . (1)~(2)

로그램을 완성하시오.

[연습문제]  /ch4/Exercise4_14.java


class Exercise4_14{

	public static void main(String[] args){

		// 1~100 answer . 사이의 임의의 값을 얻어서 에 저장한다

		int answer = (int)(Math.random()*100+1);

		int input = 0; // 사용자입력을 저장할 공간

		int count = 0; // 시도횟수를 세기위한 변수

		// Scanner 화면으로 부터 사용자입력을 받기 위해서 클래스 사용

		java.util.Scanner s = new java.util.Scanner(System.in);

		do {

			count++;

			System.out.print("1 과 100 사이의 값을 입력하세요 :"); 

			input = s.nextInt(); // input . 입력받은 값을 변수 에 저장한다

			if (inputanswer){

				System.out.println(count+"번째, 입력값이 답보다 큽니다");

			}else {

				System.out.println(count+"번째, 정답입니다");

				break;

			}

		} while(true); // 무한반복문

	} // end of main

} // end of class HighLow

//[실행결과] 

//1 100 :50 과 사이의 값을 입력하세요

//더 큰 수를 입력하세요.

//1 100 :75 과 사이의 값을 입력하세요

//더 큰 수를 입력하세요.

//1 100 :87 과 사이의 값을 입력하세요

//더 작은 수를 입력하세요.

//1 100 :80 과 사이의 값을 입력하세요

//더 작은 수를 입력하세요.

//1 100 :77 과 사이의 값을 입력하세요

//더 작은 수를 입력하세요.

//1 100 :76 과 사이의 값을 입력하세요

//맞췄습니다.

//시도횟수는 번입니다 6 .



[4-15] 다음은 회문수를 구하는 프로그램이다 회문수 란 숫자를 거꾸로 읽 . (palindrome) ,

어도 앞으로 읽는 것과 같은 수를 말한다 예를 들면 이나 같은 수를 말한 . ‘12321’ ‘13531’

다 에 알맞은 코드를 넣어서 프로그램을 완성하시오 . (1) .

[Hint] 나머지 연산자를 이용하시오.

[연습문제]  /ch4/Exercise4_15.java


class Exercise4_15{

	public static void main(String[] args){

		int number = 12321;

		int tmp = number;	// 거꾸로 변환하기 위해 정의한 함수 tmp를 10으로 나눠

		int result =0;		// number 변수 를 거꾸로 변환해서 담을 변수

		while(tmp !=0) {

			result = result*10 + tmp % 10; //거꾸로 변환된 수는 10씩 키우고 뒤에 가져온 수 붙임

			System.out.println("result"+result);

			tmp /= 10;

			System.out.println("tmp"+tmp);

		}

		if(number == result)

			System.out.println( number + " 는 회문수 입니다."); 

		else

			System.out.println( number + " 는 회문수가 아닙니다."); 

	} // main

}

//[실행결과] 

//12321



/*

[3-1] 다음 연산의 결과를 적으시오.

[연습문제] /ch3/Exercise3_1.java

*/


class Exercise3_1 {

	public static void main(String[] args) {

		int x = 2;

		int y = 5;

		char c = 'A'; // 'A' 65 의 문자코드는

		System.out.println(1 + x << 33);	//덧셈먼저(3) 시프트(int 32bit)는 2의n제곱* 

		System.out.println(y >= 5 || x < 0 && x > 2);//true

		System.out.println(y += 10 - x++);	//y = 5+10-2 = 13

		System.out.println(x+=2);			//x = 3+2

		System.out.println( !('A' <= c && c <='Z') );//!(true&&true) 대문자인지 판별

		System.out.println('C'-c);	//c는 'A'를 담고있고 int로 표현하면 67-65 = 2

		System.out.println('5'-'0');//0에서 5까지의 값 차이

		System.out.println(c+1);	//c에 저장된 'A'(65)의 값을 불러온후 1을 더함

		System.out.println(++c);	//값 증가 후에 명령 실행

		System.out.println(c++);	//명령 실행 후에 값 증가

		System.out.println(c);		//윗줄에서 증가된 값이 보여지게 됨

	}

}

/*

[3-2] 아래의 코드는 사과를 담는데 필요한 바구니 버켓 의 수를 구하는 코드이다 만일 사과의 수가 123개이고

하나의 바구니에는 10개의 사과를 담을 수 있다면 13개의 바구니가 필요할 것이다

[연습문제] /ch3/Exercise3_2.java

*/


class Exercise3_2 {

	public static void main(String[] args) {

		int numOfApples = 123; // 사과의 개수

		int sizeOfBucket = 10; // ( ) 바구니의 크기 바구니에 담을 수 있는 사과의 개수

		int numOfBucket = ( numOfApples/sizeOfBucket+1 ); // 모든 사과를 담는데 필요한 바구니의 수

		System.out.println("필요한 바구니의 수 :"+numOfBucket);

	}

}

//[실행결과] 13


/*

[3-3] 아래는 변수 의 값에 따라 num ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다 삼항연산자로 알맞은 코드

[Hint] 삼항 연산자를 두 번 사용하라.

[연습문제] /ch3/Exercise3_3.java

*/

class Exercise3_3 {

	public static void main(String[] args) {

		int num = 10;

		System.out.println(num < 0 ? "음수" : (num > 0 ? "양수" : 0));

	}//조건 연산자?와 :이용, 연산의 우선순위를 정리하기 위해 괄호 사용 

}

//[실행결과] 양수


/*

[3-4] 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다 만일 변수 num의 값이 ‘456’이라면

‘400’이 되고, ‘111’이라면 ‘100’이 된다 에 알맞은 코드를 넣으시오.

[연습문제] /ch3/Exercise3_4.java

*/


class Exercise3_4 {

	public static void main(String[] args) {

		int num = 456;

		System.out.println(num/100*100);

	}

}

//[실행결과] 400


/*

[3-5] 아래는 변수 의 값 중에서 일의 자리를 1로 바꾸는 코드이다 만일 변수 num의 값이 333이라면 331이 되고

777이라면 771이 된다 에 알맞은 코드를 넣으시오

[ ] 연습문제 /ch3/Exercise3_5.java

*/



/*

[3-6] 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다

예를 들어 24의 크면서도 가장 가까운 10의 배수는 30이다 19의 경우 20이고 81의 경우 90이 된다 30에서 24를 뺀

나머지는 6이기 때문에 변수 num의 값이 24라면 6을 결과로 얻어야 한다 에 알맞은 코드를 넣으시오

[Hint] 나머지 연산자를 사용하라.

[연습문제] /ch3/Exercise3_6.java

*/

class Exercise3_6 {

	public static void main(String[] args) {

		int num = 24;

		System.out.println(10 - num%10);

	}

}

//[실행결과]6



/*

[3-7] 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다 변환공식이

'C =5/9 ×(F - 32)'라고 할 때 알맞은 코드를 넣으시오 단 변환 결과값은 소수점 셋째자리에서 반올림해야한다

(Math.round()를 사용하지 않고 처리할 것)

[연습문제] /ch3/Exercise3_7.java

*/

class Exercise3_7 {

	public static void main(String[] args) {

		int fahrenheit = 100;

		float celcius = 5/9F *(fahrenheit -32);

		System.out.println("Fahrenheit:"+fahrenheit);

		System.out.println("Celcius:"+((int)(celcius*100+0.5)/100F));

	}

}

//[실행결과]	Fahrenheit:100

//			Celcius:37.78



/*

[3-8] 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.

[ 연습문제 ]/ch3/Exercise3_8.java

*/

class Exercise3_8 {

	public static void main(String[] args) {
		byte a = 10;
		byte b = 20;
		byte c = (byte) (a + b);	//jvm에서 연산을 위해 자동으로 int 형변환, 다시 byte로
		
		char ch = 'A';
		ch = (char) (ch + 2);		//jvm에서 연산을 위해 자동으로 int 형변환, 다시 char로
		
		float f = 3F / 2;			//적어도 하나는 F
		long l = 3000*3000*3000L;	//적어도 하나는 L
		
		float f2 = 0.1f;
		double d = 0.1;
		
		boolean result = (float)d==f2;		//유효자리수가 큰 double은 오차가 커질 수 있어 float으로
		
		System.out.println("c="+c);
		System.out.println("ch="+ch);
		System.out.println("f="+f);
		System.out.println("l="+l);
		System.out.println("result="+result);
	}

}

//[실행결과]

//c=30

//ch=C

//f=1.5

//l=27000000000

//result=true



/*

[3-9] 다음은 문자형 변수 ch가 영문자 (대문자 또는 소문자)이거나 숫자일 때만 변수  b의 값이 true가 되도록

[연습문제] /ch3/Exercise3_9.java

*/


class Exercise3_9 {

	public static void main(String[] args) {

		char ch = 'z';		//char은 ''로 표시, 논리연산자 ||이용

		boolean b = ('A' <= ch && ch <= 'Z' || 'a' <= ch && ch <= 'z' ||

				'0' <= ch && ch <= '9');

		System.out.println(b);

	}

}

//[실행결과]	true


/*

[3-10] 다음은 대문자를 소문자로 변경하는 코드인데 문자 ch에 저장된 문자가 대문자인 경우에만 소문자로 변경한다

문자코드는 소문자가 대문자보다 32만큼 더 크다 예를 들어 'A‘의 코드는 65이고 ’a'의 코드는 97이다

[연습문제] /ch3/Exercise3_10.java

*/

class Exercise3_10 {

	public static void main(String[] args) {

		char ch = 'A';	//대문자인지 판별한 뒤에 32만큼 합한다, 계산은 int로 이루어지기 때문에 변환

		char lowerCase = ( 'A' <= ch && ch <= 'Z' ) ? (char)(ch+32) : ch;

		System.out.println("ch:"+ch);

		System.out.println("ch to lowerCase:"+lowerCase);

	}

}

//[실행결과]

//	ch:A

//	ch to lowerCase:a







'먼지 낀 책장사이 > Java' 카테고리의 다른 글

4장 조건문과 반복문  (0) 2017.08.04
자바의 정석 연습문제 2장 변수  (0) 2017.07.25

[2-1] 다음 표의 빈 칸에 개의 기본형 을 알맞은 자리에 넣으시오 8 (primitive type) .

종 류/크 기 1 byte 2 byte 4 byte 8 byte 

논리형 boolean

문자형 char

정수형 byte short int long

실수형 float double




[2-2] 주민등록번호를 숫자로 저장하고자 한다 이 값을 저장하기 위해서는 어떤 자료형 (data type)을 선택해야 할까 regNo라는 변수를 선언하고 자신의 주민등록번호로 초기화 하는 한 줄의 코드를 적으시오.

930101-1234567

*/

long regNo = 9307061234567L; //int는 범위를 벗어남, float은 소수

System.out.println(regNo);



[2-3] 다음의 문장에서 리터럴 변수 상수 키워드를 적으시오 , , , .

int i = 100;

long l =100L;

final float PI = 3.14f;

리터럴 100, 100L, 3.14f //상수와 비교

변수 i, l

키워드 int, long, final, float

상수 PI




[2-4] 다음 중 기본형 이 아닌 것은 (primitive type) ?

a. int

b. Byte //소문자 byte

c. double

d. boolean




[2-5] 다음 문장들의 출력결과를 적으세요 오류가 있는 문장의 경우 괄호 안에 오류 라고 적으시오

System.out.println(“1” + “2”) ( ) →

System.out.println(true + “”) ( ) →

System.out.println(‘A' + 'B') ( ) →

System.out.println('1' + 2) ( ) →

System.out.println('1' + '2') ( ) →

System.out.println('J' + “ava”) ( ) →

System.out.println(true + null) ( ) →


		System.out.println("1"+"2");

		System.out.println(true+"");

		System.out.println('a'+'b');	//싱글쿼테이션안의 값은 숫자로 변환

		System.out.println('1'+2);		//'1'에 해당하는 값(49)에 2를 합함

		System.out.println('1'+'2');	//49+50=99

		System.out.println('J'+"ava");

//		System.out.println(true+null);	//null은 출력할 수 없음

</pre>



[2-6] 다음 중 키워드가 아닌 것은 모두 고르시오 ?( )

a. if

b. True //소문자 true

c. NULL //소문자 null

d. Class //소문자class

e. System




[2-7] 다음 중 변수의 이름으로 사용할 수 있는 것은 모두 고르시오 ? ( )

a. $ystem

b. channel#5 //#사용불가

c. 7eleven //숫자로 시작불가능

d. If //대문자 사용은 가능하지만 지양

e. 자바 //한글 사용도 가능하지만 지양

f. new //예약어 사용불가

g. $MAX_NUM

h. hello@com //@사용불가




[2-8] 참조형 변수(reference type)와 같은 크기의 기본형(primitive type)은 모두 고르시오

a. int //모든 참조형 변수는 4byte

b. long

c. short

d. float //모든 참조형 변수는 4byte

e. double




[2-9] 다음 중 형변환을 생략할 수 있는 것은 모두 고르시오 ? ( )

byte b = 10;

char ch = 'A';

int i = 100;

long l = 1000L;

a. b = (byte)i;

b. ch = (char)b;

c. short s = (short)ch;

d. float f = (float)l;

e. i = (int)ch;




[2-10] char ? (10 ) 타입의 변수에 저장될 수 있는 정수 값의 범위는 진수로 적으시오

char는 2byte로 2*8bit=16bit로 2의 16제곱=65536 0~65535




[2-11] 다음중 변수를 잘못 초기화 한 것은 모두 고르시오 ? ( )

a. byte b = 256; //범위가 127까지만 가능

b. char c = ''; //공백이라도 값이 있어야함

c. char answer = 'no'; //한글자만 가능

d. float f = 3.14; //리터럴 타입 f지정 필요

e. double d = 1.4e3f;




[2-12] 다음 중 메서드의 선언부로 알맞은 것은 모두 고르시오 main ? ( )

a. public static void main(String[] args)

b. public static void main(String args[])

c. public static void main(String[] arv)

d. public void static main(String[] args) //void는 반환타입으로 main 앞에

e. static public void main(String[] args) //위치는 바뀌어도 상관없지만 되도록이면




[2-13] 다음 중 타입과 기본값이 잘못 연결된 것은 모두 고르시오 ? ( )

a. boolean - false

b. char - '\u0000'

c. float - 0.0 //리터럴타입f = 0.0f

d. int - 0

e. long - 0 //리터럴타입L = 0.0L

f. String - "" //모든 참조형의 타입의 기본값은 null

'먼지 낀 책장사이 > Java' 카테고리의 다른 글

4장 조건문과 반복문  (0) 2017.08.04
자바의 정석 연습문제 3장 연산자  (0) 2017.07.26