^(캐럿) ^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만,
C언어에서는 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다.
사이트의 xor연산 필요성의 예시:
두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다.
배경이 되는 그림과 배경 위에서 움직이는 그림이 있을 때,
두 그림에서 차이만 골라내 배경 위에서 움직이는 그림의 색으로 바꿔주면
전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고
보다 효과적으로 그림을 처리할 수 있게 되는 것이다.
비행기 슈팅게임 등을 상상해보면 된다.
(개인적으로 신기함.)
3개의 요소로 이루어지는 3항(ternary) 연산자는
"조건식 ? (참일 때의 값) : (거짓일 때의 값)” 의 형태로 사용하는 연산자이다.
printf("%d", a>b ? a:b); //두 값 중 큰 값이 출력된다.
예시 코드는 a>b 의 결과가 참(1)이면 (a>b ? a:b)의 결과는 a가 되고,
거짓(0)이면 (a>b ? a:b)의 결과는 b가 된다.
3개의 값을 비교할 때
가장 큰 값 구하기 : (n>m ? n:m)>k ? (n>m ? n:m):k
가장 작은 값 구하기 : (n>m ? m:n) > k ? k: (n>m ? m:n)
실행해야 할 명령들이 여러 개일 때 코드블록 기호 { }로 묶어 주는데,
코드블록의 내용이 논리적으로 1개 단위라면 코드블록 기호를 생략할 수 있다.
if(a%2==0) printf("%s", "even");
else printf("%s", "odd");
switch(정수값)
{
case 'A': //문자 'A'가 "정수값" 65('A'의 아스키 값)로 저장되기 때문에 가능하다.
...;
break;
case 'B':
...;
break;
case 'C':
...;
break;
default: // else 문과 같게 사용된다. 위의 case는 break문으로 빠져나가기에 default값이 실행되는 조건을 조절 가능했기 때문.
...;
}

또한, break를 쓰지 않는다면 계속 실행한다는 점을 이용해
switch(a)
{
...
case 3:
case 4:
case 5:
printf("spring");
break;
...
}
처럼 하면 3 또는 4 또는 5 가 만족한다면 같은 즉, or 처럼 사용할 수 있다.

코드업 1069번 문제를 if문을 이용해서 풀어보면 어떨까 하고 코딩해보았다.
' '와" "의 비교.
#include <stdio.h>
int main(void) {
char n;
scanf("%c",&n);
if (n=="A"){
printf("best!!!\n");
}
else if (n=="B") {
printf("good!!\n");
}
else if (n=="C"){
printf("run!\n");
}
else if (n=="D"){
printf("slowly~\n");
}
else {
printf("what?\n");
}
}
로 하면 무조건 what? 이 출력되었다.
이는 c언어에서 " " 을 사용하면 입력된 문자열 + null이 입력되기에 scan된 값과 차이가 나기 때문이다.
'hello' -> hello
"hello" -> hello + [null]
이를 해결한 코드는 아래와 같다.
#include <stdio.h>
int main(void) {
char n;
scanf("%s",&n);
if (n=='A'){
printf("best!!!\n");
}
else if (n=='B') {
printf("good!!\n");
}
else if (n=='C'){
printf("run!\n");
}
else if (n=='D'){
printf("slowly~\n");
}
else {
printf("what?\n");
}
}
goto문: 미리 지정한 이름표의 지점으로 가서 실행을 이어나간다.
"이름:" 과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블)라고 한다.
레이블은 특별한 선언 없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면 된다.
레이블은 한 단어처럼 공백없이 모두 붙여 써야 한다.
int n;
reload: //레이블은 콜론(:)으로 끝내고, 일반적으로 *들여쓰기*를 하지 않는다.
scanf("%d", &n);
printf("%d", n);
if(n!=0) goto reload; //reload라고 적혀있는 레이블로 실행 이동

do-while 문:
do
{ //코드블록
...
}while(조건);
구조는 while( ) { ... } 과 유사한 반복 실행 구조를 만들 수 있는데
다른 점은 무조건 한 번은 실행된다는 것이다. 또한, 마지막에 세미콜론을 반드시 붙여야 한다.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element
https://www.w3schools.com/tags/default.asp
heading을 줄여서 h로 표현한다.
<h1> ~ <h6> 까지 존재한다.
<p> </p> 글의 단락을 나타냄.
<br> </br> 글의 줄바꿈을 생성함.
<b> </b> 굵게
<i> </i> 이탤릭체
<u> </u> 밑줄
<s> </s> 중간선
이러한 태그들을 중첩할려면 <b><i></i></b> 와 같이 작성해야함.
<a> 로 표현.
반드시 href 속성이 들어가야한다. 뜻은 하이퍼 레퍼런스 이다.
<a herf="~~">xxx</a>
target 속성에 대해 조금더 다뤄보자.
일단 속성을 기재하지 않으면 _self가 기본값으로 설정되어있다.
이는 링크가 있는 탭에서 링크로 이동하는 것이다.
반대로 _blank로 설정한다면 새로운 탭에 링크를 열게 된다.
<a href="주소" target="_blank">이름</a>
이와 같은 방법으로 표현할 수 있다.
또한 내부링크라는 것도 이용가능하다. 내부링크를 통해 페이지 내부의 특정 요소로 초점을 이동할 수도 있다. 엄청 긴 페이지의 경우 '상단으로 가기' 같은 기능이 있는데 이것이 내부링크를 이용한 기술이다.
href="#(id)" (id)에 설정된 id 값을 넣으면 그곳으로 이동할 수 있다.
html내부에서 id속성을 주고 이를 이용하면된다.
<h1 id="top">t.o.p.</h1>
<a href="#top">상단으로 이동하기<a>
이런식으로 구성하면 상단으로 이동하기를 눌렀을때 id가 top인 내용t.o.p. 쪽으로 이동하게 된다.
의미없이 순전히 무언가를 담기 위한 또는 요소를 묶기 위한 용도로 사용되는 태그이다.
실무에서 스타일을 주기위해서 또는 서버에 보내는 데이터를 담기위해 사용된다고 한다.
<div> division 의 약자, 블록 레벨 태그
<span> 인라인 레벨 태그
간단하게
블록 레벨 요소: 모니터 화면에 한상자씩 채우는 요소.
인라인 레벨 요소: 라인 위에 표현. 주로 블록 레벨 요소안에서 사용됨.
<p>가 블록 레벨 요소이고,<b> <i>등이 인라인 레벨 요소이다.
<div>
<span>ABC</span>DEFG
</div>
이렇게 해도 화면에는 ABCDEFG로 표현된다.
<ul> unordered list: 순서가 없는 리스트
<ol> ordered list: 순서가 있는 리스트
리스트 태그 내부의 내용은 <li>로 분리시켜 표현한다.
<ul>
<li>내용</li>
</ul>
<dl> description list: 용어를 설명하는 리스트.
<dt> definition term: 용어를 구분한다.
<dd> definition description: 용어의 정의를 나타낸다.
<dl>
<dt>용어</dt>
<dd>용어에 대한 설명</dd>
</dl>
<img src="./~" alt="xxx" width="400" height="400">
문서에 이미지를 삽입.
src : 이미지 경로 지정
alt : 이미지의 대체 텍스트 지정, 상대경로와 절대경로 두가지 모두 사용가능.
대체 텍스트: 이미지를 설명하는 글, 서버가 이미지를 못가져오는 경우에 사용
width / height : 이미지의 크기를 지정. optional한 옵션. 하나의 값만 조절하면 자동으로 비율이 유지된 상태에서 크기가 변경됨.
<!-- 상대경로, ./은 현재 폴더를 의미 -->
<img src="./images/pizza.png" alt="피자">
<!-- 절대경로 -->
<img src="C:/users/document/images/pizza.png" alt="피자">
<img src="http://www.naver.com/pizza.png" alt="피자">
행(row) = 가로방향
열(columm) = 세로방향
<table> : 표를 나타내는 태그
<tr> : 행을 나타내는 태그
<th> : 제목 셀을 나타내는 태그
<td> : 셀을 나타내는 태그
<tr>은 셀을 나타내는 <th>, <td>를 자식으로 가진다.
표를 구성할 때는 가로방향 먼저 작성한다고 생각하면 편하다.
즉 tr -> td
<caption> : 표의 제목, table태그 중 가장 위에 위치해야함.
<thead> : 제목 행을 그룹, <th> 태그를 이용해 제목 행 셀을 나타냄. 굵은 글씨.
<tfoot> : 바닥 행을 그룹, 최신 HTML에서는 <tbody> 의 뒤에 있어야함.
<tbody> : 본문 행을 그룹
셀 병합. <td> 태그안에 xxxspan="x" 형식으로 작성.
<colspan> : 셀을 가로방향으로 병합
<rowspan> : 셀을 세로방향으로 병합
병합할 때는 row와 col이 반대로 구성되는 느낌으로 이해하자.
병합을 했을경우, 병합한 칸수 만큼 셀을 가지고 있는 것임을 염두해야함.
.
.
.
.
<colgroup><col>scopeheaders의 속성 탐구하기. 내일 기차에서....