알고리즘, 자료구조 - 선택 정렬 

 

 

선택 정렬이란?

 

리스트 안의 원소들 중 최솟값을 찾아 리스트의 앞쪽으로 보내고, 그 뒤에 남은 원소들에 대해서 반복적으로 최솟값을 찾아 정렬하는 알고리즘이다. 간단한 알고리즘이지만 성능면에서는 느리기 때문에 좋지 않은 방식이다.

 

- 선택 정렬 알고리즘의 구체적인 개념

1. 첫 번째 원소를 선택, 그 뒤의 원소들과 차례대로 비교해 최솟값을 찾는다.

2. 찾은 최솟값을 첫 번째로 옮긴다.

3. 두 번째 원소를 선택, 3번째 원소부터 끝까지 비교해 최솟값을 찾는다.

4. 위의 과정들을 계속 반복한다.

 

위의 알고리즘 방식을 보면 코드상에서 2개의 반복문이 필요하고 이는 시간 복잡도 면에서 O(n^2)의 시간이 걸린다.

 

- 시간 복잡도

0번 요소: (n-1) 번 비교

1번 요소: (n-2) 번 비교

 ...

n-2번 요소: 1번 비교

n-1번 요소: 0번 비교

 

전체 비교 횟수는 0+1+2+3+...+n-2+n-1 = (n-1)(n-1+1) / 2 가 된다. n의 수가 커지면 결국 n^2이 큰 영향을 가지고 나머지는 무시할 수 있다. 따라서 시간 복잡도는 O(n^2)가 된다. 

 

<출처: 위키피디아>

 

예제

def select_sort(li):
    n = len(li)

    for i in range(0, n-1): #0번째~n-2번(뒤에서 2번째)
        min_idk = i
        for j in range(i+1, n): #비교하려는 값 뒤부터 끝까지 비교
            if(li[j] < li[min_idk]): # 비교하려는 값보다 뒤에 값이 작다면
                min_idk = j 		 
        li[i], li[min_idk] = li[min_idk], li[i] # 최솟값 위치 변경 

    return li


print(select_sort([2, 4, 5, 1, 3])) # [1, 2, 3, 4, 5]

 

 
 

 

반응형

 알고리즘, 자료구조 - 순차 탐색(선형 탐색) 

 

순차 탐색이란?

 

리스트 또는 배열 안에 있는 첫 번째 자료부터 하나씩 비교하면서 원하는 데이터를 찾아가는 알고리즘이다. 데이터를 따로 조작할 필요가 없어 단순하지만 비효율적이라는 단점을 지니고 있다. 추가로 순차 탐색은 단방향으로 탐색을 수행하기 때문에 선형 탐색(Linear Search)라고도 부른다.

순차 탐색은 최악의 경우에 최대 n번의 비교를 필요로 하기에 시간 복잡도는 O(n)이 된다.

이는 데이터가 n개가 되면 그에 따른 연산 수도 n개를 따라가기 때문에 자료수가 많아질수록 연산의 속도가 느리다는 단점이 있다.

 

 

 

예제

 

# 리스트에서 특정 숫자의 위치 찾기

def search_num(a, x):
	n = len(a)
    for i in range(0, n): #리스트 a의 모든 값에 대해 반복
    	if x == a[i] : 	# 찾는 숫자와 값이 일치하면
        	return i	# 인덱스 값 반환
    
    return -1
    
a = [17, 92, 18, 33, 58]
print(search_num(a, 18)) # 2 출력
print(search_num(a, 900)) # -1 출력(해당 값이 없기에)

 

# 학생 번호를 입력시 해당하는 학생의 이름을 반환
def find_student(number, stuNo, stuName):
    num = len(stuNo)
    for i in range(0, num):
        if(stuNo[i] == number):
            return stuName[i]

    return "해당 학생은 없습니다."


stu_no = [39, 14, 67, 103]
stu_name = ["Justin", "John", "Mike", "Summer"]

print(find_student(39, stu_no, stu_name)) #출력 - "Justin"
 

 

반응형

[AJAX] - Asynchronous JavaScript and XML

웹에 데이터를 갱신할 때, 브라우저 새로고침 없이 서버로부터 데이터를 받는 것이 좋겠다는 생각에서 시작됐으며, 더 좋은 UX를 제공할 수 있는 기술이다. 간단하게 AJAX는 서버와 통신하기 위해 XMLHttpRequest 객체를 사용하는 것을 말한다. JSON, XML, HTML 그리고 일반 텍스트 형식 등을 포함한 다양한 포맷을 주고받을 수 있습니다. 요즘 가장 많이 사용되는 데이터 포맷 형식은 JSON이다.

 

[특징]

1. 페이지 새로고침 없이 서버에 요청할 수 있다.

2. 서버로부터 데이터를 받고 작업을 수행한다.

 

[사용법]

1. XMLHttpRequest 객체를 이용한 방법

2. Fetch API를 이용한 방법 - XHR보다 간단하게 코드를 짜 서버와 통신을 쉽게 할 수 있다. 하지만 익스플로러에서는 적용이 되지 않는다고 하니, 참고해서 사용해야 한다.

 

 

[예제 - XHR(1)]

function ajax(data) {
 var xhr = new XMLHttpRequest();
 xhr.addEventListener("load", function() {
   console.log(this.responseText);
 });    
 xhr.open("GET", "http://www.example.org/getData?data=data");//parameter를 붙여서 보낼수있음. 
 xhr.send();
}

 

XMLHttpRequest객체를 생성해서, open메서드로 요청을 준비하고, send메서드로 서버로 보낸다.

요청처리가 완료되면(서버에서 응답이 오면) load이벤트가 발생하고, 콜백 함수가 실행된다.

콜백 함수가 실행될 때는 이미 ajax함수는 반환하고 콜 스택에서 사라진 상태다.

이는 setTimeout함수의 콜백함수의 실행과 유사하게 동작하는 '비동기'로직이다.

 

 

 

[XMLHttpRequest 객체의 메서드]

 

1. open 메서드

 

- 첫 번째 파라미터 

: HTTP 요구 방식(request method) ─ GET, POST, HEAD 중의 하나이거나 당신의 서버에서 지원하는 다른 방식이다.(반드시 대문자로)

 

- 두 번째 파라미터

: 요구하고자하는 URL 주소

 

- 세 번째 파라미터(옵션)

: 요구가 비동기식(Asynchronous)으로 수행될지를 결정한다. True(기본값)이면 자바스크립트 함수가 지속적으로 수행될 수 있어 서버로부터 응답을 받기 전에도 유저와 페이지의 상호작용이 계속 진행된다. 이것이 AJAX 의 첫 번째 A (Asynchronous : 비동기성)이다.

 

 

2. send 메서드

 

: GET방식으로 요청을 하는 경우에는 파라미터가 없다.

 

: send() 메소드의 파라미터는 POST 방식으로 요구한 경우 서버로 보내고 싶은 어떠한 데이터라도 가능하다. 데이터는 서버에서 쉽게 parse 할 수 있는 형식(format)이어야 한다.  JSON, XML, SOAP 등과 같은 다른 형식(format)도 가능하다.

예시) "name=value&anothername="+encodeURIComponent(myVar)+"&so=on" 

 

 

 

[Response 속성들]

1. readyState

 

  • 0 (uninitialized) - (request가 초기화되지 않음)

  • 1 (loading) - (서버와의 연결이 성사됨)

  • 2 (loaded) - (서버가 request를 받음)

  • 3 (interactive) - (request(요청)을 처리하는 중)

  • 4 (complete) - (request에 대한 처리가 끝났으며 응답할 준비가 완료됨)

2. status

 

  • 200: "OK"

  • 403: "Forbidden"

  • 404: "Page not found"

3. statusText

: "OK" or "Not Found" 반환

 

 

 

 

[예제 - XHR(2)]

function getFactAjax() {
        let number = numberInput.value;

        let xhr = new XMLHttpRequest();
        xhr.open("GET", "http://numbersapi.com/" + number);// url에 값을 추가

        xhr.onload = function () {
          if (this.status == 200 && number != "") {
            fact.style.display = "block";
            factText.innerText = this.responseText;
          }
        };

        xhr.send();
        }

 

[예제 - Fetch]

function getFactFetch() {
        let number = numberInput.value;

        fetch("http://numbersapi.com/" + number)
          .then((response) => response.text())
          .then((data) => {
            if (number != "") {
              fact.style.display = "block";
              factText.innerText = data;
            }
          })
          .catch((err) => console.log(err));
      }

 

반응형

 파이썬 기초 문법 - 자료형 

 

1. 숫자 자료형

 

파이썬의 숫자 자료형은 '정수, 실수형, 2진수, 8진수, 16진수'로 표현할 수 있다.

'''
        정수           : -10, 0, 10
        실수형         : -1.1, 10.123
        2진수(binary)  : 0b10, 0B10
        8진수(octal)   : 0o10, 0O10
        16진수(hexadecimal) : 0x10, 0X10
'''

아래에 간단한 예제를 보자.

print("[기본 숫자형]")
print("정수 :", 10, -10, 0)
print("실수 :", -1.1, 10.123)
# print() 함수는 숫자를 10진수로 출력
print("2진수 :", 0b100, 0B100)
print("8진수 :", 0o10, 0O10)
print("16진수 :", 0x10, 0X10)

결과는 다음과 같다.

정수 : 10 -10 0
실수 : -1.1 10.123
2진수 : 4 4
8진수 : 8 8
16진수 : 16 16

 

 

2. 문자열

 

파이썬에서 문자열을 만드는 방법은 4가지가 있다.

  • 1. 큰 따옴표 1개

  • 2. 작은따옴표 1개

  • 3. 큰 따옴표 3개

  • 4. 작은 따옴표 3개

print("1. happy day")
print('2. happy day')
print("""3. happy day""")
print('''4. happy day''')

결과는 다음과 같다.

1. happy day
2. happy day
3. happy day
4. happy day

만약 여러 줄의 문자열을 출력하고 싶다면 따옴표 3개짜리를 이용하면 된다.

print("""안녕하세요
파이썬입니다.""")

hello = '''반가워요
파이썬!'''
print(hello)

문자열을 사용하고 출력할 때 사용되는 '이스케이프 문자'가 있는데, 이스케이프 문자는 문자열 안에서 특수한 기능을 가지는 문자들을 말한다. 이스케이프 문자는 역슬래시(\)로 시작해 사용한다. 아래에 여러 이스케이프 문자들이 있다.

'''
	\n : 개행(줄바꿈)
	\t : tab키를 누른 만큼 간격 띄우기
	\\ : \ 하나를 문자로 사용
	\' : ' 하나를 문자로 사용
	\" : " 하나를 문자로 사용
'''

 

 

문자열 연산하기

문자열을 연산할 때 주의할 것이 문자열끼리만 연산이 가능하다는 것이다. 예를 들어 정수와 문자열 사이의 연산을 하게 되면 오류가 발생한다. 그러니 이 점을 주의해서 사용해야 한다.

문자열 연산은 2가지 경우가 있다.

#1. + : 연결
print("안녕" + "하세요")
str1 = "안녕"
str2 = "하세요"
print(str1 + str2)

#2. * : 반복
print("안녕" * 5)
str3 = "곱셈" * 3 # 연산 결과를 만든 후 변수에 대입
print(str3)

 

 

문자열 인덱싱(Indexing)

인덱싱(Indexing)이란 index 색인, '무언가를 가리킨다'는 것으로, 문자열에서 특정 글자를 뽑아내어 사용하는 것이다. 특정 글자를 찾을 때, '순서'를 사용하는데 이 때 인덱스 번호를 이용한다. 프로그래밍에서 순서는 0부터 시작을 하며 음수일 경우 뒤에서부터 순서를 세는 방식이다.

 

 

문자열 슬라이싱

문자열 슬라이싱은 문자열은 원하는 길이만큼 조각내는 것이다. 인덱스로 특정 범위의 문자를 조각내서 사용한다. 아래처럼 다양하게 사용할 수 있다.

a[0:3] --> 콜론(:)으로 범위 지정

a[시작 인덱스:끝 인덱스] --> 끝 인덱스는 포함 X

a[시작 인덱스:] --> '시작 인덱스'부터 '끝'까지

a[:끝 인덱스] --> '처음'부터 '끝 인덱스'까지 (끝 인덱스는 포함 X)

a[:] --> 시작부터 끝 --> 전체

 

 

문자열 기본 포매팅

 

문자열 포매팅은 문자열 안에 '값'을 '삽입'하는 방법이다. 포매팅 코드(서식문자)는 4가지가 있다.

%s - 문자열 (String)
%c - 문자 1개
%d - 정수
%f - 실수
%% - % 하나를 문자로 삽입

서식 문자를 사용한 문자열 포매팅 예제들입니다.

# 문자열 뒤에 바로 % 기호를 붙여서 값을 입력
print("정수 : %d" % 20)
my_str = "정수 : %d" % 30
print(my_str)
print("실수 : %f" % 10.1)
print("문자열 : %s" % "나는 문자열")

print("정수 : %d" % 10.123) # 실수 값을 정수로 삽입(소수점은 없어짐)
print("실수 : %f" % 30) # 정수 값을 실수로 삽입(없던 소수점 생김)

print("문자열 : %s" % 10) # %s는 전부 문자 취급
print("문자열 : %s" % 10.123)
#결과
정수 : 20
정수 : 30
실수 : 10.100000
문자열 : 나는 문자열
정수 : 10
실수 : 30.000000
문자열 : 10
문자열 : 10.123

다음으로 포맷 코드 대신 format() 함수를 이용한 문자열 포매팅 방법입니다.

my_str = "제 이름은 {}입니다.".format("홍길동") # 만든 문자열을 변수에 대입
print(my_str)

name = "홍길동"
age = 20
print("제 이름은 {}이고, {}살 입니다.".format(name, age))

 

반응형

 C언어 기초 프로그래밍 문법 - 포인터

 

포인터

 

포인터는 메모리 주소를 저장하는 변수. 즉 다른 값이 저장된 공간(변수)을 가리킨다. 일반적인 변수는 주소에 값을 저장하는 것이지만, 포인터 변수는 값이 저장된 주소를 저장하는 것이 차이다.

 

 

1. 포인터 형태

 

type * 포인터 변수명

- 포인터 변수의 type(자료형)은 가리킬 변수의 type과 일치해야 한다.

 → ‘주소 값은 정수이지만, 자료형별로 실제 크기가 다르기 때문이다.

 → ‘주소 값의 범위는 4byte, 포인터 변수의 크기는 4byte로 고정되어 있다.

 

 

2. 주소를 다루는 방법

 

&연산자 (주소연산자)

scanf("%d", &iNum);

&연산자는

1) 변수의 주소 값을 반환한다. (연산의 결과가 주소 값)

2) 시작 주소를 가르쳐준다. (type의 크기에 맞게 알아서 공간사용)

 

3. 포인터를 다루는 방법

 

*연산자 (간접 참조 연산자)

int * pNum = NULL; // NULL은 초기화 값

NULL 은 정수 0이다. (포인터인 것을 명시하려고사용)

포인터에서 0은 주소 값이 ‘0이다라고 해석하는 것이 아니라 가리키는 공간이 없다고 해석한다.

 

4. 포인터를 사용하는 이유

 

첫 번째, 함수의 수행문에서 함수 외부의 변수에 접근가능하다.

두 번째, 동적 할당을 위해 사용한다. 동적 메모리 할당은 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 동적으로 할당된 메모리 공간은 프로그래머가 명시적으로 해제하기 전까지 계속 유지된다.

 

동적 할당

함수를 이용하여 '런타임' 도중 원하는 크기의 메모리 할당한다. malloc() 으로 동작 할당한 공간은 자동소멸이 되지 않는다.반드시 malloc()으로 할당된 공간은 사용을 다한 뒤, free()로 삭제해줘야 한다.

 런타임: 프로그램 실행 중
 malloc() : 메모리할당(공간을 만든다.)
 free()   : 할당된 메모리 해제(공간해제)

정적 할당

일반 변수나 배열( 코드에 공간의 크기 고정), 일반적으로 작성하던 방식이다. 기본적으로  자동으로 소멸된다.

 

 

배열과 포인터의 관계

 

배열에서 배열명은 첫 번째 요소의 주소(시작주소)를 의미한다. 즉 포인터처럼 주소값을 가리킨다. 2차원 배열에서 [ ][ ] 인덱스를 하나만 [ ] 사용하면 한 의 시작주소를 의미한다. 배열변수를 포인터변수에 저장하면 똑같이 다룰 수 있다. 배열과 포인터의 차이점은 크기’, ‘변수의 연산 여부이다.

 

예제

#include <stdio.h>

void main()
{
	int iValue = 0;
	int* pValue = &iValue;

	// pValue만 이용하여 코드 완성하기
	printf("숫자 입력 : ");
	scanf("%d", pValue);
	
	printf("입력한 값의 2제곱은 %d 입니다.\n", (*pValue) * (*pValue) );
}

 

반응형

 c언어 프로그래밍 기초 문법 

 

배열

 

배열은 ‘같은 타입’의 여러 공간을 하나의 변수로 ‘다루는 것’이며 만들어지는 공간은 ‘연속’된다. 배열을 선언(생성) 하기 위해서는 [ ](대괄호)를 사용한다. 대괄호 안에 배열의 크기를 정하는 정수 값을 넣는다. 그리고 배열에는 ‘인덱스(index)’를 이용해 각 요소에 접근하고 사용할 수 있다. 여기서 인덱스는 간단하게 위치 또는 순서로 의미를 이해하면 된다. 참고로 모든 프로그래밍 언어에서 인덱스는 1이 아닌 0부터 시작한다. 따라서 마지막 순서의 인덱스는 길이에서 1을 뺀 값이 된다. 아래에 배열을 생성하는 여러 가지 형태들을 보여준다.

 

// 배열생성
int iArr1[5]; // 배열생성, 각 공간(5개의정수)은 초기화 되지 않음 (쓰레기값)

int iArr2[5] = { 1, 2, 3, 4, 5 }; // 배열생성과 동시에 초기화(순서대로) 

int iArr3[5] = { 1, 2 }; // 뒤에 나머지 공간3개는 자동으로 0이 대입

int iArr4[5] = { 0, };  // 모든 공간을0대입

int iArr5[] = { 10, 20, 30, 40, 50 }; // 자동으로 길이가5가된다.

 

1. 문자열 배열

 

여기서 char는 1개 문자를 표현하는 자료형이다. char의 배열 형태는 ‘문자열’을 표현할 수 있다. 그리고 문자열의 끝에는 자동으로 ‘널 문자(\0)’가 삽입되어 있다는 것을 주의해야 한다. 널 문자는 정수 0을 의미하며 공백과는 다른 문자이다.(참고로 공백은 정수 32) 따라서 널 문자 때문에 배열 선언 시 원하는 문자열 길이보다 최소 1이상 여유 있게 선언해야 한다. 아래에 문자열 배열을 생성하는 여러 가지 형태들을 보여준다.

 

char szStr1[20] = "Hello"; // char 배열 선언과 동시에 초기화 할 때'문자열'사용가능

char szStr2[20] = { 'H', 'e', 'l', 'l', 'o', }; // szStr1과동일

char szStr3[20] = { 0, }; // 정수0은 널 문자

char szStr4[20]; // 초기화 하지 않은 문자 배열

char szStr[] = "Hello World"; // 길이가 자동으로 잡힌다.(11글자) 

 

2. 다차원 배열

 

다차원 배열은 2차원, 3차원 혹은 그 이상의 배열 형태를 말한다.

예를 들어 int iArr[2][3] = {0, }은 2행 3열의 행렬 형태를 나타낸다. 아래에는 2차원 배열 생성 형태를 나타낸다.

 

// 2차원 배열 생성 시 초기값 넣기
int iArr[2][3] = { {1, 2, 3}, {4, 5, 6} };
int iArr[2][3] = { {1, 2, 3},
		{4, 5, 6} }; 

 

 

예제

#include <stdio.h>

void main()
{
	// 2차원 문자배열로 동물이름 입력 받기 
	char szArrAnimal[3][20] = { 0, }; // 20글자 문자열이 3개 
	int i = 0;
	int iArrLen = 0;

	//				20칸 * 3개 = 60byte / 1개 행의 크기 (20byte) --> 3 (행의개수) 
	iArrLen = sizeof(szArrAnimal) / sizeof(szArrAnimal[0]);
	//		1차원 : iArr[1] ---> 2번째 요소 
	//		2차원 : iArr[1][1] --> 1행, 1열 요소 1개 
	//		       iArr[1] --> 1행 전체 의미 

	printf("동물 이름 입력\n");
	for (i = 0; i < iArrLen; i++)
	{
		printf("%d번 동물 : ", (i + 1));
		gets(szArrAnimal[i]); // 한 행 전체를 의미 = 1차원 문자배열과 같다. 
	}

	for (i = 0; i < iArrLen; i++)
	{
		printf("%d번 동물은 %s입니다.\n", (i + 1), szArrAnimal[i]);
	}

}

 

반응형

 c언어 프로그래밍 기초문법 - 함수 

 

 

함수 (Function)

 

 

함수는 특정 행위, 동작을 수행하기 위해 만들어 놓은 기능을 말한다. 함수를 정의하지 않고 프로그래밍이 가능하지만 반복적인 동작을 효율적으로 수행할 수 있고, 유지보수 측면에서도 함수 사용이 용이하다. 코드 상에서 함수를 호출하는 순간, 코드가 함수의 수행문으로 ‘점프’한 뒤 수행문이 끝나면 ‘호출했던 위치’로 다시 돌아와 다음 코드를 수행한다.

함수를 사용하는 이유이자 특징은 첫 번째로 높은 재사용성이다. 함수를 한 번 만들어 놓으면 언제든 호출해 사용할 수 있다. 두 번째, 중복된 코드의 제거가 가능하다. 마지막으로 프로그램을 구조화할 수 있다.

함수의 기본 구조는 다음과 같다.

 

반환타입 함수이름(매개변수)
{
수행문
}

 

int Add(int iNum1, int iNum2)
{
	return (iNum1 + iNum2);
}

 

void PrintAdd(int iNum1, int iNum2)
{
	if (iNum1 == 0 && iNum2 == 0)
	{
		printf("둘 다 0이다.\n");
		return; //void일 때 그냥 return; 사용하면, 마치 반복문의 break;와 같은 효과 
	}
	printf("두 수의 합 : %d\n", (iNum1 + iNum2));
}

 

 

1) 매개변수

 

함수의 기능 수행을 위해, 함수가 호출 될 때 받을 값을 담는 변수다. 필요 여부에 따라 사용해도 되고 생략 또한 가능하다. 매개변수에 개수 제한은 없다.

매개변수는 ‘지역 변수’이기 때문에, 함수가 호출 됐을 때 생성되고 함수의 수행이 끝나면 자동으로 소멸한다.

 

 

 

2) 함수이름

 

이 함수가 어떠한 기능을 수행하는지 의미를 부여한다. 변수명을 정할 때처럼 함수 이름도 함수의 기능을 잘 드러내는 이름으로 짓는 것이 좋다. 다만, 변수명과 같이 C언어에 이미 정해진 내장 함수명과 겹치지 않도록 주의해야 한다.

 

 

 

3) 반환 타입(Return Type)

 

함수의 기능 수행이 끝나고, 호출했던 위치로 돌려줄 값의 타입이다. 쉽게 말해 함수의 최종적으로 반환되는 출력이 어떤 타입인지 나타낸다. 반환할 값이 없다면 void라고 명시한다.

반환 타입이 void가 아니면 반드시 함수의 수행문 안에 'return'이 있어야 한다. return을 이용해 반환 타입과 일치하는 값을 반환해줘야 하기 때문이다. 만약 반환 타입이 정수형(int) 면

'return 0;'처럼 정수를 반환해준다. 반환되는 값은 여러 개일 수 없다.

 

 

※ 반환 타입과 매개변수 유, 무에 따른 함수의 형태

1. 둘 다 있다.
2. 둘 다 없다.
3. 매개변수만 있다.
4. 반환타입(즉, 반환 값)만 있다.

 

※ 함수의 세 가지 상태

1. 선언 : 함수의 원형을 미리 알려주는 용도로 쓰인다. 뒤에 세미콜론(;)을 붙인다.
	> 함수의 원형 : ‘반환타입 함수명(매개변수);‘의 구조를 갖는다.
2. 정의 : 함수를 만든다. (수행문 작성)
3. 호출 : 함수를 사용한다. (매개변수가 있으면 함께 전달)

 

 

반응형

 c언어 프로그래밍 기초 문법 

 

반복문

 

 

반복문이란 주어진 조건이 만족하면 반복하는 ‘제어문’이고 조건이 만족할지 않을 때까지 반복한다. 조건식에 들어가는 변수는 ‘조건변수’이며, 이 조건변수를 다루는 것이 반복문 사용에서 가장 중요하다. 조건변수의 용도는 몇 번 반복하며 값을 사용할지 결정하는 용도로 사용된다.

C언어에서 반복문은 3가지 경우가 있다.

 

 

 

1. for문

 

for문의 기본 사용형태는 다음과 같다.

 

for ( 초기식; 조건식; 증감식) // 3개의식
{
	수행문
}

 

초기식은 최초 한 번만 수행한다. 조건식은 조건이 참(True)이면 수행문을 수행하고,

증감식은 수행문을 수행 후 수행된다. for문의 수행 순서는 다음과 같다.

3개의 식들은 각각 생략이 가능하며, 모두 생략한 경우 항상 참(True)으로 간주한다.

즉 무한반복을 의미한다.

 

1. 초기식 수행
2. 조건식 판별
3. 수행문 수행 (조건이 참일 때)
4. 증감식 수행
5. 조건식 판별부터 반복 (조건 → 수행 → 증감 → 조건 → 수행 → 증감 ···)

 

 

 

2. while문

 

while (조건식)
{
수행문
}

 

if문과 구조는 같으나, 수행문이 끝난 후에 조건식으로 넘어가서 조건을 판별하는 것이 차이점이다. while문의 수행 순서는 다음과 같다.

 

1. 조건식 판별
2. 수행문 수행
3. 조건식 판별부터 반복 (조건 → 수행 → 조건 → 수행 ···)

 

 

3. do ~ while문

 

while문과 다르게 do~while문은 무조건 수행문을 1회 수행 후, 조건식을 판별한다. 그리고 또 다른 차이점은 조건식 뒤에 세미콜론(;)을 붙인다. 이 점을 주의하길 바란다.

 

사용형태는 다음과 같다.

 

do
{

수행문

} while (조건식);

 

※ 반복문, 조건문에서 사용하는 기능

 

1) break

현재 진행 중인 반복문을 빠져나간다. 주로 switch 조건문에서 사용한다.

 

2) continue

다음 수행문 코드를 진행하지 않고 다음 식으로 ‘점프’한다. continue는 반복문에서만 사용한다.

 

반응형

+ Recent posts