1.참 또는 거짓
만약 거짓이면, 이유를 설명하여라.
a. 항상 100번을 반복하는 루프를 실행하기 위해서는 while 문보다 for 문을 사용하는 것이 더 편리하다.
= 참.
b. for 문으로 실행할 수 있는 동작은 while 문으로도 실행 가능하다.
= 참.
c. while 문으로 실행할 수 있는 동작은 for 문으로도 실행할 수 있다.
= 참.
d. while 문은 항상 적어도 한 번은 루프가 실행된다.
= 거짓.while문은 먼저 조건을 테스트하고 참이면 해당 루프가 실행된다.
e. while 문 내에서는 for 루프를 중첩할 수 없다.
= 참.
f. while(조건)에서 조건의 데이터 유형은 부울이어야 한다.
= 참.
g. 감시 문자 값으로 0을 사용하는 것은 정수 목록의 끝을 알려주는 한 방법이 될 수 있다.
= 거짓. 0은 프로그램 실행에 사용되는 데이터 숫자일 가능성이 크므로, 입력 값이 모두 양수일 경우 감시 문자 값으로 -값을 사용한다.
h. for 루프의 중첩 깊이는 기껏해야 3으로 제한된다.
= 거짓. 중첩의 횟수는 무한하다.
i. 다음 문장
for(int i=1; i<=10; i++)
{i=i-1;}
는 무한루프가 된다.
= 참.
i. 다음 문장
for(int i=1; i<=0; i++)
{i=i-1;}
는 무한루프가 된다.
= 거짓. 조건 i는 1이므로 i<=0조건에 부합하지 않아 실행되지 않는다.
2.컴파일러 실행
다음 문장에서 오류를 찾아보아라. 만약 문장에 오류가 없다면, ‘없다’라고 표시하여라. 문장에 오류가 있다면, 오류를 수정하여라. 각각의 경우에 대한 루프의 동작을 설명하여라.
a. for(int i = 1 i<=10;i++){
i=i-1
}
= 오류가 있다. i=i-1 에 세미콜론이 없다.
for(int i = 1 i<=10;i++){
i=i-1;
}
= 무한루프가 생성된다.
b.int j=7;
while(j>1){
System.out.println("again");
j=j%2
}
= 오류가 있다. j=j%2에 세미콜론이 없다.
while(j>1){
System.out.println("again");
j=j%2;
}
= j%2가 1보다 크다면 again을 출력한다.
c. int j=1;
while(j=1){
System.out.print("try again");
}
= 오류가 있다. while괄호 안에는 boolean값이 들어가야하기 때문에 j==1로 고친다.
int j=1;
while(j==1){
System.out.print("try again");
}
= tryagain을 무한반복 출력한다.
d. for(int k=1,k==20;k++){}
= 오류가 있다. 세미콜론이 들어가야 하며, k의 범위설정을 k<=20으로 고치면 실행이 된다.
for(int k=1;k<=20;k++){}
= k는 1이고 k가 20보다 작거나 같으면 작동한다. 작동할때마다 k는 1만큼 증가한다.
e. for(float h=0.0;h<5.0;h=h+.01)
System.out.println(h);
= 오류가 있다. float형을 double형으로 바꿔줘야한다.
for(double h=0.0;h<5.0;h=h+.01)
System.out.println(h);
= 0.01부터 4.9까지 0.1씩증가한다.
h. int k=3; do
{
System.out.print(k);
}while(k!=3);
= 오류가 없다. 출력은 3이다.
i. do
{
System.out.println("This looks correct");
}while{true};
=오류가 있다. {true}를 (true)로 교체한다.
do
{
System.out.println("This looks correct");
}while(true);
= This looks correct가 무한루프가 생성된다.
j.while(true)
{
int x = x+1;
}
= 오류가 있다. x가 초기화 되지 않은 상태에서 x+1은 오류가 발생한다.
int x=0;
while(true)
{
x=x+1;
}
= x=x+1이 무한루프생성으로 계속해서 더한다.
k int m=2;
while(m>0)do{
m=m-1;
};
=오류가 있다. while문을 사용하기 위해서는 do를 지워야한다.
int m=2;
while(m>0){
m=m-1;
}
=m의 값인 2에서 -1씩 줄어들어 m의 값이 0이 될 때까지 실행된다.
l. int m=2;
while(m>0)do{
m=m-1;
System.out.println(m);
};
= 오류가 있다. while문을 사용하기 위해서는 do를 지워야한다.
int m=2;
while(m>0){
m=m-1;
System.out.println(m);
};
=m의 값인 2에서 -1씩 줄어들어 m의 값이 0이 될 때까지 실행된다.
출럭은 0 1 순서대로 출력된다.
m. int m = 2;
while(m>0){
m=m-1;
System.out.println(m);
}while(false);
= 오류가 있다. while(false)에서 오류가 걸린다. while문을 사용하기위해서는 while(false)를 지워야한다.
int m = 2;
while(m>0){
m=m-1;
System.out.println(m);
}
=m의 값인 2에서 -1씩 줄어들어 m의 값이 0이 될 때까지 실행된다.
출럭은 0 1 순서대로 출력된다.
n. int k;
for(k=0;k=1;k++)
{
System.out.print(k-1);
}
= 오류가 있다. k=1에서 합당한 조건으로 바꿔줘야한다.
int k;
for(k=0;k<=10;k++)
{
System.out.print(k-1);
}
= k=1을 k==1로 바꾼다면 문법에는 맞지만 실행이 되지 않는 오류를 범할 수 있어 임의의 범위를 새로설정하였다. 이렇게 프로그램을 짠다면 -1부터 9까지 출력되어진다.
o. int x = 7;
do(System.out.println(x);x--)
while{x<2};
=오류가 있다. 적절한 do-while문 사용을 위해 괄호 사용을 다음과 같이 교체한다. 그리고 x--에 세미콜론을 추가한다.
int x = 7;
do{System.out.println(x);x--;}
while(x<2);
= 조건에 상관없이 x에 대한 출력을 실행한 후 --를 실행한다. 만약 x가 2보다 크다면 실행하지 않는다.
출력은 7이되고 x--를 실행해 6이된다. 하지만 x가 2보다 크므로 더 이상 실행하지 않고 7이외의 출력 은 실행되지 않는다.
p. for(int k=0;k<100; k=++k)
System.out.println(k)
= 오류가 있다 세미콜론을 추가해야 한다.
for(int k=0;k<100; k=++k)
System.out.println(k);
= 0부터 100보다작은값까지 ++하며 출력한다 0에서 99까지 출력된다.
q. for(int k=0;k<100; k=++k)
System.out.println(k);
=오류가 없다. 0부터 100보다 작은 값까지 ++하며 출력한다. 0에서 99까지 출력된다.
r. for(int k=0; k<100; k= k++)
System.out.println(k);
= 오류가 없다. 무한루프가 생성되어 0만 계속하여 출력한다.
s. for(int k=0; k<100; k= ++k)
System.out.println(k++);
= 오류가 없다. 0부터 2씩증가하여 0부터 98까지 출력한다.
t. for(int k=0; k<100; k= ++k)
System.out.println(--k);
= 오류가 없다. 무한루프가 생성되어 -1만 계속하여 출력한다.
5.루프선택
다음 각 문제들을 해결하기 위한 코드를 작성하여라. for,while,do-while 중에서 가장 정절하다고 생각되는 루프를 선택하여라.
a. int cent=1;
int save=0;
for(int i=1;i<30;i++){
cent =cent*2;
save += cent;
}
System.out.println(save+1);
b. int cent=1;
int save=0;
int count=1;
for(int i=1;i<30;i++){
cent =cent*2;
save += cent;
count++;
if(save>=1000000)
break;
}
System.out.println(count);
6. 루프 재작성
다음 while 문을 for문으로 다시 작성하여라. input(a Scanner)는 이전에 선언되었다고 가정한다.
a. int count=0;
int sum=0;
while(count<10){
sum+=input.nextInt();
count=count+1;
}
= for(int count=0;count<10;count++){
sum+=input.nextInt();
}
b. int count = 1;
while(count<=15){
int num =1;
int sum=0;
while( num<= 5){
sum+=input.nextInt();
num+=1;
}
System.out.println("Sum number" + count + " is " + sum);
count++;
}
= for(i=1; i<=15;i++){
int sum=0;
for(int j=1;j<=5;j++){
sum+=input.nextInt();
}
System.out.println("Sum number" + i + " is " + sum);
}
7. 루프 재작성
다음 for문을 while 문으로 다시 작성하여라.
a. for(int i=0, sum=0; i<10;i++)
sum = sum+i*i;
= int count=0;
int sum=0;
while(count != 10){
sum=sum+count*count;
count++;
System.out.println(sum);
}
b.int sum;
for(int I=0;i<10;i++)
{
sum=0;
for(int j=0;j<=i;j++)
sum = sum+j;
System.out.println(sum);
}
=int count1=0;
while(count1 != 10){
int sum=0;
int count2=0;
count1++;
while(count2 != count1){
sum=sum+count2;
count2++;
System.out.println(sum);
}
}
c. int i, sum;
for(i=0, sum=0;i<10;sum+=i++);
System.out.println(sum);
= int count=0,sum=0;
while( count != 9){
sum += count+1;
count++;
}
System.out.println(sum);
9. 루프 추적
다음 각 루프에서 마지막 행이 몇 번 실행되는가? m,n,product는 int 로 선언되었다고 가정한다. 이 문제에 대한 답은 m과 n의 항으로 표현될 것이다.
a.for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
product=i*j;
= m*n 번
b.for(int i=1;i<=8;i++)
for(int j=1;j<=i;j++)
product= i*j;
= 8번
c.for(int i=1;i<=m;i++)
for(int j=1;j<=i;j++)
product= i*j;
= 1+2+....+m 번
d. int max=1;
for(int i=1;i<=n;max*=2,i++);
for(int i=max;i>=1;i=i/2)
System.out.println(i);
= n+max-1번
'솔루션모음 > 자바 기초부터 하나씩' 카테고리의 다른 글
[자바 기초부터 하나씩/10장 연습문제 솔루션 답지 해답] 상속 (0) | 2020.04.01 |
---|---|
[자바 기초부터 하나씩/9장 연습문제 솔루션 답지 해답] 객체와 클래스 (0) | 2020.04.01 |
[자바 기초부터 하나씩/7장 연습문제 솔루션 답지 해답] 배열 (0) | 2020.03.31 |
[자바 기초부터 하나씩/2장 연습문제 솔루션] true or false (0) | 2020.03.31 |
[자바 기초부터 하나씩/1장 연습문제 솔루션] 자바소개 (0) | 2020.03.31 |
댓글