0214 과제 정리
<지난주 최대값 과제 한줄로 작성하기>
하 진짜 머리 터지는 줄 알았다.
해석하자면 이렇다.
x가 y보다 큰가요? (x가 z보다 크면 최대값은 x로 인출해주세요. 그게 아니면 z로 인출해주세요.) y가 더 클 때 (y가 z보다도 크면 최대값은 y로 인출해주시고요 아니면 z로 인출해주세요.)
<이차방정식 근 구하기>
일부러 교재랑 다르게 코드했다. 물론 판별식은 그대로 보고 뺏겼다.
1트에는 if문에 여러줄 넣으려면 {}을 써야 한다는 걸 깜박해서 실패.
2트에는 고쳐서 성공했다.
여기서 알아가야 할 것은 <math.h>를 포함하면 제곱근을 계산해주는 sqrt()와 같은 연산자를 사용할 수 있다는 것이다.
<약수인지 검사하는 프로그램>
사용자로부터 2개의 정수를 받아서 첫번째 정수가 두번째 정수로 나누어 떨어지는 지를 검사하는 프로그램을 짜시오.
<가위바위보>
무려 1트만에 성공했다. 코드를 최대한 간단히 적기 위해서 먼저 비기는 경우를 일반화해서 제일 앞에 적어주었다.
그 다음에 사용자의 숫자에 대해 컴퓨터가 이기는 상황을 if로 설정하면, 이미 비기는 경우는 다 빠졌기 때문에 else로 지는 경우만 연출해주면 된다.
다 하고 나니까 이게 맞는 건지 검증할 방도가 없어서 if문 들어가기 전에 컴퓨터가 고른 난수를 출력해주는 코드를 추가했다.
여기서 익혀야 할 개념은 난수 형성이다.
제일 먼저 난수를 형성하기 위해서는 <time.h>와 <stdlib.h> 전처리기를 포함해주어야 한다.
난수는 랜덤한 숫자를 인출해주는 것을 의미하는데, rand는 32비트 내의 정수를 아무거나 생성한다.
여기서 com = rand()%3+1; 를 코드를 통해서 그 숫자를 3으로 나눈 나머지에 1을 더해 사용할 것이다.
3으로 나누면 나머지는 항상 0,1,2가 나오기 때문에 여기에다가 1을 더해 각각 가위, 바위, 보로 활용할 수 있다.
<time.h>란 무엇인가?
rand 함수는 사실 시드(마인크래프트 시드할 때 그 시드다)가 고정되어 있어서 항상 같은 숫자만 나오게 되어있다. 랜덤인데? 랜덤이? 아닙니다?
그래서 time.h 전처리기를 포함해줘야 하는데, time함수는 현재의 시간을 출력해주는 기능을 한다. 시간이 계속 변하니까 시드에도 계속 변화가 생기는 것이다.
그래서 9번 라인을 해석해보면 이와 같다.
srant(int)time(NULL));
strant: 시드 지정
int: 사실 unsigned int(부호 없는 정수)를 써서 양의 int만 얻어낸다.
time: 현재의 시간 출력
<놀이공원 입장료 계산하기>
<좌표 받아 사분면 인출하기>
너무 쉽쥬
만약에 축에 있는 경우를 추가하고 싶다면 4사분면을 else if로 넣고 else에 축 위에 있습니다를 코드해주면 된다.