본문 바로가기
솔루션모음/자바 기초부터 하나씩

[자바 기초부터 하나씩/3장 연습문제 솔루션] 반복문

by 이얏호이야호 2020. 3. 31.

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;}

는 무한루프가 된다.

= 거짓. 조건 i1이므로 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%21보다 크다면 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++){}

= k1이고 k20보다 작거나 같으면 작동한다. 작동할때마다 k1만큼 증가한다.

 

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=1k==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에 대한 출력을 실행한 후 --를 실행한다. 만약 x2보다 크다면 실행하지 않는다.

출력은 7이되고 x--를 실행해 6이된다. 하지만 x2보다 크므로 더 이상 실행하지 않고 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,productint 로 선언되었다고 가정한다. 이 문제에 대한 답은 mn의 항으로 표현될 것이다.

 

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

댓글