내용 정리
※ 조건문(if, switch)
if문과 switch문의 사용 방법은 간단하므로 생략하고
자주 실수하는 사항에 대해서만 정리하려 한다.
if문
if 와 else 쌍에 주의한다. 괄호가 필요하다.
1
2
3
4
5
6
|
scanf("%d",&x);
if(x>0)
if(x%2 == 0)
printf("양의 짝수 입니다.\n");
else
printf("음수입니다.\n");
|
위처럼 작성하면 위의 맨 마지막 else문은
컴파일러는 바로 위의 if 문과 쌍으로 생각한다.
결국 else문은 (x>0) && (x%2 !=0) 일 때 조건으로 생각된다.
따라서 아래와 같이 괄호를 사용하여
컴파일러가 알 수 있게 확실히 명시한다.
1
2
3
4
5
6
7
8
|
scanf("%d",&x);
if(x>0)
{
if(x%2 == 0)
printf("양의 짝수 입니다.\n");
}
else
printf("음수입니다.\n");
|
다시 정리하자면
컴파일러는 else와 짝을 이루는 if를 찾을 때 들여쓰기를 무시하고
else와 짝을 이루지 않는 상위의 if들 중 가장 가까운 if와 짝이 된다고 해석한다.
→ 괄호 사용 습관화
switch문
간단한 실수 이지만 break문을 빼고 자주 사용한다.
오류가 발견될 때 보통 입력받은 케이스 이후 케이스가 동작한다면
break문을 빠트린 것을 알 수 있다.
아래는 오류 케이스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
switch (a)
{
case 1: printf("입금하기 화면으로 이동합니다.\n");
case 2: printf("출금하기 화면으로 이동합니다.\n");
case 3: printf("송금하기 화면으로 이동합니다.\n");
default:printf("잘못된 입력입니다.\n");
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
2를 입력하면
입력받은 케이스 case2 이외의 3, default 경우까지 모두 실행이 된다.
이 경우 break 문이 빠진것을 알 수 있으며
break문 case끝마다 추가해 주어야 한다.
아래와 같이 수정하면 문제없이 동작한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
switch (a)
{
case 1: printf("입금하기 화면으로 이동합니다.\n"); break;
case 2: printf("출금하기 화면으로 이동합니다.\n"); break;
case 3: printf("송금하기 화면으로 이동합니다.\n"); break;
default:printf("잘못된 입력입니다.\n");
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
case2의 break문이 실행되어 switch문을 벗어나게 된다.
※ 반복문(for, while, do~while)
for, while, do~while을 어떠한 경우에 사용해야 하는지 헷갈리는 경우가 많았다.
사용 방법은 간단하지만 많은 알고리즘 문제를 해결하다 보면 자연스럽게 익혀진다.
for와 while문의 차이를 자세히 알아보면
for문: 반복 횟수가 명확할 때 이용하면 편리
while문: 반복 횟수는 모르지만 어떤 조건은 만족 할 때까지 반복할지 아는 경우
do~while문: 무조건 한번은 실행하고, 조건 검사
연습 문제
11, 15, 22, 23, 24번을 풀어보겠다.
문제 11: 양의 정수 하나를 입력받고, 입력받은 수가 소수(prime number)인지 판단하는 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <stdio.h>
int main()
{
int num;
int i;
printf("양의 정수:");
scanf("%d", &num);
for (i = 2; i < num; i++)
{
if (num%i == 0)
{
printf(">>%d는 소수가 아닙니다.\n", num);
break;
}
}
if (num == i)
printf(">>%d는 소수입니다.\n", num);
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
2~자기자신까지 나누어 봐서 0으로 나누어 떨어지면
그 순간 소수 아니라고 판단하고, 종료.
만약 모두 0으로 나머지가 나누어 떨어지지 않는다면
소수.
문제 15: 어떤 수를 입력받고 입력받은 수보다 작은 소수를 전부 출력하는 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <stdio.h>
int main()
{
int max;
int n = 2;
int i;
printf("최대 몇까지의 소수를 출력?");
scanf("%d", &max);
while (n < max)
{
for (i = 2; i < n; i++)
{
if ((n%i) == 0)
break;
}
if (n == i)
printf("%d ", n);
n++;
}
return 0;
}
|

앞의 11번과 유사, 반복문 하나 더 추가
문제 22: 반복문을 이용해 다음과 같은 패턴을 출력하는 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//1번
#include <stdio.h>
int main()
{
int i,j;
for (i = 1; i <= 9; i++)
{
if ((i == 1) || (i == 9))
{
for (j = 1; j <= 9; j++)
{
printf("*");
}
printf("\n");
}
else
{
for (j = 1; j <= 9; j++)
{
if ((j == 1) || (j == 9))
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
//2번
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 5; i++) //1~5줄
{
for (j = 4; j >= i; j--)
{
printf(" ");
}
for (j = 1; j <= i * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= 4; i++) //6~9줄
{
for (j = 1; j <= i; j++)
{
printf(" ");
}
for (j = 1; j <= 9- (i * 2) ; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//3번
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d", j);
}
printf("\n");
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//4번
#include <stdio.h>
int main()
{
int i, j;
for (i = 9; i >= 1; i--)
{
for (j = 1; j <= i; j++)
{
printf("%d", j);
}
printf("\n");
}
return 0;
}
|
문제 23: 원하는 피보나치의 개수를 입력해서 그 개수만큼 수열이 출력되는 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h>
int main()
{
int num,i;
int fibo;
int fibo_1 = 0;
int fibo_2 = 1;
printf("피보나치 개수 입력:");
scanf("%d", &num);
printf("\n*** 피보나치 수열 ***\n");
printf("%d,%d", fibo_1, fibo_2);
for (i = 2; i < num; i++)
{
fibo = fibo_1 + fibo_2; //앞의 두 피보나치값 더해서 현재 피보나치 구함
printf(",%d", fibo);
fibo_1 = fibo_2; //앞의 피보나치를 구할 때 2번째 값을 1번째 값으로 변경
fibo_2 = fibo; //현재 피보나치 값을 다음 피보나치를 구하기 위한 2번째 값으로 변경
}
printf("입니다.\n");
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
문제 24: 자연수 두 개 입력받은 후, 최대 공약수를 구하는 프로그램을 while문을 이용해 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
int main()
{
int x, y, r, temp;
printf("두 개의 정수를 입력하시오:");
scanf("%d %d", &x, &y);
if (x < y) //y가 더 크면 큰 수를 x로 변경
{
temp = x;
x = y;
y = temp;
}
while (1)
{
if (y == 0)
{
printf("최대 공약수는 %d입니다.", x);
break;
}
r = x % y;
x = y;
y = r;
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
무한루프 사용해서 y값이 0이 될때까지 x와 y값을 조절하여
y==0일 때 x값이 최대공약수, 무한루프 탈출
'programming > C프로그래밍 개념' 카테고리의 다른 글
[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter7(배열) 정리 및 연습문제 (0) | 2019.06.25 |
---|---|
[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter6(전처리기) 정리 및 연습문제 (0) | 2019.06.25 |
[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter4(연산자) 정리 및 연습문제 (0) | 2019.06.24 |
[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter3(입력과 출력) 정리 및 연습문제 (0) | 2019.06.24 |
[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter2(변수와 자료형) 정리 및 연습문제 (0) | 2019.06.17 |