상세 컨텐츠

본문 제목

#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 1

Programing/C, C++

by CouqueD'asse 2022. 5. 3. 15:37

본문

1장 기본 알고리즘

 

01-1 알고리즘이란?

// 세 값의 최댓값
int main(void)
{
	int a, b, c;
	int max;

	printf("세 정수의 최댓값을 구합니다.\n");
	printf("a의 값 : ");
	scanf_s("%d", &a);
	printf("b의 값 : ");
	scanf_s("%d", &b);
	printf("c의 값 : ");
	scanf_s("%d", &c);
	
    max = a;
	if (b > max)
	{
		max = b;
	}
	if (c > max)
	{
		max = c;
	}
	printf("최댓값은 %d입니다.\n", max);

	return 0;
}

순차적 구조 : 프로세스가 순차적으로 실행되는 구조

선택 구조 : 식의 평가 결과에 따라 프로그램의 실행흐름을 변경하는 if문

 

알고리즘의 정의

문제를 해결하기 위한 것으로, 명확하게 정의되고 순서가 있는 유한 개의 규칙으로 이루어진 집합

 

01-2 반복

반복 구조 : 어떤 조건이 성립하는 동안 처리를 반복하여 실행 = 루프(loop)

 

while문 반복

// 1부터 n까지의 정수 합 구하기 : while문
int main(void)
{
	int i, n;
	int sum;
	puts("1부터 n까지의 합을 구합니다.");
	printf("n의 값 : ");
	scanf_s("%d", &n);
	sum = 0;
	i = 1;
	while (i <= n)
	{
		sum += i;
		i++;
	}
	printf("1부터 %d까지의 합은 %d입니다.\n", n, sum);
	return 0;
}

특징 : 실행 전에 반복을 계속할지를 판단 = 사전 판단 반복 구조

더보기

식1;

while(식2)

{

 루프 본문

 식3;

}

 

for문 반복

// 1부터 n까지의 정수 합 구하기 : for문
int main(void)
{
	int i, n;
	int sum;
	puts("1부터 n까지의 합을 구합니다.");
	printf("n의 값 : ");
	scanf_s("%d", &n);
	sum = 0;
	for (i = 1; i <= n; i++)
	{
		sum += i;
	}

	printf("1부터 %d까지의 합은 %d입니다.\n", n, sum);
	return 0;
}
더보기

for(식1; 식2; 식3)

{

 루프 본문

}

 

do while문 반복

// 1부터 n까지의 정수 합 구하기 : do while문(양수만 입력 가능하게)
int main(void)
{
	int i, n;
	int sum;
	puts("1부터 n까지의 합을 구합니다.");
	do
	{
		printf("n의 값 : ");
		scanf_s("%d", &n);
	} 	while (n <= 0);
	sum = 0;
	for (i = 1; i <= n; i++)
	{
		sum += i;
	}

	printf("1부터 %d까지의 합은 %d입니다.\n", n, sum);
	return 0;
}

특징 : 루프 본문을 한 번 실행한 다음 반복을 계속할지를 판단 = 사후 판단 반복 구조

더보기

do문 while(제어식);

 

구조적 프로그래밍

하나의 입구와 하나의 출구를 가진 구성 요소만을 계층적으로 배치하여 프로그램을 구성하는 방법

순차, 선택, 반복 3종류의 제어 흐름을 사용

 

다중 루프

반복 안에서 다시 반복하는 경우

// 곱셈표 : 이중 루프
int main(void)
{
	int i, j;
	printf("--------곱셈표--------\n");
	for (i = 1; i < 10; i++)
	{
		for (j = 1; j < 10; j++)
		{
			printf("%3d", i * j);
		}
		putchar('\n');
	}
}

i가 1일 때 : j를 1부터 9까지 증가하면서 1 * j를 출력 후 줄 바꿈 실행

i가 2일 때 : j를 1부터 9까지 증가하면서 2 * j를 출력 후 줄 바꿈 실행

i가 5일 때 : j를 1부터 9까지 증가하면서 5 * j를 출력 후 줄 바꿈 실행

i가 9일 때 : j를 1부터 9까지 증가하면서 9 * j를 출력 후 줄 바꿈 실행

 

직각 이등변 삼각형 출력

// 왼쪽 아래가 직각인 이등변 삼각형을 출력 : 이중 루프
int main(void)
{
	int i, j, n;
	do
	{
		printf("몇 단 삼각형 입니까? ");
		scanf_s("%d", &n);
	} while (n <= 0);
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= i; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}
}

i가 1일 때 : j를 1->1로 증가하면서 *를 출력 후 줄 바꿈 실행(*)

i가 2일 때 : j를 1->2로 증가하면서 *를 출력 후 줄 바꿈 실행(**)

i가 3일 때 : j를 1->3로 증가하면서 *를 출력 후 줄 바꿈 실행(***)

i가 4일 때 : j를 1->4로 증가하면서 *를 출력 후 줄 바꿈 실행(****)

 

 

관련글 더보기