코드 실행 순서를 결정하는 것
if (조건식)
참인_경우에_실행할_코드;
// 실행할 코드가 여러 줄인 경우 : {} 사용
if (조건식)
{
참인
경우에
실행할
코드;
}
// 옵션 : else, else if
int a = -10;
if (a < 0)
Console.WriteLine("음수");
else if (a > 0)
Console.WriteLine("양수");
else
Console.WriteLine("0");
// IfElse //
using System;
namespace IfElse
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("숫자를 입력하세요. : ");
string input = Console.ReadLine(); // 사용자로부터 문자열 입력받아 결과 반환하는 코드
int number = Int32.Parse(input);
if (number < 0)
Console.WriteLine("음수");
else if (number > 0)
Console.WriteLine("양수");
else
Console.WriteLine("0");
if (number % 2 == 0)
Console.WriteLine("짝수");
else
Console.WriteLine("홀수");
}
}
}
// IfIf //
using System;
namespace IfIf
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("숫자를 입력하세요. : ");
string input = Console.ReadLine();
int number = Convert.ToInt32(input);
if (number > 0)
{
if (number % 2 == 0)
Console.WriteLine("0보다 큰 짝수.");
else
Console.WriteLine("0보다 큰 홀수.");
}
else
{
Console.WriteLine("0보다 작거나 같은 수.");
}
}
}
}
// Format //
switch (조건식)
{
case 상수1;
// 실행할 코드
break;
case 상수2;
// 실행할 코드
break;
case 상수N;
// 실행할 코드
break;
default: // 조건식이 어떤 경우와도 맞지 않은 경우, 생략 가능
// 실행할 코드
break;
}
// Switch - 정수, 문자열 //
using System;
namespace Switch
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("요일을 입력하세요.(일,월,화,수,목,금,토) : ");
string day = Console.ReadLine();
switch (day)
{
case "일":
Console.WriteLine("Sunday");
break;
case "월":
Console.WriteLine("Monday");
break;
case "화":
Console.WriteLine("Tuesday");
break;
case "수":
Console.WriteLine("Wednesday");
break;
case "목":
Console.WriteLine("Thursday");
break;
case "금":
Console.WriteLine("Friday");
break;
case "토":
Console.WriteLine("Saturday");
break;
default:
Console.WriteLine($"{day}는(은) 요일이 아닙니다.");
break;
}
}
}
}
// Switch - 데이터 형식 //
object obj = 123; // C#컴파일러는 123 리터럴을 평가하여 int 형식임을 유추한 후 obj 안에 박싱
switch(obj)
{
case int i: // obj에 담겨 있는 데이터의 형식이 int이므로 이 프로그램은 이 case절을 따라 분기
...
break;
case float f:
...
break;
default:
...
break;
}
// Switch2 //
using System;
namespace Switch2
{
class MainApp
{
static void Main(string[] args)
{
object obj = null;
// 입력받기
string s = Console.ReadLine();
// int로 변환 성공할 경우
if (int.TryParse(s, out int out_i)) // 반환 성공값은 두번째 매개변수
obj = out_i;
// float으로 변환 성공할 경우
else if (float.TryParse(s, out float out_f)) // 반환 성공값은 두번째 매개변수
obj = out_f;
else
obj = s;
switch (obj)
{
case int i:
Console.WriteLine($"{i}는 int 형식입니다.");
break;
case float f:
Console.WriteLine($"{f}는 float 형식입니다.");
break;
default:
Console.Write($"{obj}(은)는 모르는 형식입니다.");
break;
}
}
}
}
TryParse() vs Parse()
Parse()
: 변환이 실패할 경우 예외를 던져 프로그램의 실행을 멈추게 함TryParse()
: 변환의 성공 여부를 반환하여 코드 흐름을 유지할 수 있고 변환한 데이터는 두 번째 매개변수에 저장된다.out
키워드 : 출력 전용 매개변수 표시
when절
을 이용해 추가적인 조건 검사를 수행할 수 있다.switch (obj)
{
case int i:
Console.WriteLine($"{i}는 int 형식입니다.");
break;
case float f f when f >= 0: // obj가 float 형식이며 0보다 크거나 같은 경우
Console.WriteLine($"{f}는 float 형식입니다.");
break;
case float f: // obj가 float 형식이며 0보다 작은 경우
Console.WriteLine($"{f}는 float 형식입니다.");
break;
default:
Console.Write($"{obj}(은)는 모르는 형식입니다.");
break;
어떤 작업에 분기가 필요할 때는 switch문을 사용하되, 분기를 거쳐 값을 내야 하는 경우에는 switch식을 사용하면 보다 읽기 좋은 코드를 작성할 수 있다.
식(Expression) vs 문(Statement)
- 식(Expression) : 어떤 계산을 해서 결과를 내놓음
- 문(Statement) : 어떤 일을 함
// Switch문 //
int input = Convert.ToInt32(Console.ReadLine());
// 1의 자리를 버림. 예) 92 → 90, 87 → 80
int score = (int)(Math.Truncate(input/10.0) * 10);
string grade = "";
switch(score)
{
case 90:
grade = "A";
break;
case 80:
grade = "B";
break;
case 70:
grade = "C";
break;
case 60:
grade = "D";
break;
default:
grade = "F";
}
// Switch식 //
int input = Convert.ToInt32(Console.ReadLine());
// 1의 자리를 버림. 예) 92 → 90, 87 → 80
int score = (int)(Math.Truncate(input/10.0) * 10);
string grade = score switch; // 1. 조건식 switch
{
90 => "A", // 2. 각 케이스는 콤마로 구분
80 => "B",
70 => "C",
60 => "D",
_ => "F" // 3. default
};
// Switch식 + when절 //
bool repeated = true;
string grade = score switch
{
90 when repeated == true => "B+", // score가 90이어도 repeated가 true면 "B+"
90 => "A",
80 => "B",
70 => "C",
60 => "D",
_ => "F"
};
// SwitchExp //
using System;
namespace SwitchExp
{
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("점수를 입력하세요");
int score = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("재수강인가요? (y/n)");
string line = Console.ReadLine();
bool repeated = line == "y"?true:false;
string grade = (int)(Math.Truncate(score/10.0) * 10) switch
{
90 when repeated == true => "B+",
90 => "A",
80 => "B",
70 => "C",
60 => "D",
_ => "F"
};
Console.WriteLine($"학점 : {grade}");
}
}
}
특정 구간의 제어 흐름을 반복 실행
// Format //
while (조건식)
반복실행할_코드
// 여러 문장의 코드를 반복 실행할 경우
while (조건식)
{
반복실행할_코드_블록
}
// While //
using System;
namespace While
{
class MainApp
{
static void Main(string[] args)
{
int i = 10;
while (i > 0)
{
Console.WriteLine($"i : {i--}");
}
}
}
}
일단 코드 실행 후, 조건을 평가하여 반복 수행
do
{
반복실행할_코드_블록 // 최초 한번은 무조건 실행되는 코드 블록
}
while (조건식); // 세미콜론(;) 반드시 붙여줘야 함
// DoWhile //
using System;
namespace While
{
class MainApp
{
static void Main(string[] args)
{
int i = 10;
do
{
Console.WriteLine($"a) i : {i--}");
}
while (i > 0);
do
{
Console.WriteLine($"b) i : {i--}");
/* 여기에서 i는 이미 0이지만 do while문은 조건식을 평가하기 전에
반드시 한 번은 반복 코드를 실행하게 되어 있으므로 이 코드는 한 차례 실행됨 */
}
while (i > 0);
}
}
}
조건변수 초기화
; 조건비교
; 조건변수 증/감
)// Format //
for ( 초기화식; 조건식; 반복식; )
반복실행할_코드;
// For //
using System;
namespace For
{
class MainApp
{
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
}
}
}
// ForFor //
using System;
namespace ForFor
{
class MainApp
{
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine("");
}
}
}
}
// Format //
foreach (데이터형식 변수명 in 배열_또는_컬렉션)
코드_또는_코드블록
// ForEach //
using System;
namespace ForEach
{
class MainApp
{
static void Main(string[] args)
{
int[] arr = new int[]{0, 1, 2, 3, 4}; // 배열 선언
foreach (int a in arr)
{
Console.WriteLine(a);
}
}
}
}
// InfiniteFor //
using System;
namespace InfiniteFor
{
class MainApp
{
static void Main(string[] args)
{
int i=0;
for ( ; ; ) // for 무한 반복 코드
Console.WriteLine(i++);
}
}
}
// InfiniteWhile //
using System;
namespace InfiniteWhile
{
class MainApp
{
static void Main(string[] args)
{
int i = 0;
while (true) // while 무한 반복 코드
Console.WriteLine(i++);
}
}
}
반복문이나 switch문의 실행을 중단하고 탈출
using System;
namespace Break
{
class MainApp
{
static void Main(string[] args)
{
while (true)
{
Console.Write("계속할까요?(예/아니오) : ");
string answer = Console.ReadLine();
if (answer == "아니오")
break; // 입력받은 값이 아니오일 경우 if문 탈출
}
}
}
}
반복을 건너뛰어 반복을 계속 수행
using System;
namespace Continue
{
class MainApp
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue; // 짝수일 경우 건너뛰기
Console.WriteLine($"{i} : 홀수");
}
}
}
}
지정한 레이블로 제어를 이동
using System;
namespace Goto
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("종료 조건(숫자)을 입력하세요 :");
String input = Console.ReadLine();
int input_number = Convert.ToInt32(input);
int exit_number = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 3; k++)
{
if (exit_number++ == input_number)
goto EXIT_FOR;
Console.WriteLine(exit_number);
}
}
}
goto EXIT_PROGRAM;
EXIT_FOR:
Console.WriteLine("\nExit nested for...");
EXIT_PROGRAM:
Console.WriteLine("Exit program...");
}
}
}
6장, 13장에서 설명
*
**
***
****
*****
// answer //
using System;
namespace For
{
class MainApp
{
static void Main(string[] args)
{
for ( int i=0; i<5; i++)
{
for (int j=0; j<= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
}
}
}
*****
****
***
**
*
// answer //
using System;
namespace For
{
class MainApp
{
static void Main(string[] args)
{
for (int i = 4; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
}
}
}
3. 1번과 2번을 for문 대신 while문과 do 문으로 바꿔서 각각 작성하세요.
// 1번 - while문
using System;
namespace While
{
class MainApp
{
static void Main(string[] args)
{
int i = 0;
while ( i<5 )
{
int j = 0;
while (j <= i)
{
Console.Write("*");
j += 1;
}
Console.WriteLine();
i += 1;
}
}
}
}
// 1번 - do while문
using System;
namespace DoWhile
{
class MainApp
{
static void Main(string[] args)
{
int i = 0;
do
{
int j = 0;
do
{
Console.Write("*");
j += 1;
}
while (j <= i);
Console.WriteLine();
i += 1;
}
while (i < 5);
}
}
}
// 2번 - while문
using System;
namespace While2
{
class MainApp
{
static void Main(string[] args)
{
int i = 4;
while ( i>=0 )
{
int j = 0;
while (j <= i)
{
Console.Write("*");
j += 1;
}
Console.WriteLine();
i -= 1;
}
}
}
}
// 2번 - do while문
using System;
namespace DoWhile2
{
class MainApp
{
static void Main(string[] args)
{
int i = 4;
do
{
int j = 0;
do
{
Console.Write("*");
j += 1;
}
while (j <= i);
Console.WriteLine();
i -= 1;
}
while (i >= 0);
}
}
}
반복 횟수를 입력하세요 : -10
0보다 작거나 같은 수는 입력할 수 없습니다.
반복 횟수를 입력하세요 : 5
*
**
***
****
*****
using System;
namespace Star
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("반복 횟수를 입력하세요 : ");
String input = Console.ReadLine();
int i = Convert.ToInt32(input);
if (i <= 0)
{
Console.WriteLine("0보다 같거나 작은 숫자는 사용할 수 없습니다.");
goto EXIT;
}
for (i = 0; i < 5; i++)
{
for (int j = 0; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
EXIT:
Console.WriteLine();
}
}
}