1. 변수형
<서로 짝이 맞아야 됩니다>
따라서 각 변수는 여러가지 형태의 자료를 담기 위해 여러가지 형태를 가지게 됩니다.
int a = 0 정수형 데이터를 담을 수 있습니다. 출력시 %d를 사용합니다
long a = 0 Int랑 비슷한 범위의 정수형 데이터를 담습니다. 출력시 %d를 사용합니다
short a= 0 Int보다 좀 더 작은 정수형 데이터를 담습니다. 출력시 %d를 사용합니다
float a = 0 실수형(Float형)데이터를 담을 수 있습니다. 출력시 %f를 사용합니다
double a = 0 Float형보다 좀 더 큰 실수형 데이터를 담습니다. 출력시 %f를 사용합니다
(실수형 데이터란, 소숫점이 있는 숫자를 말합니다 0.5라거나 1.27274라거나..
float와의 차이점 중 하나는, 소수점 이하 정밀도로, float는 소수점 이하 6자리까지를
저장하지만, double은 소수점 이하 15자리까지를 저장합니다.
char a = "a" 문자(Char)형 데이터 1개를 담을 수 있습니다 (영문자 1글자). 출력시 %c를 사용합니다
2. 연산기호
여기서 주의할점은 , "같다"를 나타내는 연산자는 == 이라는점입니다. C언어에서 = 연산자는 다음과 같이 대입의 의미를 지닙니다.
c = a + b;
a 와 b를 더한 값을 c에 대입해라 (집어 넣어라)
헷갈리지 않도록 하는것이 좋습니다.
3. For 반복문
A를 B랑 비교해서 참이면 D를 한바퀴 돌리고.A에 C를 연산하라. 그 다음에 C를 연산해서 변경된 A값으로 다시 B랑 비교해서 여전히 참이면 D를 한바퀴 더 돌리고 거기다가 또 C를 연산하라.그렇게 돌고 돌다가 A랑 B를 비교했을때 거짓이 된 순간 for문을 종료하고 다음으로 넘어가라.
<빨-초-보 순입니다>
직접 소스 코드를 보면 이해가 더 빠릅니다.
1
2
3 |
for (int a = 0; a < 5; a = a + 1) {
printf("현재 %d 바퀴째 빙빙 돌고 있습니다\n",a);
} |
cs |
이걸 돌려보도록 하겠습니다.
for (int a =1 ; a < 5 ; a = a + 1) { printf ("현재 %d 바퀴째 빙빙 돌고 있습니다 \n",a)}
for ( A ; B ; C ) { D }
1바퀴째:
1. A( int a.현재 1)을 B에 대입합니다. B는 a<5이므로 현재 1인 a는 참입니다.
2. D를 한바퀴 돌립니다. 화면에는 "현재 1바퀴째 빙빙 돌고 있습니다"가 출력됩니다.(a값을 출력시켰는데, a값은 A에서 신나게 돌고 있는 그 값입니다)
3. D 한바퀴 돌렸으면, C랑 A를 연산합니다. C는 a+1이므로 이 시점에서 int a = 2가 됩니다.
4. 반복합니다. A랑 B를 비교합니다. int a =2 이므로 a<5는 참입니다.
5. D 한바퀴 돌립니다. 화면에는 "현재 2바퀴째 빙빙 돌고 있습니다"가 출력됩니다.
6. 다 돌렸으니 C랑 A를 연산합니다. a에 1이 더해지므로 int a=3입니다
7. B랑 또 비교합니다. int a= 3이니까 a<5는 참입니다.
신나게 D를 돌립니다. ""현재 3바퀴째 빙빙 돌고 있습니다""가 화면에 뜹니다.
8. 다돌렸으니 C랑 A를 연산합니다. int a = 4가 되었습니다
9. A랑 B를 또 비교합니다. int a =4이므로 아직은 a<5는 참입니다.
10. D를 돌리러 갑시다. "현재 4바퀴째 빙빙 돌고 있습니다"가 뜹니다.
11. C랑 A를 연산합니다. int a = 5가 되었습니다
12. A랑 B를 비교합니다. int a=5이므로 a<5는 거짓이 됩니다.
13. 고생 많으셨습니다. for문을 빠져 나갑니다.
<뱅뱅 도느라 고생하셨습니다>
3-2. 중복 For문
1
2
3
4
5
6 |
for (int a = 1; a < 3; a = a + 1) {
printf("현재 %d 바퀴째 빙빙 돌고 있습니다\n",a);
for (int b = 1; b < 3; b = b + 1) {
printf("현재 B도 %d 바퀴째 빙빙 돌아가고 있습니다\n", b);
}
} |
cs |
반복문은 반복조건이 해제돼서 빠져나갈때까지 딴데 못 가고 계속 뺑뺑이 돌아야 됩니다
바깥쪽 for문 1번째로 돌고-> 안쪽 for문이 종료될때까지 안쪽만 뱅뱅뱅뱅 돌다가, 안쪽 for문이 깨지면, 그제서야 바깥쪽으로 빠져나가서, 바깥쪽 for문이 2번째로 돕니다. 2번째 바퀴 역시 안쪽 for문이 종료될때까지 안쪽만 뱅뱅뱅뱅 돌다가, 안쪽 for문이 종료가 되면 바깥쪽으로 나갑니다.
<이런걸 흔히 똥개훈련이라고 하더라구요>
약간 헷갈리시겠지만 이 흐름을 잘 익혀두시는것이 좋습니다. for문 뿐만 아니라 다른 구문 역시 같은 식으로 중첩 작동하게 됩니다.
4.While문
동작 방법 자체는 for문과 같습니다. 즉 (조건)부분이 참이면 while문 내용이 실행되고, 거짓이면 종료됩니다.
단 주의해야할점은 저 "조건"이 하나뿐이라는점입니다. For문의 경우에는 조건 자체와 조건을 판정하기 위한 변수, 그리고 1바퀴당 해당 변수를 어떻게 변화시켜줄것인지까지 한방에 처리했습니다만, while은 그것들을 전부 외부에서 처리해줘야 합니다. 외부 변인을 신경써 주지 않으면 지체없이 무한루프의 늪에 빠지게 될 공산이 큽니다.
1
2
3
4 |
int a = 1;
while (a < 3) {
printf("아주 미친듯이 돌고 있습니다!!");
} |
cs |
이런 짓을 했다간
미친 듯이 돕니다.
1
2
3
4
5 |
int a = 1;
while (a < 3) {
printf("너무 돌지마라, 어지럽다\n");
a = a + 1; //변인을 조정해 줍시다
} |
cs |
적당히 변인을 조정해줘서
몸 생각하면서 돕시다.
5. If문 (분기문)
<이런 용도로 쓰입니다>
If문의 사용방법은 다음과 같습니다.
위에서 본 것처럼 if (만약에~)의 조건이 맞으면 if 뒤의 내용을 실행하고, if문의 조건이 거짓인 경우
else if (그게 아니라면 혹시~)가 있으면 그쪽 조건을 비교하여 참이면 그쪽 내용을 실행합니다.
만약 전부 다 거짓이라면 else(그럼 뭐 어쩔수없이)쪽의 명령을 실행하게 됩니다.
사실상 if나 else if는 같은 기능을 합니다. 둘다 "제시한 조건이 맞으면 내꺼 실행해라"라는건데 if를 여러번 쓰면 컴퓨터가 각기 다른 if명령어라고 판단하기 때문에 앞에 else를 붙여서 구분한게 아닌가 예상합니다.
여튼, if는 처음 한번, else if는 얼마든지 필요한만큼 만들어낼수 있으며, else는 보통 끝에 한번 붙게됩니다.
5-2. If문 사용 시 주의할 점
컴퓨터는 소스 코드를 실행할때 위에서부터 차례대로 한줄한줄 실행합니다.
If문의 경우 조건 하나가 만족되면 그 외의 조건은 싸그리 무시합니다. 그리고 위에 적은것 처럼 컴퓨터는 "위에서 아래로" 소스를 읽어 내려오기 때문에 만약 위쪽에 있는 if문의 조건이 맞아버리면, 설사 아래쪽에 있는 구문이 "나도 참인데!" 라고 외쳐봐야, 그냥 깡그리 무시되고 맨 위에 있는 조건이랑 짝짜꿍 하고 종결시켜버립니다. 예를 들자면,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
int ifa = 19;
if (ifa < 20) {
printf("a는 20보다 작음\n"); // ifa는 19이므로 20보다 작아서 True라서 이게 실행됨
}
else if (ifa < 30) {
printf("a는 30보다 작음\n"); // ifa는 19이므로 30보다 작아서 True지만,
// 위에 if에서 이미 들어갔으므로 무시됨
}
else if (ifa > 40) {
printf("a는 40보다 큼\n"); // 거짓. 참이라 해도 첫항이 들어갔으니 무시됨
}
else {
printf("살아있네!\n"); // 모든게 다 거짓이면 실행됨.
} |
cs |
다음과 같을 경우 첫 if문에서 걸려서 첫번째 내용이 실행되어 화면에 "a는 20보다 작음"이라는 메세지가 뜬 후 if문이 종료됩니다. 그 아래 else if문의 조건인 (ifa <30) 역시 참이지만, 위쪽에서 먼저 성립시켜버린 이후엔 싸그리 무시됩니다.
6. 소스 파일
'Programming > C - 학습노트' 카테고리의 다른 글
[작성예정]20180129. 포인터 (0) | 2018.01.29 |
---|---|
20180126. 1차원 배열. rand() 함수. (0) | 2018.01.29 |
20180118. 연산자2. scanf문 .switch문 (0) | 2018.01.18 |
20180116.헤더 파일, int형 변수, printf() 명령 (0) | 2018.01.18 |
20180115. C의 기본 문법,변수,함수의 개념 (0) | 2018.01.18 |