GO

GO언어 기초 : 반복문(for)

SeaPlus 2021. 7. 3. 15:09

for문 기초

package main

import "fmt"

func main() {
	sum := 0


	// for문은 초기식, 조건식, 조건 변화식 으로 구성되어있다.
	for i := 1; i <= 10; i++ {
		sum += i
	}
	fmt.Println("1부터 10까지 정수 합계:", sum)
}

/////////////////////////////////////////////////////////////////////////////////////////

// i를 1로 초기 선언  -> 초기식
// i가 10보다 작거나 같을때까지 -> 조건식
// i를 1씩 계속 늘린다 ->  조건 변화식

//for문을 통해 반복할 명령은? => sum 에 i 값을 대입한다.

//for문 계산과정
// i = 1일때 sum 1
// i = 2 일때 sum은 1이고 이때 새로 선언된 i=2값을 더한다 -> sum = 3
// i = 3 일때 sum은 3이고 이때 새로 선언된 i=3값을 더한다 -> sum = 6 
// i = 4 일때 sum은 6이고 이때 새로 선언된 i=4값을 더한다 -> sum = 10
// i = 5 일때 sum은 10이고 이때 새로 선언된 i=5값을 더한다 -> sum = 15 
// i = 6 일때 sum은 15이고 이때 새로 선언된 i=6값을 더한다 -> sum = 21 
// i = 7 일때 sum은 21이고 이때 새로 선언된 i=7값을 더한다 -> sum = 28 
// i = 8 일때 sum은 28이고 이때 새로 선언된 i=8값을 더한다 -> sum = 36
// i = 9 일때 sum은 36이고 이때 새로 선언된 i=9값을 더한다 -> sum = 45
// i = 10 일때 sum은 45이고 이때 새로 선언된 i=10값을 더한다 -> sum = 55



/////////////////////////////결과//////////////////////////

1부터 10까지 정수 합계: 55

● for문은 (초기식, 조건식, 조건변화식) 으로 구성된 반복문이다.

 

 

 


조건식만 쓰는 for문

package main

import "fmt"

func main() {
	n := 2

	for n < 100 {
		fmt.Printf("count %d\n", n) // n *=  2 를 계산하기전에 먼저 출력한다.

		n *= 2  // n의 값이 100을 넘어가기 전까지 계속해서 2씩 곱한다.
	}
}



////////////////////////////////////결과//////////////////////////////////

count 2
count 4
count 8
count 16
count 32
count 64

● G0언어 에서는 while 문이 없어 for문을 while 과 같은 형식으로 사용 가능 하다.

 

for {
   fmrt.Printf("무한루프 입니다. \n")
   }

 


 

for range문

package main

import "fmt"

func main() {
	var arr [6]int = [6]int{1, 2, 3, 4, 5, 6}

	for index, num := range arr {
		fmt.Printf("arr[%d]의 값은 %d입니다.\n", index, num)
	}
}


///////////////////결과 /////////////////////


arr[0]의 값은 1입니다.
arr[1]의 값은 2입니다.
arr[2]의 값은 3입니다.
arr[3]의 값은 4입니다.
arr[4]의 값은 5입니다.
arr[5]의 값은 6입니다.

● for range 문 에서의 index는 배열의 주소 번호, num 는 변수이며 해당 주소에 들어있는 값 이다.

 

● index문은 - 로 대체 및 출력 안할수 있다. 

 

 


for 를 활용한 구구단

문제:

  • 단 수를 입력받을 int형 변수 dan을 선언합니다.
  • 사용자로부터 dan을 입력받습니다.
  • 7 X 3 = 21 형태로 출력합니다.
  • 1부터 9까지 곱셈을 출력합니다.

 

package main

import "fmt"

func main() {
	var dan int
	fmt.Scan(&dan)	
	
	for i:=1; i<10; i++{
		fmt.Printf("%d X %d = %d\n", dan, i, dan*i)
	}
}




//////////////////결과////////////////////

입력: 
1


출력:
1 X 1 = 1
1 X 2 = 2
1 X 3 = 3
1 X 4 = 4
1 X 5 = 5
1 X 6 = 6
1 X 7 = 7
1 X 8 = 8
1 X 9 = 9

 

 


for 를 활용한 빛나는 이등변삼각형

 

문제:

  • 사용자로부터 이등변삼각형의 빗변을 제외한 같은 값의 두 변의 길이를 입력받습니다.
  • 빗면이 * 모양으로 빛나는 이등변 삼각형이 출력됩니다.
  • 기호와 기호 사이는 띄어쓰기를 합니다.

 

package main

import "fmt"

func main(){
	var a int
	
	fmt.Scanf("%d", &a) 
    //scanf와 같은 콘솔입력 함수는 인자를 포인터 주소값로 받는다.
    // a 로 선언 ->  a값을 입력시 이는 a의 메모리 값이 아닌 주소값으로 선언된다.
    // &a 로 선언 -> a의 주소는 그대로 있고 a의 메모리 값이 선언된다.
    
	for i:=0; i < a; i++{
		for j:=0; j < i; j++{
			fmt.Printf("%c ", 'o')
		}
		fmt.Printf("%c \n", '*')
	}
}



/////////////////결과///////////////

입력:
10


출력:
* 
o *
o o *
o o o *
o o o o *
o o o o o *
o o o o o o *
o o o o o o o *
o o o o o o o o *
o o o o o o o o o *

scanf와 같은 콘솔입력 함수는 인자를 포인터 주소값로 받는다.

  • a 로 선언 ->  a값을 입력시 이는 a의 메모리 값이 아닌 주소값으로 선언된다.

 

  • &a 로 선언 -> a의 주소는 그대로 있고 a의 메모리 값이 선언된다.