while
문과 do
문, foreach
문으로 반복 처리하기
이번 장에서는 앞서 살펴본 for
문과 마찬가지로 반복을 처리해주는 while
문, do
문, foreach
문에 대한 내용을 다룹니다.
> // 반복문: for 문(구간반복), while 문(조건반복), do 문(실행반복), foreach 문(배열반복)
1. while
문
while
문은 조건식이 참일 동안 문장을 반복 실행합니다. 코드 모양은 다음과 같습니다.
while (조건식)
{
조건식이 참일 때까지 실행할 문장들...
}
while
문의 조건식이 참일 동안 실행문을 반복하여 실행합니다. 반복을 중지하려면 while
문 안쪽 코드에서 증감식 등을 통해서 조건식의 값의 변경이 필요합니다.
while
문을 순서도로 표현해 보면 다음과 같습니다.
그림: while
문 순서도
두 번째 예시는 while 문을 활용하여 1부터 100까지의 짝수들의 합을 계산하는 방법을 보여줍니다. 여기서 i 변수는 1부터 시작하여, i가 100 이하일 동안 반복하며, i가 짝수일 경우에만 sum에 i를 더하는 조건부 로직을 포함하고 있습니다.
while
문을 사용하여 조건을 만족하는 동안 반복하기 의사 코드
반복문은 프로그래밍에서 조건이 참(true)인 동안 특정 코드 블록을 반복적으로 실행하는 중요한 구조입니다. while
문은 특정 조건을 만족할 때까지 코드를 실행하는 데 쓰이며, 정해지지 않은 반복 횟수에 특히 유용합니다. 다음 의사 코드는 while
문의 기본적인 사용법과 조건반복을 설명합니다.
첫 번째 예시는 while
문을 사용해 "Hello"라는 문자열을 세 번 출력하는 과정을 보여줍니다. 초기식에서는 count
변수를 0으로 설정하고, 조건식에서 count
가 3보다 작을 때까지 실행문을 반복합니다. 증감식에서는 count
를 1씩 증가시켜 조건이 거짓이 될 때까지 반복합니다.
> // 반복문: for 문(구간반복), while 문(조건반복), do 문(실행반복)
>
> var result = "";
> var count = 0; //[1] 초기식
> while (count < 3) //[2] 조건식
. {
. result += "Hello\n"; //[!] 실행문
. count++; //[3] 증감식
. }
>
> result
"Hello\nHello\nHello\n"
>
두 번째 예시는 while
문을 사용하여 1부터 100까지의 모든 짝수의 합을 계산합니다. 여기서 i
변수는 1에서 시작하여 100 이하일 때까지 반복하며, i
가 짝수일 경우에만 sum
에 i
를 추가합니다.
> //[!] while 문을 사용하여 짝수의 합
>
> var sum = 0;
>
> var i = 1;
> while (i <= 100)
. {
. if (i % 2 == 0)
. {
. sum += i;
. }
. i++;
. }
>
> sum
2550
>
이러한 방법으로 while
문은 프로그래밍에서 다양한 반복 작업을 효과적으로 처리할 수 있는 유연한 도구입니다.
while
문으로 "안녕하세요." 여러 번 출력하기
이번 예제에서는 while
문으로 "안녕하세요." 문자열을 반복해서 출력해보도록 하겠습니다. while
문의 최소한의 구성 요소들은 초기식, 조건식, 증감식 그리고 실행문입니다. 이 부분을 잘 구분해서 코드를 작성하세요.
코드: WhileDescription.cs
using System;
class WhileDescription
{
static void Main()
{
int count = 0; // 초기식
while (count < 3) // 조건식
{
Console.WriteLine("안녕하세요."); // 실행문
count++; // 증감식
}
}
}
안녕하세요.
안녕하세요.
안녕하세요.
while
문은 for
문과 마찬가지로 반복문입니다. 반복문은 일반적으로 초기식, 조건식, 실행문, 증감식의 식과 문을 가집니다. 다만 그 위치가 for
문과 while
문이 조금 다를 뿐입니다.
while
문을 사용하여 1부터 5까지 출력하기
while
문을 사용하여 1부터 5까지 출력하기
이번에는 카운트 변수 또는 인덱스 변수를 1부터 시작하는 예제를 만들어 보도록 하겠습니다. 다음 내용을 입력한 후 실행해 보세요.
코드: WhileDemo.cs
//[?] while 문: 조건식이 참일 동안 반복 실행
using System;
class WhileDemo
{
static void Main()
{
int i = 1; // 초기식부터
while (i <= 5) // 조건식을 만족하는동안
{
Console.WriteLine("카운트: {0}", i); // 실행문을 실행하고
i++; // 증감식을 사용하여 인덱스 변수를 1씩증가
}
}
}
카운트: 1
카운트: 2
카운트: 3
카운트: 4
카운트: 5
초깃값은 0부터 시작해도 되고 1부터 시작해도 됩니다. 초깃값을 저장할 때 i
변수에 1로 초기화한 후 반복하는 예제입니다. 초기식인 1부터 조건식인 5까지 반복하면서 카운트를 출력하고 증감식에서 1씩 증가시켜 총 5번 반복하는 내용을 보여줍니다. 이번 예제 역시 for
문과 달리 초기식, 조건식, 증감식, 실행문의 위치가 조금 다릅니다.
카운트 증가 프로그램
다음은 두 가지 프로그래밍 언어에서 while
문을 사용하여 카운트를 1부터 3까지 증가시키는 기본적인 구현을 보여줍니다.
카운트 증가 프로그램
while
문의 구성 요소는 초기식, 조건식, 실행문, 증감식으로 이루어집니다.
코드: WhileLoop.cs
// C# 코드: WhileLoop.cs
using System;
class WhileLoop
{
static void Main()
{
int count = 1; // 초기식
while (count <= 3) // 조건식
{
Console.WriteLine($"카운트: {count}"); // 실행문
count++; // 증감식
}
}
}
카운트: 1
카운트: 2
카운트: 3
1부터 3까지 반복하여 카운트를 증가하는 기본적인 while
문의 모양입니다.
이 문서는 while
문을 사용해 1부터 시작하는 카운트를 증가시키는 두 가지 언어의 예제를 포함하고 있습니다. 각 탭은 해당 언어의 특정 코드 예제를 참조합니다.
초깃값을 감소시켜서 반복시키기
초깃값을 감소시켜서 반복시키기
일반적으로 반복문은 반복되는 카운트를 설정하는 인덱스 변수를 작은 수에서 큰 수로 증가하면서 루프를 실행했습니다. 이번에는 큰 수로 설정 후 인덱스 변수의 값을 감소시키면서 반복을 실행하는 예제를 만들어 보도록 하겠습니다.
코드: WhileDecrement.cs
using System;
class WhileDecrement
{
static void Main()
{
int index = 5;
while (index > 0)
{
Console.WriteLine($"안녕하세요. {index}");
index--;
}
}
}
안녕하세요. 5
안녕하세요. 4
안녕하세요. 3
안녕하세요. 2
안녕하세요. 1
index
가 5로 설정된 상태에서 증감식에서 index--
에 의해서 루프를 한번 실행할 때마다 1씩 감소하도록 하였습니다. index
가 0이 되는 순간에 while
문을 종료하는 형태로 인덱스 변수의 값을 감소시키면서 반복 실행을 할 수 있습니다.
6. while
문을 활용한 1부터 100까지의 합 계산 프로그램
while
문을 활용한 1부터 100까지의 합 계산 프로그램
이전에 for
문을 이용해 정수의 합계를 구하는 프로그램을 살펴보았습니다. 이제 같은 작업을 while
문으로 구현해봅시다. 아래 코드를 입력하고 실행해 보세요.
코드: WhileSum.cs
// while 문을 사용하여 1부터 100까지의 합을 구하는 프로그램
using System;
class WhileSum
{
static void Main()
{
const int N = 100;
int sum = 0;
int i = 1;
while (i <= N)
{
sum += i;
i++;
}
Console.WriteLine($"1부터 {N}까지의 합: {sum}");
}
}
1부터 100까지의 합: 5050
위의 코드는 number
변수를 1부터 시작하여 100에 이를 때까지 1씩 증가시키며 누적 합계를 계산하는 프로그램입니다. while
문은 주어진 조건이 참인 동안 계속해서 블록 내의 명령을 반복 실행하며, 이를 통해 1부터 100까지의 총합을 구할 수 있습니다.
while
문을 활용한 짝수의 합 계산
while
문을 사용하여 짝수의 합 구하기
1부터 100까지의 숫자 중 짝수의 합을 구하기 위해 while
문을 사용하는 방법을 살펴보겠습니다. 이 과정은 초기값 설정에서 시작하여 조건이 참인 동안 필터링 조건을 통해 짝수를 식별하고, 해당 값을 합계에 추가하는 방식으로 진행됩니다.
코드: WhileEven.cs
using System;
class WhileEven
{
static void Main()
{
//[!] while 문을 사용하여 짝수의 합
int sum = 0;
int i = 1; // 초기식
while (i <= 100) // 조건식
{
if (i % 2 == 0) // 필터링(조건처리)
{
sum += i; // 실행문
}
i++; // 증감식
}
Console.WriteLine($"1부터 100까지 짝수의 합: {sum}");
}
}
1부터 100까지 짝수의 합: 2550
이 예제는 반복문의 구조와 작동 원리를 이해하는 데 도움을 줍니다. 초기식에서 시작하여 조건식이 만족될 때까지 필터링된 실행문을 수행하고, 증감식을 통해 반복을 계속하는 모습을 보여줍니다.
while
문을 이용한 피보나치 수열 생성하기
피보나치 수열은 각 숫자가 앞 두 숫자의 합인 수열로, 보통 0과 1로 시작합니다. 이것은 수학에서 중요한 개념이며, 이론적인 세부 사항은 수학 교과서나 온라인 검색을 통해 찾아볼 수 있습니다.
여기에서는 while
문을 사용하여 1부터 20까지의 범위 안에 있는 피보나치 수열을 생성하는 방법을 보여줍니다.
코드: WhileFibonacci.cs
// 피보나치 수열: 1 1 2 3 5 8 13 21 ...
using System;
class WhileFibonacci
{
static void Main()
{
int first = 0;
int second = 1;
// while 문으로 피보나치 수열 표현하기
while (second <= 20)
{
Console.WriteLine(second);
int temp = first + second;
first = second;
second = temp;
}
}
}
1
1
2
3
5
8
13
코드: while_fibonacci.c
//[?] 피보나치 수열: 1 1 2 3 5 8 13 21 ...
#include <stdio.h>
int main(void)
{
int first = 0;
int second = 1;
// `while` 문으로 피보나치 수열 표현하기
while (second <= 20)
{
printf("%d\n", second);
int temp = first + second;
first = second;
second = temp;
}
return 0;
}
1
1
2
3
5
8
13
반복 회차에 맞는 first, second 변수의 출력값을 정리해보면 다음과 같습니다.
회차 | first | second | temp |
---|---|---|---|
1 | 0 | 1 | 0 + 1 |
2 | 1 | 1 | 1 + 1 |
3 | 1 | 2 | 1 + 2 |
4 | 2 | 3 | 2 + 3 |
5 | 3 | 5 | 3 + 5 |
6 | 5 | 8 | 5 + 8 |
7 | 8 | 13 | 8 + 13 |
while
문이 실행되면서, 1부터 20 사이의 피보나치 수열이 출력됩니다.
단계별로 루프의 진행 상황을 보려면 디버그 모드에서 디버거를 사용하고 F10 또는 F11 키를 눌러 확인하는 것이 유용합니다.
9. do while
반복문으로 최소 한 번은 실행하기
이번에는 또 다른 반복문인 do
문을 살펴보겠습니다. do
문은 while
문과 비슷하나 일단은 문장을 한 번은 실행 후 그 다음에 조건을 따지는 구문입니다. 이 또한 조건식이 참일 동안 문장을 반복 실행합니다.
do
문의 형식은 다음과 같습니다.
do
{
실행문;
} while (조건식);
조건식이 참일 동안 실행문을 반복하여 실행합니다. 이 때 do
문은 마지막에 세미콜론(;
) 기호로 끝나야 함을 주의해야 합니다.
do
문은 while (조건식)
식이 뒤에 오기에 한 번은 실행문을 실행하는 특징을 가지고 있습니다.
그림: do while
문 순서도
10. do while
문을 사용하여 "안녕하세요." 3번 출력하기
do while
문을 사용하여 "안녕하세요."를 3번 출력하는 프로그램을 작성하겠습니다.
코드: DoWhile.cs
using System;
class DoWhile
{
static void Main()
{
int count = 0; // 초기식
do
{
Console.WriteLine("안녕하세요."); // 실행문
count++; // 증감식
} while (count < 3); // 조건식
}
}
안녕하세요.
안녕하세요.
안녕하세요.
코드: do_while.c
// do `while` 문을 사용하여 "안녕하세요." 3번 출력하기
#include <stdio.h>
int main(void)
{
int count = 0; // 초기식
do
{
printf("안녕하세요.\n"); // 실행문
count++; // 증감식
} while (count < 3); // 조건식
return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.
앞서 살펴본 while
문과 달리 조건식이 맨 마지막에 나와서 한번은 실행문을 실행하게 됩니다.
11. do while
문으로 1부터 5까지의 합계 구하기
do while
문을 사용하여 합계를 구하는 프로그램을 작성하겠습니다.
코드: DoWhileSum.cs
// do 문을 사용하여 1부터 5까지의 합
using System;
class DoWhileSum
{
static void Main()
{
int sum = 0;
int i = 1; // 초기식
do
{
sum += i; // 실행문
i++; // 증감식
} while (i <= 5); // 조건식
Console.WriteLine($"합계: {sum}"); // 15
}
}
합계: 15
코드: do_while_sum.c
//[?] `do` 문을 사용하여 1부터 5까지의 합
#include <stdio.h>
int main(void)
{
int sum = 0;
int i = 1; // 초기식
do
{
sum += i; // 실행문
i++; // 증감식
} while (i <= 5); // 조건식
printf("합계: %d\n", sum); // 15
return 0;
}
합계: 15
do while
문은 while
문과 동일한 기능을 합니다. 다만, 조건식이 뒤에 오는 것만 차이점이 있습니다.
12. 1~100 사이의 3의 배수이면서 4의 배수인 정수의 합 구하기
do while
문은 먼저 실행 후 반복한다고해서 선행반복이라고 합니다.
코드: DoWhileDemo.cs
using System;
class DoWhileDemo
{
static void Main()
{
//[!] 1 ~ 100까지 3의 배수이고 그리고 4의 배수인 정수의 합
int sum = 0;
//[2] Process : 알고리즘(Algorithm): 주어진 범위 + 주어진 조건
int i = 1; // 초기식
do
{
if (i % 3 == 0 && i % 4 == 0) // 필터링(조건식)
{
sum += i; // 실행문(문장)
}
i++; // 증감식
} while (i <= 100); // 조건식(평가할 식)
Console.WriteLine(sum); // 432
}
}
432
코드: do_while_demo.c
#include <stdio.h>
int main(void)
{
//[!] 1 ~ 100까지 3의 배수이고 그리고 4의 배수인 정수의 합
int sum = 0;
//[2] Process : 알고리즘(Algorithm): 주어진 범위 + 주어진 조건
int i = 1; // 초기식
do
{
if (i % 3 == 0 && i % 4 == 0) // 필터링(조건식)
{
sum += i; // 실행문(문장)
}
i++; // 증감식
} while (i <= 100); // 조건식(평가할 식)
printf("%d\n", sum); // 432
return 0;
}
432
do
문을 사용하여 1부터 100까지 반복하면서 3의 배수이고 그리고 4의 배수인 정수의 합을 구하는 코드입니다.
foreach
문으로 배열 반복하기
반복을 처리할 수 있는 또 다른 반복문인 foreach
문에 대해서 살펴보겠습니다. foreach
문은 앞으로 배울 내용인 배열(Array)이나 컬렉션(Collection)과 같은 여러 개의 값을 담고 있는 데이터 구조로부터 그 각각의 데이터가 들어 있는 만큼 반복하는 반복문입니다.
데이터의 개수나 반복 조건을 처리할 필요없이 데이터가 있는 만큼 반복하는 구조입니다.
아래 형식 및 설명을 간단히 읽어본 후 따라하기를 통해서 그 사용법을 알아보겠습니다.
이번 절에서는 foreach
문을 사용해보는 관점으로 간단히 알아보고 넘어가면 됩니다.
foreach
구문은 반복 가능한 항목들을 반복해서 가져옵니다. foreach
문 모양은 다음과 같습니다.
foreach (항목 in 항목들) { … }
foreach
문을 사용하면 여러 개의 값 중 하나를 특정 데이터 형식으로 뽑아서 해당 변수에 임시로 담은 후 실행문에서 사용하는 형태입니다.
foreach ([데이터 형식] 변수 in 컬렉션형식)
{
문장; // 변수에 들어 있는 값을 사용하는 문장이 온다.
}
위 모양을 보면 컬렉션형식에 데이터가 들어 있는 만큼 문장을 실행시킵니다. 여기서 변수에는 데이터 형식에 맞는 데이터가 반복될 때마다 하나씩 저장됩니다.
데이터가 들어있는만큼 반복하기
아직 배운 내용은 아니지만 미리보기로 다음 코드를 살펴보겠습니다. foreach
문을 아래와 같이 사용하면 names
에 저장된 2개의 문자열이 출력됩니다.
코드: ForEachDemo.cs
> string[] names = { "C#", "ASP.NET" };
> foreach (string name in names)
. {
. Console.WriteLine(name);
. }
C#
ASP.NET
Java에서의 foreach
문은 다음과 같습니다.
코드: ForEachDemo.java
public class ForEachDemo {
public static void main(String[] args) {
// Java에서의 For Each문
// 배열(Array) 또는 컬렉션: 지금은 참고용으로만 제시...
String[] colors = new String[] {"Red", "Green", "Blue", "Yellow"};
// for문 사용해서 출력
for (int i = 0; i < colors.length; i++) {
System.out.println(colors[i]);
}
// foreach문: 데이터가 있는 만큼 반복
for (String color : colors) {
System.out.println(color);
}
}
}
Red
Green
Blue
Yellow
Red
Green
Blue
Yellow
문자열에서 문자 하나씩 뽑아서 출력하기
문자열은 그 자체가 문자들의 집합입니다. 이러한 문자열에서 문자 하나씩을 뽑아서 사용할 때에는 foreach
문과 같은 제어문이 도움이 됩니다. foreach
문을 사용하여 문자열에서 문자를 하나씩 뽑아서 출력하는 프로그램을 작성해 보겠습니다.
참고로, 코드 내에서 foreach
를 입력 후 탭을 두 번 입력하면 자동으로 코드 조각이 생성됩니다.
코드: ForEach.cs
using System;
class ForEach
{
static void Main()
{
string str = "ABC123";
// 문자열에서 문자 하나씩 뽑아서 출력
foreach (char c in str)
{
Console.Write($"{c}\t");
}
Console.WriteLine();
}
}
A B C 1 2 3
위 코드에서 문자열은 string
변수에 담고 문자열로부터 하나씩 뽑아져 나온 문자는 char
변수에 담깁니다.
이러한 코드는 다음 코드와 같이 var
키워드를 사용해도 됩니다.
코드: ForEachUp.cs
using System;
class ForEachUp
{
static void Main()
{
var str = "ABC123";
// 문자열에서 문자 하나씩 뽑아서 출력
foreach (var c in str)
{
Console.Write($"{c}\t");
}
Console.WriteLine();
}
}
A B C 1 2 3
지금은 foreach
문이 이해가 쉽지 않을 수 있습니다. 이는 배열과 컬렉션을 배울 때 반복해서 학습을 진행할 예정이니 간단히 살펴보고 다음으로 넘어가도록 하겠습니다.
장 요약
지금까지 C#에서 제공하는 반복문인 for
, while
, do
, foreach
문에 대해서 알아보았습니다. 계속해서 나머지 제어문에 대해서 학습해 나가도록 하겠습니다.
정보처리기사 실기 시험 기출 문제 - 7의 배수 합계 계산
문제
다음 C# 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: SumOfMultiplesOfSeven.cs
using System;
class SumOfMultiplesOfSeven
{
static void Main()
{
int i = 1, sum = 0;
while (i <= 50)
{
if (i % 7 == 0)
{
sum += i;
}
i++;
}
Console.WriteLine(sum);
}
}
입력 예시
이 프로그램은 사용자로부터 입력을 받지 않습니다.
출력 예시
정답 예시에 해당하는 숫자를 여기에 작성합니다. (계산 필요)
정답
196
해설
이 프로그램은 1부터 50까지의 숫자 중 7의 배수의 합을 계산하고 그 결과를 출력합니다.
int i = 1, sum = 0;
에서 변수i
를 1로 초기화하여 반복문을 시작하고,sum
을 0으로 초기화하여 7의 배수의 합계를 저장할 변수를 선언합니다.while (i <= 50)
는i
가 50 이하인 동안 반복문을 실행합니다.if (i % 7 == 0)
는i
가 7의 배수인지 확인합니다. 만약i
가 7의 배수라면,sum += i;
를 통해sum
에i
의 값을 더합니다.i++;
는 반복문의 매 회차마다i
의 값을 1씩 증가시킵니다.Console.WriteLine(sum);
는 계산된 7의 배수의 총 합을 출력합니다.
이 프로그램은 반복문과 조건문의 사용을 통해 특정 조건(이 경우는 7의 배수)에 부합하는 숫자들의 합계를 계산하는 방법을 C# 언어를 사용하여 설명합니다.
while문 퀴즈 및 연습문제
퀴즈
(1) 다음 중 실행문을 최소 한 번은 실행하는 반복문은 무엇인가요?
a. for
루프
b. while
루프
c. do while
루프
d. 그런 루프는 없음
정답: c
do while
문은 실행문을 최소 한 번 실행한 후 조건을 판단합니다.
연습문제: while문을 사용하여 2씩 증가시켜 출력하기
다음 소스 코드를 완성하여 0, 2, 4가 각 줄에 출력되도록 하세요.
코드
using System;
class WhilePractice
{
static void Main()
{
int number = 0;
while (number <= 4)
{
Console.WriteLine(number); // 0, 2, 4
number = number + 2; // 2씩 증가
}
}
}
실행 결과
0
2
4
정답
number <= 4
또는
number < 5
해설
변수 number
는 0부터 시작하며 while
문 내에서 값을 출력한 후 2씩 증가합니다. 반복문이 계속 실행되려면 number
가 4보다 작거나 같거나(number <= 4
), 또는 5보다 작은 조건(number < 5
)을 만족해야 합니다.