본문으로 바로가기
반응형

 저번 시간에는 진법과 자료형들의 타입과 기본 문법의 일부를 배웠는데요, 오늘은 강의 진도가 많아서 글이 길어질 것 같습니다.. 

 

 제일 먼저 Readline();이 자주 나오는데, 사용자의 키보드를 입력받아서 그 결과를 변수에 저장하는 코드입니다.

string n = ReadLine();

이 코드는 사용자의 키보드를 입력받고 그 결과를 n이라는 변수에 저장하는 것이죠.

 

 

 

 이번엔 소수점을 다뤄보도록 하겠습니다.

 

 

 

 

ctrl + F5로 실행하면 실행창에 실수를 입력하세요가 출력된다.                     실수를 입력하니 3을 출력하는 것을 확인할 수 있다.

 

 위의 코드는 소수점이 있는 실수를 입력받았을 때 int형으로 출력했을 때 어떻게 출력되는지 확인하는 코드입니다.

오른쪽 실행창처럼 3.4를 입력받았지만 3으로 소수점을 버려서 출력하게 됩니다.

 

 

 그렇다면 (int) 3.4를 (int) dNum인 실수형으로 바꾸면 어떻게 될까요?

 

 

5.12를 넣어도 int형이므로 5가 출력된다

 

 

 실수를 넣어도 int형에서는 소수점을 버리는 것을 확인할 수 있었습니다.

 

 

 

 

 위에 코드에서 봤던 것처럼 정수형 변수는 소수점은 버리고 출력되는데 3.5나 3.6을 넣었을 때 4로 반올림되게 코드를 짜면 어떻게 될까요?

 

3.6을 입력하면 반올림되서 4가 출력된다.

 

 위 코드처럼 짰을 때 3.1을 넣으면 3.6이 되지만 소수점을 버리므로 3을 출력하고, 3.6을 넣으면 4.1이 되어서 소수점을 버리면서 4가 출력됐습니다.

 

 

 

 이때 Math.round나 ceiling 같은 코드를 인터넷이나 책에서 찾고 있었는데 이런 작은 생각 하나로 해결할 수 있는 사고를 생각해보라는 강사님의 말씀이 있었습니다. 문제를 다각도로 분석하여 어떻게 해결할지, 더 효율적으로 할 수 있게 생각하는 습관을 기억하며 코드를 짜야겠다는 생각이 들었습니다.

 

 

 

다음은 VS에서 나눗셈을 해보겠습니다.(위에서 설명했던 것처럼 컴퓨터는 연산할 때 소수점을 버립니다.)

컴퓨터는 소수점을 정수와 다른 형태로 저장하고 복잡하기 때문에 정수 계산만 하는 것이 좀 더 효율적입니다.

또, 컴퓨터의 나눗셈은 ' / '로 몫만 출력하거나 ' % '로 나머지만 출력할 수도 있습니다.

 

정수의 나눗셈으로 몫과 나머지를 출력을 확인할 수 있다

 

 

 

실수형으로 계산했을때 소숫점을 그대로 출력하는 모습

 

 이를 통해 정수형은 나눗셈을 하더라도 소수점은 버리고 몫과 나머지를 출력하는 반면, 실수형 데이터는 소수점을 버리지 않고 그대로 출력하는 것을 알 수 있습니다. 그리고, 컴퓨터는 5칙연산을 한다는 것을 알 수 있습니다.( + , - , * , / , % )

 

 

 다음은 제어 문법에 대해서 알아보겠습니다.

 C#에서 제어 문법은 주로 if문을 사용합니다. if문은 참/거짓 조건식의 결과에 따라 { }로 묶어놓은 코드의 실행 여부가 결정되는 조건문입니다.

if(참이면)   -> 거짓이면 실행하지 않습니다.

 실행

}

 

 참고로 컴퓨터는 디버그 할 때 한 줄씩 내려오다가 if문을 만나면 { } 창을 가기도 하고, if문을 무시하고 점프돼서 실행되기도 합니다.

 

 

false는 따로 실행되지 않는 것을 알 수 있다.

 

위의 코드처럼 false는 보통 사용되지 않습니다. 이걸 사용하기 위해서는 조건문(비교 연산자)을 사용하며 구분을 할 수 있습니다.

 

 

 

실습 1. 조건문을 통해 입력한 수가 10의 배수인지 알아보는 코드를 짜보자.

 

 

10의 배수를 받았을때 { }로 실행 

 

 이때 한 줄에 %와 ==로 동시에 2개의 연산자를 사용했었는데, 이때 iNum%10와 10==0의 우선순위에 따라 값이 변화될 것입니다. 그렇지만 C#에서 정해진 규칙으로는 % 연산의 우선순위가 더 높습니다. 

 

 

 보통 %의 우선순위가 더 높고 소괄호 '( )' 로 우선순위를 더 높여줄 수도 있습니다.

 

위의 코드에서 10의 배수이면서 3의 배수를 찾는 프로그램도 짜보겠습니다.

 

왼쪽 코드와 오른쪽 코드는 줄 수는 다르지만 엄마아빠 묻는것처럼 별 차이는 없다.

 

이처럼 사람마다 사용하는 연산자나 표현이 다르기 때문에 소스코드가 다를 수 있지만, 결과가 똑같으면 상관없으니 본인의 성향에 맞게 코드를 짜는 것이 중요합니다.

 

 

실습 2. 입력한 숫자가 짝수, 홀수인지 판별하는 프로그램

실습 1처럼 if문의 조건문이 참일 때만 실행되는 소스코드를 짰는데 거짓일 때 실행되는 소스코드도 짜보겠습니다.

 

 

 입력받은 값이 홀수면 2를 나눠도 0이 되지 않으므로 거짓 조건문인 else 구문에 걸려서 입력한 정수를 출력하게 됩니다.

 

 

 이처럼 if 조건문을 계속 쓸 때는 참이 될 때까지 조건을 수행할 수 있는지 봅니다. 하지만 조건이 여러 개일 때 계속 if문을 쓰면 뎁스가 깊어져서 더 복잡해질 수 있습니다. 예를 들어, 밑에 성적을 환산하는 프로그램을 짤 때

 

100을 입력하면 밑에 조건문까지 실행되서 내 점수가 B도 같이 출력된다.

 

그래서 이런 조건이 중복으로 실행되지 않게 또 다른 조건을 걸어주는 else if 문이 필요합니다.

 

 

조건이 여러개일때 else if를 사용해서 해당되는 값만 실행되도록 할 수 있다. 

 

 

 

 

실습 3.

else if 문을 사용하여

90점 이상일 때 A

89~80점일 때 B

79~70점일 때 C

69~60점일 때 D

59점 이하일 때 F

를 출력하는 성적 환산 프로그램을 작성해보자.

 

왼쪽을 짰지만, 오른쪽처럼 글자수와 코드를 줄여서 작성하는 방법도 존재한다.

 

 

 

 

실습 4. 년도를 입력하면 그게 윤년인지 확인해보는 프로그램

*조건

서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다.

서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다.
서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다.(윤년이 아닌 해는 평년임)

 

보통의 알고리즘으로

400으로 나누어 떨어지는 해 (윤년)

400으로 나누어 떨어지는 않는 해 : 평년과 윤년이 섞여 있음
  4로 나누어 떨어지는 해는 윤년 후보(평년과 윤년이 섞여 있음)
  {
    100으로 나누어 떨어지지 않는 해는 윤년
    100으로 나누어 떨어지는 해는 평년
  }

을 생각하여 소스코드를 짜보자.

 

각 해당되는 년도를 입력했을때 알맞는 윤년과 평년이 출력되는 것을 확인할 수 있다.
강사님께서 써주신 소스코드 

 

 

 

다음은 연산자에 대해서 알아보게 될 텐데,

증가 연산자 ++는 피연산자의 값 1 증가시키고, 감소 연산자 -- 는  피연산자의 값을 1 감소합니다.

++ ㅁ ;

   ↓

ㅁ = ㅁ+1;

 

++iNum가 변수이름을 선언할 시간을 줄여줄수도있다.

보통 변수 선언하고 면수에 +1 을해 주는 코드를 짜지만, 증감 연산자로 간단하게 표현할 수 있어서 효율이 더 좋습니다.

 

 

 

다음은 switch문입니다.

if문은 조건문으로서 참 거짓을 판별하지만 switch의 케이스는 딱 한 가지만 적용됩니다.

 

1, 2, 3을 입력했을때 제가 몇째인지 확인 할 수 있다.

 

 

위의 if문처럼 switch문으로 성적을 환산하는 프로그램을 만들어보겠습니다.

 

 

위 코드처럼 점수/10으로 몫만 추출해서 case에 걸리도록 소수점을 버리는 특성으로도 소스코드를 개발할 수 있습니다.

 

 

 

 오늘 배웠던 것 중에 연산자도 있습니다.

 문자열 결합 연산자

int result = 123 + 345 ;   <- 두 가지 숫자의 덧셈이지만,

int result = ' 123 ' + '345' ; <- 두 가지 문자열의 결합을 의미합니다.

 

 

 

 또 관계 연산자 3가지가 있는데

논리곱 연산자(&& : AND)

논리합 연산자(|| : OR 쉬프트 역슬래시 입력)

부정 연산자(! : NOT)가 존재합니다.

 

 

 

 비트 연산자 : 비트단위로 데이터 라인을 가공해야 하는 경우에 사용합니다.

예를 들어,

byte bNum = 100;

byte에는 0110 0100의 수가 방에 모여있습니다.

 

이때 bNum<<2;의 명령을 주면 비트를 화살표 방향으로 2칸 이동해라는 명령입니다.

ㅁㅁㅁㅁ ㅁㅁㅁㅁ 

   0110    0100          => 100

ㅁㅁㅁㅁ ㅁㅁㅁㅁ ㅁㅁ

   0100     0100      00   => 왼쪽으로 2칸이 이동되어서 144로 바뀝니다. 이를 소스코드를 통해 확인해보면,

 

2칸씩 이동하며 100이 144으로 쉬프트한 것을 확인할 수 있다.

 

왼쪽으로 n만큼 밀수록 2의 n제곱만큼 곱해지고, 오른쪽으로 n만큼 밀수록 2의 n제곱만큼 나눠집니다.

(3을 넣고 3칸 이동하면 2의 3 제곱을 곱해서 3*8이 돼서 결괏값이 24가 나온다.)

 

 

두 숫자를 논리 연산자(and, or)등으로 계산할 때는 어떻게 돌까?

1010 1101 && 0110 1001

$$는 둘 다 참이어야 하며 참으로 결과는 0010 1001이 된다.

 

실제로 0010 1001  => 41이 출력이 되는 것을 확인할 수 있다.(ox가 아니라 0x이다)

 

이때 위의 코드처럼 2진법 기계어들을 16진수로 바꾼 다음에 계산하는 것이 더 편하고 효율적임. 참고로 숫자 앞에 'OX'이 받은 숫자를 16진법으로 인식하도록 캐스팅해주는 것입니다.

 

 

오늘은 if문, switch문, 나눗셈과 같이 기초문법에 대해서 배웠는데요, 요즘 학원에서 배우는 것들이 빠르고 어렵기 때문에 분량이 점점 많아질 것 같아서 걱정되네요... 내일은 For문으로 구구단을 출력하는 것을 포스팅해보겠습니다.

 

감사합니다.

반응형