프로그래밍기초 제3주 실습과제

       

조건문과 반복문 2

       

P1~P10 까지 하나의 zip파일로 만들어 학번_이름.zip 으로 이름을 저장하여 제출하면 됩니다.

이번 주부터는 프로그램 작성, 컴파일, 실행을 위해 Eclipse를 사용합니다. Eclipse는 자바 개발에 많이 사용하는 통합개발환경(IDE, Integrated Development Environment)입니다. Eclipse 설치 방법과 사용 방법은 별도의 자료에서 설명합니다.

프로그램을 작성할 때는 아래와 같은 관례를 지켜야 합니다.

  1. 클래스 이름은 영어 대문자로 시작 (School, Power)
  2. 변수이름은 소문자로 시작 (accountNo, initialValue)
  3. 변수의 이름을 정할 때에는 의미 있는 이름을 지어야 한다(for 문장에서의 index i, j 와 같은 사소한 변수는 제외).
  4. 낙타표기법 (numberOfWords, isTheBest)
  5. 논리적 들여쓰기(indentation)을 해야 합니다. 이클립스에서 프로그램을 편집한 후에는 항상 Ctrl+i를 눌러 들여쓰기를 맞추세요.

위의 관례를 지키지 않으면 과제물 채점에서 감점합니다.

       

P1 (반복문, 나눗셈)

아래와 같이 작동하는 프로그램을 작성하시오. 이 프로그램은 사용자가 입력하는 숫자의 합과 평균을 구합니다.

  • 사용자에게 몇 개의 정수를 입력할 것인지 물어보고, 그 갯수만큼의 정수들을 차례로 읽어 들이면서 읽어 들인 정수들을 차례로 더하여 합을 구한다. 사용자는 한 개 이상의 정수를 입력한다고 가정한다.
  • 정수 입력이 끝나면 읽어들인 정수들의 합을 출력한다.
  • 읽어 들인 수들의 평균을 계산하여 화면에 출력한다. 소수점 아래 셋째 자리에서 반올림하여 소수점 둘째 자리까지 출력한다.

클래스 이름은 SumAverage로 지으시오. 실행화면은 아래와 같습니다.

title

title

힌트

  • 정수를 하나하나 읽어들이면서 읽어들일 때마다 누계(accumulation)를 계산합니다.

  • 평균을 구할 때 정수 나누기 정수로 계산하면 결과도 정수가 되므로 소수점 아래가 사라집니다. 이렇게 되지 않게 하려면 분모나 분자 중 적어도 하나는 실수이어야 합니다. (정수와 실수간 이항 연산을 하면 먼저 정수로 소수로 변환된 후 소수연산이 됩니다.) 그러니까 나눗셈을 하기 전에 분모나 분자 중 어느 하나, 혹은 둘 다 double 타입으로 강제 형변환해주면 됩니다.

  • 소수점 아래 세째 자리에서 반올림하여 소수점 아래 둘째 자리까지 보이도록 출력하는 방법

    System.out.print 대신 System.out.printf 명령을 사용한다.

    System.out.printf 문장은 아래와 같은 형식으로 적는다.

    System.out.printf("어쩌구%.2f저쩌구", value);
    

    아래와 같이 여러 개의 값을 출력할 수도 있다. 단, 형식지정자 개수와 value 개수가 같아야 한다.

    System.out.printf("어쩌구%.2f저쩌구", value);
    System.out.printf("어쩌구%.2f저쩌구%.2f얼씨구", value1, value2);
    System.out.printf("어쩌구%.2f저쩌구%.2f얼씨구%.2f절씨구 ", value1, value2, value3);
    

           

P2 (모듈러스 계산, 반복문)

1 이상 100 이하 정수들 중 3의 배수들의 합을 구하여 출력하는 프로그램을 작성하시오. for 반복문을 사용하여 아래 두 가지 방식으로 계산합니다.

  1. 인덱스 i를 1씩 증가시키면서 i가 3의 배수일 때만 더한다. (조건문 사용)
  2. 인덱스 i를 3씩 증가시키면서 i를 더한다.

클래스 이름은 ThreeMultiples로 지으시오. 출력 예는 아래와 같습니다.

title

       

P3 (모듈러스 계산, 반복문, 조건문)

키보드로 입력된 정수의 배수를 출력하는 프로그램을 작성하시오. 단 1 이상 100 이하의 수만을 출력하도록 하시오. 사용자는 1 이상 정수만을 입력한다고 가정합니다.

클래스 이름은 Multiples로 지으시오. 실행화면은 아래와 같습니다.

title

title

힌트 : 1부터 100까지의 수들을 차례로 검사하여 주어진 수의 배수들만 출력한다.

       

P4 (반복문, 조건문)

키보드로부터 양의 정수 한 개를 입력 받아 0부터 그 수까지 오름차순으로 출력하는 프로그램을 작성하시오.

클래스 이름은 Increase로 지으시오. 단, 한 줄에는 10개의 숫자만 출력하게 하고, 숫자와 숫자 사이에는 탭 문자(\t)를 넣으시오.

title

title

힌트

아래와 같이 코드를 작성하면 모든 숫자가 한 줄로 출력된다.

for(int i=0; i <= 정해진 ; i++)
    //i와 탭 문자를 출력

숫자를 10개 출력한 후에는 그 다음 줄로 넘어가 출력을 계속하게 하려면, 숫자를 출력할 때마다 숫자 출력 후에 다음 줄로 넘어갈 때가 됐는지 살펴봐야 한다. 다음 줄로 넘어갈 때가 됐으면 새줄문자(new line)를 추가로 출력한다. 이를 코드로 적으면 아래와 같다.

for (int i = 0; i <= 정해진 ; i++) {
    //i와 탭 문자를 출력한다.
	if (다음 줄로 넘어가야 하는 때가 되었나?)
		//새로운 줄문자(new line)을 출력한다.
}

위 코드에서 (다음 줄로 넘어가야 하는 때가 되었나?)이라는 조건문을 어떻게 표현할 것인가 이것이 이 문제의 핵심이다. 조건문은 boolean expression이어야 한다. 즉 그 값이 true 혹은 false인 표현식(expression)이어야 한다.

Boolean expression 예 : i > 10 i > 10   i <3 i % 10 == 0

다음 줄로 넘어가야 하는 때가 되었나?)라는 조건문을 어떻게 표현할 것인가?

첫 방법: i의 끝자리 수가 9이면 (i를 10으로 나눈 나머지가 9이면) 다음 줄로 넘어갈 때가 된 것이다. 이렇게 판단.

두 번째 방법: 별도의 int 타입 변수 count를 선언하고 숫자를 출력할 때마다 count를 증가시킨다. count가 10이 되면 다음 줄로 넘어갈 때가 된 것이다. 다음 줄로 넘어가면 count를 0으로 리셋하여 1부터 다시 세기 시작한다.

추가힌트

첫 번째 방법

for (int i = 0; i <= 정해진 ; i++){
     //i와 탭 문자를 출력;
     if (i를 10으로 나눈 나머지가 9인가?){
     	System.out.println(); // 한 줄 내려간다. 혹은 System.out.print(“\n”);
     }
}

두 번째 방법

//int 타입 변수 count를 선언하고 0으로 초기화한다.
for (int i = 0; i <= 정해진 ; i++){
    //i와 탭 문자를 출력;
    //count를 1만큼 증가시킨다;
     if (count가 10이면) {
		System.out.println(); // 한 줄 내려간다. 혹은 System.out.print(“\n”);
         count를 0으로 리셋;
     }
}

위와 같이 두 방법을 모두 구현했을 때의 두 번 출력이 되는 모습

img

img

**최종적으로 제출하는 프로그램은 위 그림과 같이 첫 방법에 의한 출력이 한 번, 두 번째 방법에 의한 출력이 한 번, 총 두 번의 출력을 해야 합니다!! **

       

P5 (반복문)

키보드로부터 양의 정수 한 개를 입력 받아 그 수부터 0까지 내림차순으로 출력하는 프로그램을 작성하시오.

클래스 이름은 Decrease로 지으시오. 실행 화면은 아래와 같습니다.

img

img

       

P6 (반복문, 조건문)

키보드로부터 양의 정수 한 개를 입력 받아 그 수부터 0까지 내림차순으로 출력하는 프로그램을 작성하시오. 단, 한 줄에는 10개의 숫자만 출력하게 하고, 숫자와 숫자 사이에는 탭 문자를 넣으시오.

클래스 이름은 Decrease2로 지으시오. 실행 화면은 아래와 같습니다.

img

img

P4 문제처럼 두 가지 방법으로 코드를 작성하시오. 출력은 아래와 같습니다.

아래 세 가지 경우 모두 잘 작동하는지 확인하시오.

img

img

img

**최종적으로 제출하는 프로그램은 위 그림과 같이 첫 방법에 의한 출력이 한 번, 두 번째 방법에 의한 출력이 한 번, 총 두 번의 출력을 해야 합니다!! **

       

P7 (반복문, 조건문)

키보드로부터 정수 두 개를 입력 받아 두 수 사이에 있는 모든 짝수들의 합을 구하여 화면에 출력하는 프로그램을 작성하시오. 클래스 이름은 EvenSum으로 지으시오. 입력 받은 두 수 각각도 짝수라면 합에 포함되도록 하시오.

사용자는 음수나 0을 입력할 수도 있어야 합니다. 단, 두 수중 작은 수를 먼저 입력한다고 가정합니다. 실행 화면은 아래와 같습니다.

img

img

img

참고: (영어) - 변수 이름을 지을 때 이 이름을 사용하시오. 변수 이름의 첫 글자는 소문자!

어떤 범위에서 가장 작은 값 = lower bound –> lowerBound, 어떤 범위에서 가장 큰 값 = upper bound –> upperBound

       

P8 (반복문)

사용자가 입력한 여러 개의 0 이상 정수들의 평균을 구하는 프로그램을 작성하시오. 이 프로그램은 아래와 같이 작동합니다.

  • 사용자에게 여러 개의 0 이상 정수를 입력하도록 하고 사용자가 입력하는 정수들을 읽어 들이면서 읽어 들인 정수들을 차례로 더하여 합을 구한다.
  • 사용자가 음의 정수(negative integer)를 입력하면 입력이 끝나는 것으로 한다.
  • 읽어 들인 수들의 평균을 계산하여 화면에 출력한다. 소수점 아래 셋째 자리에서 반올림하여 소수점 둘째 자리까지 출력한다.
  • 사용자가 처음부터 음의 정수를 입력하면 합과 평균을 출력하지 않는다.

클래스 이름은 SumAverage2로 지으시오. 실행화면은 아래와 같습니다.

img

img

img

       

P9 (이중 반복문)

지정된 갯수의 행과 열을 갖는 표를 인쇄하는 프로그램을 작성하시오. 행 갯수와 열 갯수는 사용자가 지정하도록 하시오. 사용자는 행과 열 갯수로 항상 1 이상의 정수를 입력한다고 가정합니다.

클래스 이름은 Table로 지으시오. 실행화면은 아래와 같습니다.

img

img

img

참고: (영어) - 변수 이름을 지을 때 이 이름을 사용하시오 : 행 = row, 열 = column

       

P10 (이중반복문)

구구단 표를 인쇄하는 프로그램을 작성하시오.

클래스 이름은 MultiplicationTable로 지으시오. 실행화면은 아래와 같습니다.

img

“1x1=1”과 “1x2=2” 사이에는 탭 문자(‘\t’)를 넣으시오. 그 이후로도 사이 사이에 탭 문자를 넣으시오.