조건문과 반복문의 기본 문법 이해

JongseokLee·2021년 7월 25일
1
post-thumbnail

조건문과 반복문의 기본 문법 이해


제어문이란?

프로그램 명령이 실행되는 순서를 제어하는 명령문

제어문의 분류

조건문 : 조건이 참인지 거짓인지에 따라서 실행 명령을 분리하는 것
반복문 : 조건이 참인 동안 명령들을 반복 수행하는 것

제어문 구조의 종류

순차구조 : 기본 구조로 명령문 하나씩 위에서 아래로 순차적으로 실행
선택구조 : 조건식의 참과 거짓에 따라 명령문들을 분리하여 실행
반복구조 : 조건식이 참인 동안 여러문들을 실행

if조건문 이해하기

참과 거짓을 구분하여 실행하는 명령어 블록은 중괄호({})로 표시
참과 거짓을 구분하여 실행하는 명령어가 한 개일 경우는 중괄호({}) 생략 가능
if 조건문의 명령어 블록 내부에 또다시 if 조건문을 사용할 수 있음(중첩 가능)
중괄호({}) 내부에 선언된 변수는 중괄호({})안에서만 사용가능ㄴ
중괄호({}) 외부에 선언된 변수는 내부에서 사용할 수 있음
조건식에는 세미콜론(;)을 붙이지 않음

switch 조건문 이해하기

if()~else if()문 또는 if()~else if()~else문의 복잡성의 단순화
case문, break문, default문으로 구성됨

반복문이란?

반복적으로 명령문을 실행시킬 수 있는 문장(중복성 제거, 간결해 짐)
반복문 내부에 또 다른 반복문을 사용할 수 있음(중첩 사용)
반복문의 종류

-for문:반복 횟수가 정해져 있는 경우
-while문, do~while문:반복 횟수가 정해지지 않는 경우

for 반복문 이해하기

초기식 : 반복하고자 하는 블록을 반복하기 전에 초기식을 설정하는 수식
조건식 : 반복여부를 판단하는 수식으로 조건식이 참인 경우 블록을 실행하고, 거짓인 경우 반복을 종료
증감식 : 반복 블록을 한 번 실행한 후에 실행되는 증감 수식

while 반복문 이해하기

반복 횟수가 미리 정해지지 않은 경우 주로 사용
조건식이 참인 동안 실행되는 반복문
초기식은 while 반복문이 시작되기 전에 선언
증감식은 while 반복무늬 중괄호({})의 마지막에 선언
초기식과 증감식은 필요에 따라 생략 가능

do~while 반복문이란?

반복횟수가 미리 정해지지 않은 경우 주로 사용
초기식은 do~while 반복문이 시작되기 전에 선언
증감식은 do~while 반복문의 중괄호({})의 마지막에 선언
초기식과 증감식은 필요에 따라 생략 가능
조건식과 상관없이 중괄호({}) 내부의 명령문들이 먼저 한번 실행된 후 조건식이 실행됨 (while 반복문과의 차이점)

IF문 실습


import java.util.Scanner;

public class ConIf {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		int input;

		// 단순 if()문
		System.out.print("[단순 if()문 연습] 숫자를 입력하세요 : ");
		input = s.nextInt();
		if (input == 10) 
		{
			input += 2;
		}
		input += 3;
		System.out.println("계산된 값은 :"+input);
	/* if문 단순화
	    if(input == 10) {
	        input +=2;
		}
		if(input == 10) 
		   input += 2;
		if(input == 10) input += 2;
	*/

		// if()~else문
		System.out.print("[if()~else문 연습] 숫자를 입력하세요 : ");
		input = s.nextInt();
		if (input < 10)
		{
			input += 2;
		}
		else
		{
			input -= 2;
		}
		input += 3;
		System.out.println("계산된 값은 : "+input);
	/*	if()~else 문 단순화
	    if (input < 10) {
			input += 2;
		} else {
			input -= 2;
		}
		if (input < 10) 
		      input += 2;
		else 
		     input -= 2;
		if (input < 10) input += 2;
		else input -= 2;
	*/

		// if()~else if()문
		char result = 'F';
		System.out.print("[if()~else if()문 연습] 숫자(점수)를 입력하세요 : ");
		input = s.nextInt();
		if (input >= 90)
		{
			result = 'A';
		}
		else if( input >= 80)
		{
			result = 'B';
		}
		else if (input >= 70)
		{
			result = 'C';
		}
		System.out.println(input+" 점은 "+result+" 학점입니다.");

		// if()~else if() ~ else 문
		System.out.print("[if()~else if() ~ else 문 연습] 숫자(점수)를 입력하세요 : ");
		input = s.nextInt();
		if (input >= 90)
		{
			result = 'A';
		}
		else if (input >= 80)
		{
			result = 'B';
		}
		else
		{
			result = 'F';
		}
		System.out.println(input+" 점은 "+result+" 학점입니다.");
		
		s.close();
	}

}

<Result>
[단순 if()문 연습] 숫자를 입력하세요 : 60
계산된 값은 :63
[if()~else문 연습] 숫자를 입력하세요 : 80
계산된 값은 : 81
[if()~else if()문 연습] 숫자(점수)를 입력하세요 : 81
81 점은 B 학점입니다.
[if()~else if() ~ else 문 연습] 숫자(점수)를 입력하세요 : 91
91 점은 A 학점입니다.

Switch문 실습



import java.util.Scanner;

public class ConSwitch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		
		// 숫자를 문자로 변경하는 프로그램
		int input;
		System.out.print("[숫자를 문자로 변경] 숫자를 입력하세요(1~3) : ");
		input = s.nextInt();
		switch (input) 
		{
		case 1: 
			System.out.println("ONE");
			break;
		case 2:
			System.out.println("TWO");
			//break;                // 생략하면 어떻게 될까요?
		case 3:
			System.out.println("THREE");
			break;
		default:
			System.out.println("ERROR");
			break;
		}

		// 홀수와 짝수를 구분하는 프로그램
		System.out.print("[홀수와 짝수 구분하기] 숫자를 입력하세요 : ");
		input = s.nextInt();
		switch (input % 2)
		{
		case 0:
			System.out.println(input+"는 짝수입니다.");
			break;
		case 1:
			System.out.println(input+"는 홀수입니다.");
			break;
		}

	}

}

<Result>
[숫자를 문자로 변경] 숫자를 입력하세요(1~3) : 1
ONE
[홀수와 짝수 구분하기] 숫자를 입력하세요 : 2
2는 짝수입니다.

for문 실습

public class ConFor {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("[동일한 문장 반복하여 3번 출력하기]");
		for (int cnt = 0; cnt < 3; cnt++)  
		{
			System.out.println("Hello");
		}
//		System.out.println("Hello");
//		System.out.println("Hello");
//		System.out.println("Hello");
//		for (int cnt = 0; cnt < 3; cnt++)
//	 		 System.out.println("Hello");

		System.out.println("[1에서 10까지 출력, 합계출력]");
		int sum = 0;
		for (int cnt = 1; cnt <=10 ; cnt++)
		{
			System.out.print(cnt+" ");
			sum += cnt;
		}
		System.out.println("1~10까지의 합계는 "+sum);

		System.out.println("[10에서 1까지 출력]");
		for (int cnt = 10; cnt > 0; cnt--)
		{
			System.out.print(cnt+" ");
		}
		System.out.println();

		System.out.println("[1에서 10까지 짝수만 출력]");
		for (int cnt = 2; cnt <= 10; cnt+=2)
		{
			System.out.print(cnt+" ");
		}
		System.out.println();

		System.out.println("[1에서 10까지 홀수만 출력]");
		for (int cnt = 1; cnt <= 10; cnt+=2)
		{
			System.out.print(cnt+" ");
		}
		System.out.println();

		System.out.println("[구구단 2단 출력]");
		for (int cnt = 1; cnt <= 9; cnt++)
		{
			System.out.println("2 * "+cnt+" = "+(2*cnt));
		}

		System.out.println("[구구단 출력]");
		for (int dan = 2; dan <= 9; dan++)
		{
			for (int cnt = 1; cnt <= 9; cnt++)
			{
				System.out.print(dan+"*"+cnt+"="+(dan*cnt)+" ");
			}
			System.out.println();
		}
	}

}

<Result>

[동일한 문장 반복하여 3번 출력하기]
Hello
Hello
Hello
[1에서 10까지 출력, 합계출력]
1 2 3 4 5 6 7 8 9 10 1~10까지의 합계는 55
[10에서 1까지 출력]
10 9 8 7 6 5 4 3 2 1 
[1에서 10까지 짝수만 출력]
2 4 6 8 10 
[1에서 10까지 홀수만 출력]
1 3 5 7 9 
[구구단 2단 출력]
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
[구구단 출력]
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 

while문 실습


import java.util.Scanner;

public class ConWhile {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		
	    int cnt = 1;
	    int sum = 0;

	    System.out.println("[1에서 10까지 출력하고, 합계 출력하기]");
	    while (cnt <= 10) {
	        System.out.print(cnt+" ");
	        sum += cnt++;
	    }
	    System.out.println("누적합계는 "+sum+"입니다.");

	    System.out.println("[1에서 100까지 누적합계가 100이 넘어가는 숫자 출력하기]");
	    cnt = 0;
	    sum = 0;
	    while (sum < 100)
	    {
	        cnt++;
	        sum += cnt;
	    }
	    System.out.println("count = "+cnt+" sum = "+sum);

	    System.out.println("[정수값을 반복해서 입력받아 화면에 출력(0입력시 종료)]");
	    int input;
	    while (true)  // 무한반복
	    {
	        System.out.print("숫자를 입력하세요(0은 종료) : ");
	        input = s.nextInt();
	        if (input == 0) break;   // 0 입력시 반복문 종료, 0이 아니면 반복
	        System.out.println("입력받은 값은 = "+input);
	    }

	    System.out.println("[입력받은 값이 짝수이면 누적 합계, 홀수이면 다시 입력 받기(0입력시 종료)]");
	    input = sum = 0;
	    while (true)
	    {
	        System.out.print("숫자를 입력하세요(0은 종료) : ");
	        input = s.nextInt();
	        if (input == 0) break;   // 0 입력시 반복문 종료, 0이 아니면 반복
	        if ((input % 2)==1) continue; // 홀수이면 반복
	        sum += input;  // 짝수인 경우에는 누적합계
	    }
	    System.out.println("짝수 합계는 "+sum);


	}

}

<Result>

[1에서 10까지 출력하고, 합계 출력하기]
1 2 3 4 5 6 7 8 9 10 누적합계는 55입니다.
[1에서 100까지 누적합계가 100이 넘어가는 숫자 출력하기]
count = 14 sum = 105
[정수값을 반복해서 입력받아 화면에 출력(0입력시 종료)]
숫자를 입력하세요(0은 종료) : 

조건문 심화

1)do~while 문으로 메뉴를 구현하시오
-메뉴:구구단(1), 누적합계(2), 성적(3), 종료(0)
2)구구단은 2단에서 9단까지만 실행하시오.(for문 사용)
3)누적합계는 1부터 누적합계를 하시오.(while문 사용)
4)성적등급을 출력하시오.(A~F)(switch~case문 사용)

	import java.util.Scanner;

	public class ConTotal {

		public static void main(String[] args) {
			// TODO Auto-generated method stub
			Scanner s = new Scanner(System.in);
			do {
				System.out.print("구구단(1), 누적합계(2), 성적(3), 종료(0) : ");
				int menu = s.nextInt();
				if( menu == 0 ) break;  // 종료
				else if( menu == 1 ) {  // 구구단
					System.out.print("단수를 입력하시오 : ");
					int dan = s.nextInt();
					if(dan>=2 && dan <=9) {  // 단수가 2~9 사이이면
						for(int i=1; i<=9; i++)  // 구구단 출력
							System.out.print(dan+"*"+i+"="+(dan*i)+" ");
						System.out.println();
					} else System.out.println("2에서 9사이를 입력하시오!!");
				} else if( menu == 2 ) { // 누적합계
					System.out.print("누적합계를 원하는 최종값을 입력하시오 : ");
					int last = s.nextInt();
					int sum = 0;
					int cnt = 1;
					while(cnt <= last) sum += cnt++;
					System.out.println("1에서 "+last+"까지의 누적합계는 "+sum+"입니다.");
				} else if( menu == 3 ) { // 성적
					System.out.print("점수를 입력하시오 : ");
					int jumsu = s.nextInt();
					switch(jumsu/10) {
					case 10:
					case 9:
						System.out.println("A학점!!");
						break;
					case 8:
						System.out.println("B학점!!");
						break;
					case 7:
						System.out.println("C학점!!");
						break;
					case 6:
						System.out.println("D학점!!");
						break;
					default:
						System.out.println("F학점!!");
						break;
					}
				}
			} while(true);
		}
}

<Result>

구구단(1), 누적합계(2), 성적(3), 종료(0) : 1
단수를 입력하시오 : 23
2에서 9사이를 입력하세요!

구구단(1), 누적합계(2), 성적(3), 종료(0) : 1
단수를 입력하시오 : 3
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
구구단(1), 누적합계(2), 성적(3), 종료(0) : 2
누적합계를 원하는 최종값을 입력하시오 : 100
1에서 100까지의 누적합계는 5050입니다.
구구단(1), 누적합계(2), 성적(3), 종료(0) : 3
점수를 입력하시오 : 98
A학점!!
구구단(1), 누적합계(2), 성적(3), 종료(0) : 0
profile
DataEngineer Lee.

0개의 댓글