닷넷교육, C# 조건문, 제어문, 반복문(if, switch, for, while, forEach)
IF문
if (condition) statement : 어떤 조건의 참, 거짓을 판단하여 실행을 제어하는 구조에 사용. condition 부분의 결과값은 반드시 true또는 false가 되어야 한다.
(No implicit conversion from int to bool )
다른 언어들의 경우: 0 이나 -1을 false로 나머지를 true로 암시적 형 변환
int x;
…
if(x) …//must be if (x!=0) in c# if(x=0) …//must be if (x==0) in c#
[예]
enum Suit { Clubs , Hearts , Diamonds , Spades };
Suit trumps = Suit.Hearts;
if ( trumps == Suit.Clubs ) color = "Black";
else if ( trumps == Suit.Hearts ) color = "Red";
else if ( trumps == Suit.Diamonds ) color = "Red";
else color ="Black";
SWITCH문
switch문의 변수 값과 일치하는 case로 분기(진입점) , 변수값이 일치하는 case가 없을 경우 default로 분기하며 break문을 만나면 switch문 외부로 분기(종단점)
[예]
enum Suit { Clubs , Hearts , Diamonds , Spades };
Suit trumps = Suit.Hearts;
switch(trumps) {
case Suit.Clubs:
case Suit.Spades:
color = "Black" ; break;
case Suit.Hearts:
case Suit.Diamonds:
color = "Red" ; break;
default:
color = "ERROR"; break;
}
반복문 (while, do~while, for, foreach)
1. while문
형식:
while (condition)
{
statements;
}
조건이 참인 동안에 statement를 실행.
//1부터 100까지 수중 홀수 출력
static void Main(string[] args)
{
int i = 0;
while (i < 100)
{
i += 1;
if (i % 2 != 0)
Console.WriteLine("while:{0}", i);
}
}
2.do~while문
형식 :
do{
statements;
} while (condition);
while문과의 차이는 조건에 맞지 않더라도 statement를 한 번은 수행하는 구조입니다. 그러나 while문에서는 조건에 맞지 않으면 statement를 한 번도 수행하지 않을 수도 있습니다.
[예]
//1부터 100까지 수중 홀수 출력
static void Main(string[] args)
{
int i = 0;
do
{
i+=1;
if (i % 2 != 0)
Console.WriteLine("dowhile:{0}", i);
}
while (i<100);
}
3. for문
형식:
for(초기치; 조건; 업데이트 실행){
statements;
}
일반적인 for문과 같다.
[예]
//1부터 100까지 수중 홀수 출력
static void Main(string[] args)
{
for (int i = 1; i <= 100; i++)
if (i % 2 != 0)
Console.WriteLine("for:{0}", i);
}
사용자로부터 숫자를 입력받아 그 수까지 짝수의 합을 반복문을 통해 구하는 예제
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("숫자를 입력하세요. ");
string str = Console.ReadLine();
int m = 0;
bool parsed = Int32.TryParse(str, out m);
if (!parsed)
{
Console.WriteLine("숫자도 입력 못하세요!!");
Environment.Exit(0);
}
int i = 0, sum = 0;
while(i <= m)
{
if (i % 2 == 0) sum += i;
i++;
}
Console.WriteLine("1부터 {0}까지의 짝수합 {1}", m, sum);
i = 0; sum = 0;
do
{
if (i % 2 == 0) sum += i;
i++;
} while (i <= m);
Console.WriteLine("1부터 {0}까지의 짝수합 {1}", m, sum);
sum = 0;
for(i=0; i <= m; i++)
{
if (i % 2 == 0) sum += i;
}
Console.WriteLine("1부터 {0}까지의 짝수합 {1}", m, sum);
}
}
}
LAB.
1. 다음과 같은 결과를 출력하는 C# 프로그램을 작성하세요.
2 4 6 8 10
2. 숫자를 입력하면 다음과 같이 출력하는 C# 프로그램을 작성하세요.
[출력]
입력숫자 : 10
10까지의 숫자 : 1 2 3 4 5 6 7 8 9 10
10까지의 숫자합은 : 55
3. 10개의 숫자를 입력받아 입력받은 수를 출력하고 합, 평균을 구해 출력하세요.
Input the 10 numbers :
숫자-1 :1
숫자-2 :2
숫자-3 :3
숫자-4 :4
숫자-5 :5
숫자-6 :6
숫자-7 :7
숫자-8 :8
숫자-9 :9
숫자-10 :10
합 : 55
평균 : 5.5
4. 다음과 같이 출력결과를 만들어내는 C# 프로그램을 작성하세요.
출력을 원하는 구구단 단수 : 3
1x2 = 2, 2x2 = 4, 3x2 = 6
1x3 = 3, 2x3 = 6, 3x3 = 9
1x4 = 4, 2x4 = 8, 3x4 = 12
1x5 = 5, 2x5 = 10, 3x5 = 15
1x6 = 6, 2x6 = 12, 3x6 = 18
1x7 = 7, 2x7 = 14, 3x7 = 21
1x8 = 8, 2x8 = 16, 3x8 = 24
1x9 = 9, 2x9 = 18, 3x9 = 27
결과 : http://ojc.asia/bbs/board.php?bo_table=Cyber&wr_id=10562
4. foreach문
형식:
foreach(item in 배열 또는 컬렉션){
statements;
}
배열: 여러 개의 데이터를 하나의 변수 또는 객체에 담아둔 것
컬렉션: 자유로운 형태로 여러 개의 데이터를 담아둘 수 있다. ArrayList, HashTable, ICollection 등이 있다.
실행순서는 배열이나 컬렉션에서 하나의 항목을 읽은 후 statement를 수행하고, 다음 foreach로 가서 다음 읽을 것이 있으면 다시 읽고 statement를 실행하는 순서로 동작한다. 만약 다음 읽을 것이 없다면 루프를 빠져 나온다.
using System;
using System.Collections.Generic;
using System.Text;
namespace Ex15
{
// 사용자가 만드는 모든 배열은 기본적으로 Array 클래스를 상속합니다.
// 배열도 객체다.
class Program
{
static void Main(string[] args)
{
int[] arr = new int[2]; int[] arr2 = new int[2] { 10, 20 };
int[] arr3 = new int[] { 10, 20 }; int[] arr4 = { 10, 20 };
for (int i = 0; i < 2; i++)
{
Console.WriteLine(arr4[i]);
}
for (int i = 0; i < arr3.Length; i++)
{
Console.WriteLine(arr3[i]);
}
foreach (int i in arr2)
{
Console.WriteLine(i);
}
}
}
}
이번에는 제어를 조절할 수 있는 break, continue에 대해 알아 보자.
break : 반복문 내의 임의의 지점에서 루프를 빠져나가야 할 때 break문을 사용한다. 싸고 있는 루프 중 가장 가까운 루프를 빠져 나간다.
continue : 루프의 남은 부분을 skip하고 루프의 처음으로 제어를 옮긴다.
[LAB]
1. 10진수를 이진수로 변환
2. 버블정렬
버블정렬(Bubble sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O(n^2)로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다.
버블정렬 코드를 구현하고 테스트 하세요.
3. 선택정렬
선택정렬은 키를 기준으로 나머지 값들 중 최소 또는 최대값을 선택하여 이 값을 키값과 바꾸면서 정렬하는 것이다.
[오름차순정렬의 예]
주어진 리스트 중에 최소값을 찾아서 그 값을 맨 앞에 위치한 값과 교체한다.
맨 처음 위치를 뺀 요소들에 대해 같은 방법으로 교체한다.
선택정렬 코드를 구현하고 테스트 하세요.
[LAB]두 수를 입력받아 사칙연산을 수행하는 프로그램을 작성하세요.
switch case문 이용
두 수의 입력은 콤마로 구분해서 Console.ReadLine으로 받으세요.
[채워주세요]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 사칙연산
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("두수를 입력하세요.");
Console.WriteLine("예 : 3,5");
string str = Console.ReadLine();
str.Trim();
string[] strarr = str.Split(',');
if (strarr.Length != 2)
{
Console.WriteLine("숫자2개를 콤마로 구분해서 입력하세요~");
return;
}
int first, second;
try
{
first = //여기 채워주세요 ;
second = //여기 채워주세요 ;
}
catch
{
Console.WriteLine("입력이 잘못되었습니다.");
return;
}
Console.WriteLine("{0} + {1} = {2}", first, second, Calc(first, second, "+"));
Console.WriteLine("{0} - {1} = {2}", first, second, Calc(first, second, "-"));
Console.WriteLine("{0} * {1} = {2}", first, second, Calc(first, second, "*"));
Console.WriteLine("{0} / {1} = {2}", first, second, Calc(first, second, "/"));
}
static double Calc(int first, int second, string op)
{
double result = 0;
switch (op)
{
//여기 채워주세요
}
return result;
}
}
}
댓글 없음:
댓글 쓰기