package z_exam;
public class exam03 {
public static void main(String[] args){
// [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);
// 1+2<<33= int3<<3 = 11(2)<<33
// 32칸을 왼쪽으로 33칸 옮기면 = 10(2) = 2 -땡
System.out.println(y >= 5 || x < 0 && x > 2);
// 2<0 && 2>2 || 5<=5
// f && f || t = f || t = true
System.out.println(y += 10 - x++);
// 15 - 2 =13 //(x=3, y=15)
System.out.println(x+=2);
// (x=3, y=15)+2 = 5
System.out.println( !('A' <= c && c <='Z') );
// !(65<=65 && 65 <='Z') = !(t && t) = false
System.out.println('C'-c);
// 67-65 = 2
System.out.println('5'-'0');
// 5
System.out.println(c+1);
// char + int = 66
System.out.println(++c);
// char 67 // ++(증가)는 +1(int)이 아닌 자리 이동?
System.out.println(c++);
// char 67
System.out.println(c);
// char 68
// }
// }
// [3-2] 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일
// 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니
// 가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.
// [연습문제]/ch3/Exercise3_2.java
// class Exercise3_2 {
// public static void main(String[] args) {
int numOfApples = 121; // 사과의 개수
int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수)
int numOfBucket1 = (numOfApples/sizeOfBucket+1); // 모든 사과를 담는데 필요한 바구니의 수
//1번 방식 - 10진수 이니까 +1로 끝
System.out.println("1번 방식, 필요한 바구니의 수 :"+numOfBucket1);
int numOfBucket2 = (int)((float)numOfApples/sizeOfBucket+0.9f);//단위가 1이니까 0.9로
//2번 방식 - 바구니 크기가 조정될 수 있는 점을 고려 하면 가변적인 바구니의 크기 고려
//??? 질문, 만약 개수가 1 단위가 아니라 16 단위라면?
System.out.println("2번 방식, 필요한 바구니의 수 :"+numOfBucket2);
//3번 방식 삼항연산자 활용(=if = 조건식의 결과가 t or f 인 경우) -> 나머지가 생기는 경우. 없는 경우
int numOfBucket3 = numOfApples/sizeOfBucket+(numOfApples%sizeOfBucket>0 ? 1:0);
System.out.println("3번 방식, 필요한 바구니의 수 :"+numOfBucket3);
// }
// }
// [실행결과]
// 13
// [3-3] 아래는 변수 num의 값에 따라 ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다. 삼항 연산
// 자를 이용해서 (1)에 알맞은 코드를 넣으시오.
// [Hint] 삼항 연산자를 두 번 사용하라.
// [연습문제]/ch3/Exercise3_3.java
// class Exercise3_3 {
// public static void main(String[] args) {
int num3 = 10;
System.out.println( num3==0 ? "0" : num3<0 ? "음수" : "양수");
// num3<0 ? "음수" : "양수" //문제를 먼저 코딩으로 전환
// num3==0 ? "0인 것" : "0이 아닌 것" //단, 음수 양수보다 더 범위가 크니까 앞으로 이동
// }
// }
// [3-4] 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num
// 의 값이 ‘456’이라면 ‘400’이 되고, ‘111’이라면 ‘100’이 된다. (1)에 알맞은 코드를 넣으
// 시오.
// [연습문제]/ch3/Exercise3_4.java
// class Exercise3_4 {
// public static void main(String[] args) {
int num4 = 456;
System.out.println( (int)(num4/100.0f) * 100 );
//순서대로 100의 자리 밑을 구분하기위해 소수점으로 갔다가, 나머지를 버리기 위해 형변환
//num4/100.0f
//(int)(num4/100.0f)
//(int)(num4/100.0f) * 10
// }
// }
// [3-5] 아래는 변수 num의 값 중에서 일의 자리를 1로 바꾸는 코드이다. 만일 변수 num의
// 값이 333이라면 331이 되고, 777이라면 771이 된다. (1)에 알맞은 코드를 넣으시오.
// [연습문제]/ch3/Exercise3_5.java
// class Exercise3_5 {
// public static void main(String[] args) {
int num5 = 333;
System.out.println( (int)(num5/10.0f)*10+1 );
//num5/10.0f
//(int)(num5/10.0f)
//(int)(num5/10.0f)*10
//(int)(num5/10.0f)*10 +1
// }
// }
// [실행결과]
// 양수
// [실행결과]
// 400
// [실행결과]
// 331
/*
[3-6] 아래는 변수 num의 값보다 크면서도 가장 가까운
10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다.
//구하려는 수는 뺀 나머지 == y=(%) = 10x - num
//10의 배수인 어떤 수x에서 변수 num를 뺀 값 == 10x - num
//10의 배수인 어떤 수x는 num보다 크면서 가깝다 == x=(int)(num/10.0f)+1
예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이
다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변
수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오.*/
// [Hint] 나머지 연산자를 사용하라.
// [연습문제]/ch3/Exercise3_6.java
// class Exercise3_6 {
// public static void main(String[] args) {
int num6 = 24;
System.out.println( 10-(num6%10) );
// 방법 1) 진수 끝자리에 대한 나머지를 구하는 것이니까
System.out.println( (((int)(num6/10.0f)+1) *10) - num6);
// 방법 2) 진수가 변할 수 있는 점을 고려한다면..
// }
// }
// [3-7] 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환공식이
// 'C = 5/9 ×(F - 32)'라고 할 때, (1)에 알맞은 코드를 넣으시오.
// 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다.(Math.round()를 사용하지 않고 처리할 것)
// [연습문제]/ch3/Exercise3_7.java
// class Exercise3_7 {
// public static void main(String[] args) {
int fahrenheit = 100;
float celcius = ( (int)(5.0f/9 *(fahrenheit-32)*1000) /1000.0f );
//C = 5/9 x (F-32) //주어진 식
//5/9 *(fahrenheit-32) //코딩으로 대입
//5.0f/9 *(fahrenheit-32) //코딩으로 적용
//(5.0f/9 *(fahrenheit-32)*1000) 소수 셋째짜리까지 올렸다가
//(int)(5.0f/9 *(fahrenheit-32)*1000) int로 바꾸면서 소수 셋째자리 밑 떨구고
//(int)(5.0f/9 *(fahrenheit-32)*1000) /1000.0f 원래 자리수로 원상복귀
System.out.println("Fahrenheit:"+fahrenheit);
System.out.println("Celcius:"+celcius);
// }
// }
// [실행결과]
// 6
// [실행결과]
// 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 = a + b;
// char ch = 'A';
// ch = ch + 2;
// float f = 3 / 2;
// long l = 3000 * 3000 * 3000;
// float f2 = 0.1f;
// double d = 0.1;
// boolean result = d==f2;
// 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);
byte a = 10;
byte b = 20;
int c8 = a + b; //담을 그릇을 byte말고 int에 선언, 어차피 +연산 과정에서 a,b모두 int로 전환된다
//c변수 이름은 앞에 있어서 c8로 변경
char ch = 'A';
ch = (char)(ch + 2);// 방법 1) 문자열을 기준(굳이 문자를 입력받았음으로)으로 형 변환
float f = 3.0f / 2; // 대입(=)연산 전에, 나머지를 가질 수 있도록 연산 전에 형변환
//-> 3.0f 또는 2.0f
long l = (long)(3000.0 * 3000 * 3000);
//값의 길이가 자료형 크기를 넘어(11자리)가는 것으로 보임
//long l2 = 27000000000; <- 에러
float f2 = 0.1f;
double d = 0.1;
boolean result = (float)d==f2;
//입력받은 변수 값은 건들지않고
//결과만 조정하기 위해 == 연산 전에 양쪽의 형만 맞췄다
System.out.println("c="+c8);
System.out.println("ch="+ch);
System.out.println("f="+f);
System.out.println("l="+l);
System.out.println("result="+result); //false <- 값이 0.1인 경우, double형은 매우 가까운 근사치이다
// }
// }
// [실행결과]
// c=30
// ch=C
// f=1.5
// l=27000000000
// result=true
// [3-9] 다음은 문자형 변수 ch가
// 영문자(대문자 또는 소문자)이거나 숫자일 때만 //<- 조건!
// 변수 b의 값이 true가 되도록 하는 코드이다. (1)에 알맞은 코드를 넣으시오.
// [연습문제]/ch3/Exercise3_9.java
// class Exercise3_9 {
// public static void main(String[] args) {
char ch9 = 's';
boolean b9 = ( 'A'<= ch9 && ch9 <='Z' || 'a'<= ch9 && ch9 <='z' || '0'<= ch9 && ch9 <='9' );
System.out.println(b9);
// b=영대소문자 || b=숫자 ? true : false
// 'A'<= ch9 <='Z' || 'a'<= ch9 <='z' || b=숫자 //boolean 있느니까 '? :'구문은 생략
// 일단 대소문자 부터, 'A'<= ch9 && ch9 <='Z' || 'a'<= ch9 && ch9 <='z'
// 그리고 숫자는.. '0'<= ch9 && ch9 <='9'
// }
// }
// [3-10] 다음은 대문자를 소문자로 변경하는 코드인데,
// 문자 ch에 저장된 문자가 "대문자인 경우에만" 소문자로 변경한다. <-조건
// 문자코드는 소문자가 대문자보다 32만큼 더 크다.
// 예를들어 'A‘의 코드는 65이고 ’a'의 코드는 97이다. (1)~(2)에 알맞은 코드를 넣으시오.
// [연습문제]/ch3/Exercise3_10.java
// class Exercise3_10 {
// public static void main(String[] args) {
char ch10 = 'A';
char lowerCase = ('A'<= ch10 && ch10 <='Z') ? (char)(ch10 + 32) : ch10;
System.out.println("ch10:"+ch10);
System.out.println("ch10 to lowerCase:"+lowerCase);
// (x == 대문자냐) ? 소문자로 변환(x_대문자겠지? + 32) : 원래 그대로(x_소문자 겠지?)
//놉! ( 'A' <= ch10 <= 'B' ) ? ch10 + 32 : ch10
//놉! ch10 + 32 = char + int -> 일단 계산하고(int + int) 문자로 다시 캐스팅(char) -> (char)(int)
//그전에!!!!
//'<=' 연산을 하기 전에 ch를 int(4byte)형으로 만들어야지...
//이건, 아.. 아니네... 헐ㅋ 비교연산시엔 서로 형이 맞기만하면? 가능?..
//그것도 아니지.. 자동으로 맞춰지지.. 4byte 미만이니까.. ! 이건 아무 문제 없는 거고
// ()?에 괄호 안에서,,,, 연산은 한번씩 밖에 못하잖아!
//'A'<= ch9 && ch9 <='Z'
// }
// }
// [실행결과]
// ch:A
// ch to lowerCase:a
}
}
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
5일차) 관계형 데이터모델에서 키 key 에 대해 알아본다 20180601pm (0) | 2018.06.02 |
---|---|
4일차) 관계형 데이터베이스 구성 예 20180530 pm (0) | 2018.06.02 |
5일차) java 연산자 및 예제(2) _20180601 am (0) | 2018.06.01 |
4일차) 기본 연산자 및 연산 순위 20180531 am (0) | 2018.05.31 |
4일차) 변수 정리 예제 _20180531 am (0) | 2018.05.31 |
댓글