C_Programming_Seminar_제어문의활용

Report
C Programming
Seminar
제어문의 활용
제어문의 활용
제어문이란?
말 그대로 프로그램 흐름을 제어하는 문장
순서를 제어하거나, 조건에 따라서 적절한 기능을 수행하도록 제어
루프를 돌리는 순환문과 어떤 조건을 이용하는 조건문, 원하는 곳으로
이동하는 이동문 등으로 구분
연산자 기호
의미
조건문
if문, if ~ else문, switch문
순환문
while문, do ~ while문, for문
이동문
break문, continue문, goto문, return문
제어문의 활용
만약 ~이(라)면의 if문
‘만약에 사과가 10개보다 많다면 열 명에게 하나 이상씩 나누어줄 수
있는데~.’ 라는 생각을 할 수 있다.
이처럼 ‘만약에 ~라면 ~을 해라’ 에서 ‘만약에’ 라는 조건문에 해당하
는 제어문이 if문이다.
if문은 어떤 선택을 위한 조건문으로 많이 사용하는 제어문이다.
제어문의 활용
if문의 사용 형식1
(형식.1) 조건에 맞으면 바로 뒤에 따르는 명령문 실행
if(조건식)
명령문;
(형식.2) 조건에 맞으면 복문기호 안의 명령문을 실행
if(조건식)
{
함수 또는 명령어
}
(형식.3) 조건에 맞으면 복문기호 안의 명령문들을 실행
if(조건식)
{
명령문;
......
}
제어문의 활용
if문의 기본적 사용법
if(조건식)
false
true
처리1
조건이 성립하면 처리1 을 수행하고
성립하지 않으면 아무것도 하지 않는다.
제어문의 활용
if문의 사용 형식2
(형식.4) 조건에 맞으면 바로 뒤에 명령문 또는 복문 안의 명령문들을 실행하고, 안
맞으면 else 다음의 명령문 실행
if(조건식)
명령문;
else
명령문;
(형식.5) 조건에 맞으면 바로 뒤의 명령문을 실행하고, 안 맞으면 다음 조건을 차례
로 대조한 다음에 맞는 조건의 명령을 실행. 맞는 조건식이 하나도 없으면 마지막
else문의 명령문을 실행
if(조건식1)
명령문;
else if(조건식2) else if문을 계속해서 사용 가능
명령문;
else
명령문;
제어문의 활용
if~ else~
if(조건식)
false
true
처리1
else
처리2
조건이 성립할 때(true)는 처리 1을
성립하지 않을 때(false)는 처리 2를 수행한다.
제어문의 활용
if~ else if~ else~
if(조건식)
false
true
처리1
else if(조건2)
처리2
else
처리3
조건이 성립할 때(true)는 처리 1을
성립하지 않을 때(false)는 처리 2 or 처리3을 수행한다.
제어문의 활용
if문의 성격
① if문은 조건에 따른 조건분기문으로 2가지 중 하나만 실행하는 명령문
이다.
② 조건식에는 상수, 변수, 연산식 등이 올 수 있다.
③ 조건식이나 조건식의 결과 값이 0이면 거짓이고, 0 이외의 값이면 참
으로 판단한다.
④ 만약 if문 뒤에 else가 없다면 조건식이 거짓인 상태로 아무 것도 실행
하지 않는다.
⑤ if문 다음에 실행해야 할 명령문이 2개 이상일 때는 {}로 싸서 여러 개
의 문장을 처리할 수 있다.
⑥ if문 안에 또 다시 if문을 포함시킬 수 있다.
⑦ 조건식은 반드시 둥근 괄호로 묶는다.
제어문의 활용
if문 실습(4의 배수 판별 프로그램)
#include <stdio.h>
void main()
{
}
int Input, Result1, Result2;
printf("* 입력한 수가 4의 배수인가 알려주기 *\n\n");
printf("판별할 수(정수)를 입력하세요 : ");
scanf("%d", &Input);
Result1=Input/4;
Result2=Input%4;
if(Result2==0)
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
else if(Result2==1 || Result2==2)
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
else
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수입니다.\n", Input);
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수가 아닙니다.\n", Input);
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수가 아닙니다.\n", Input);
제어문의 활용
if문 실습(4의 배수 판별 프로그램)
#include <stdio.h>
void main()
{
}
int Input, Result1, Result2;
printf("* 입력한 수가 4의 배수인가 알려주기 *\n\n");
printf("판별할 수(정수)를 입력하세요 : ");
scanf("%d", &Input);
Result1=Input/4;
Result2=Input%4;
if(Result2==0)
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
else if(Result2==1 || Result2==2)
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
else
{
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
}
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수입니다.\n", Input);
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수가 아닙니다.\n", Input);
몫: %d, 나머지: %d\n", Input, Result1, Result2);
4의 배수가 아닙니다.\n", Input);
제어문의 활용
if문과 조건 연산자의 용법 비교
if~ else~ 문을 잘 보면 조건 연산자인 ‘? :’ 연산자와 용법이 같다는
것을 알 수 있다.
if문과 조건 연산자 비교
if문의 사용
Result=Number%2;
if(Result==0)
printf(“%d은(는) 짝수입니다.”, Number);
else
printf(“%d은(는) 나머지가 1입니다.”, Number);
조건연산자 사용
Result=Number%2;
(Result==0) ? printf(“%d은(는) 짝수입니다.”, Number) : printf(“%d은(는) 나머지가 1입니다.”,
Number);
제어문의 활용
여러 개 중에서 하나를 고르는 switch문
switch문은 여러 개의 조건 중에서 만족하는 하나를 택해서 명령문을
실행하는 제어문
if~ else~ 문과 비슷하다고 할 수 있다. 다만 if else문은 첫 번째 if문
부터 차례대로 검사를 해가면서 조건식에 맞는 것이 나올 때마다 실행
하는 데 비해서 switch문은 여러 개의 case 중에서 하나의 case만 사
용한다는 점이 다르다.
제어문의 활용
switch 문의 사용 형식
switch(수식)
{
case 상수1:
문장;
break;
case 상수2:
문장;
break;
…
default:
문장;
break;
}
제어문의 활용
switch
switch(식)
{
case 값1:
처리1
‘식=값1’일 때의 처리
break;
case 값2:
처리2
‘식=값2’일 때의 처리
break;
default:
처리3
}
식의 값이 어떤 것과
도 일치하지 않을때의
처리
식의 값에 따라 다른 처리를 선택하여 실행한다.
제어문의 활용
switch문의 성격
① 여러 개 중에서 하나를 선택하는 선택문이다.
② 수식이 일치하는 case문이 있을 경우에는 case문 다음의 문장들을 차례대
로 실행한다.
③ 수식이 일치하는 case 라벨이 없을 경우에는 default 라벨을 실행한다.
④ 마지막 부분의 default문은 필요에 따라 생략이 가능하다.
⑤ 수식이 일치하는 case 라벨도 없고 default 라벨도 생략했을 경우에는 아
무 일도 안하고 끝난다.
⑥ switch문은 블록 안의 명령문을 실행하다가 break문을 만나면 즉각 switch
블록을 탈출한다.
⑦ case문 다음의 명령문은 여러 개가 올 수 있으나 {}기호로 묶으면 안된다.
⑧ 수식에서 사용하는 것은 주로 변수이다.
⑨ 맨 마지막 부분에 사용하는 break문은 생략해도 되지만 관례상 생략하지
않는 것이 좋다.
⑩ default문을 꼭 마지막에 둘 필요는 없다.
제어문의 활용
switch문 실습 (4의 배수 판별 프로그램)
#include <stdio.h>
void main()
{
}
int Number, Answar;
printf("* 입력한 수가 4의 배수인가 알려주기 *\n\n");
printf("판별할 수(정수)를 입력하세요 : ");
scanf("%d", &Number);
Answar=Number%4;
switch (Answar)
{
case 0:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
case 1:
case 2:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
default:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
}
나머지: %d\n", Number, Answar);
4의 배수입니다.\n", Number);
나머지: %d\n", Number, Answar);
4의 배수가 아닙니다.\n", Number);
나머지: %d\n", Number, Answar);
4의 배수가 아닙니다.\n", Number);
제어문의 활용
switch문 실습 (4의 배수 판별 프로그램)
#include <stdio.h>
void main()
{
}
int Number, Answar;
printf("* 입력한 수가 4의 배수인가 알려주기 *\n\n");
printf("판별할 수(정수)를 입력하세요 : ");
scanf("%d", &Number);
Answar=Number%4;
switch (Answar)
{
case 0:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
case 1:
case 2:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
default:
printf("정수 %d를 4로 나눈
printf("그러므로 정수 %d는
break;
}
나머지: %d\n", Number, Answar);
4의 배수입니다.\n", Number);
나머지: %d\n", Number, Answar);
4의 배수가 아닙니다.\n", Number);
나머지: %d\n", Number, Answar);
4의 배수가 아닙니다.\n", Number);
제어문의 활용
반복 수행을 돕는 for문
for문은 if문과 함께 가장 많이 사용하는 제어문
사용법이 편하고 프로그램이 간결해지기 때문에 for문을 이용해서 프
로그램을 짜는 경우가 많다.
for문은 반복 처리를 효율적으로 수행한다.
하나의 문장으로 변수 초기화, 조건식, 명령문 실행이 가능한 제어문
제어문의 활용
for문의 사용 형식
(형식.1) for문으로만 처리할 때
for (변수에 값 대입 ; 조건식 ; 명령문 실행);
(형식.2) for문 다음에 한 줄의 문장만 이용할 때
for (변수에 값 대입 ; 조건식 ; 명령문 실행);
명령문;
(형식.3) for문 다음의 명령을 블록(복문)으로 처리할 때
for (변수에 값 대입 ; 조건식 ; 명령문 실행)
{
명령문;
명령문;
……
}
■ 주의
(형식.1)과 같이 for문 하나로만 처리할 때는 괄호 뒤에 ‘;’ 기호를 붙이고, (형식.2)
와 (형식.3)을 사용할 때는 for문 끝에 ‘;’ 기호가 붙지 않음
제어문의 활용
for문의 성격
①
②
③
④
⑤
for문은 초기식, 조건식, 명령문의 세 부분으로 구성된다.
초기식은 for문이 처음 실행될 때 단 한 번 실행이 된다.
조건식은 루프가 한 번 실행될 때마다 검사를 한다.
for문은 루프를 제어하는 변수의 자료형에 제한이 없다.
for문은 증감식에 제한이 없다. 즉, 루프 제어 변수를 +1, -1 이외의 단위
로 증감시킬 수 있다.
⑥ 만약 for문 안이나 블록 안에서 탈출문(또는 증감식)을 생략하면 무한 루프
가 만들어진다.
⑦ for문의 조건식이 참(1)이면 루프를 반복하며 거짓(0)이면 루프를 빠져나간
다.
⑧ 중간에 탈출하고 싶을 때는 break문을 사용하면 된다.
⑨ for문 안에 또 다른 for문을 내포하여 중첩 사용할 수 있다.
제어문의 활용
for
카운터
int i;
카운터의 초기화를 설정
반복을 계속하기 위한 조건
카운터 증가 방법 지정
for(i=0; i<3; i++)
처리
i의 초기값을 0으로 하여 하나씩 증가시키며, 3 이하일 때만 처리를 반복
하여 실행한다.
제어문의 활용
1부터 입력된 정수까지 더하기 프로그램 실습
#include <stdio.h>
void main()
{
}
int InputValue, Count=0, Result=0;
printf("* 입력된 정수까지 더하기 *\n\n");
printf("정수 입력 : ");
scanf("%d", &InputValue);
for(Count=1; Count<=InputValue; Count++)
{
Result=Result+Count;
printf(" Count = %d, 더한 결과 값 = %d \n", Count, Result);
}
제어문의 활용
1부터 입력된 정수까지 더하기 프로그램 실습
#include <stdio.h>
void main()
{
}
int InputValue, Count=0, Result=0;
printf("* 입력된 정수까지 더하기 *\n\n");
printf("정수 입력 : ");
scanf("%d", &InputValue);
for(Count=1; Count<=InputValue; Count++)
{
Result=Result+Count;
printf(" Count = %d, 더한 결과 값 = %d \n", Count, Result);
}
제어문의 활용
다중 for문
for문은 for문 안에 여러 개의 명령문이 들어가서 사용이 가능
for문 안에 for문을 사용하는 것을 다중 for문이라 한다.
다중 for문의 사용 형식
for (초기식 ; 조건식 ; 증감식)
{
for (초기식 ; 조건식 ; 증감식)
{
실행문장;
실행문장;
……
}
실행문장;
……
}
제어문의 활용
for
카운터
int i, j;
카운터가 2종류 필요
for(i=0; i<3; i++)
for(j=0;j<3; j++)
처리
내측루프
외측루프
for문 안에 for문이 들어가 있는 다중 형식은 바깥 for문이 한 번 수행될 때
마다 안쪽 for문은 초기식 값부터 조건식에 만족하는 동안 반복 수행된다.
제어문의 활용
가로 구구단 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int First, Second;
printf("* 구구단 출력 프로그램 *\n\n");
for(First=2;First<10;First++)
{
for(Second=1;Second<10;Second++)
{
printf("%dx%d=%2d ", First, Second, First*Second);
}
printf("\n");
}
제어문의 활용
가로 구구단 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int First, Second;
printf("* 구구단 출력 프로그램 *\n\n");
for(First=2;First<10;First++)
{
for(Second=1;Second<10;Second++)
{
printf("%dx%d=%2d ", First, Second, First*Second);
}
printf("\n");
}
제어문의 활용
세로 구구단 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int First, Second;
printf("* 구구단 출력 프로그램 *\n\n");
for(First=1;First<10;First++)
{
for(Second=2;Second<10;Second++)
{
printf("%dx%d=%2d ", Second, First, First*Second);
}
printf("\n");
}
제어문의 활용
세로 구구단 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int First, Second;
printf("* 구구단 출력 프로그램 *\n\n");
for(First=1;First<10;First++)
{
for(Second=2;Second<10;Second++)
{
printf("%dx%d=%2d ", Second, First, First*Second);
}
printf("\n");
}
제어문의 활용
구구단 입력 받아 출력 프로그램 실습
#include <stdio.h>
void main()
{
int First, Input;
printf("* 구구단 출력 프로그램 *\n\n");
printf("단을 입력하세요 : ");
scanf("%d", &Input);
for(First=1;First<10;First++)
{
printf("%dx%d=%2d\n", Input, First, Input*First);
}
}
제어문의 활용
구구단 입력 받아 출력 프로그램 실습
#include <stdio.h>
void main()
{
int First, Input;
printf("* 구구단 출력 프로그램 *\n\n");
printf("단을 입력하세요 : ");
scanf("%d", &Input);
for(First=1;First<10;First++)
{
printf("%dx%d=%2d\n", Input, First, Input*First);
}
}
제어문의 활용
원하는 조건을 만족할 때까지 반복 수행하는
while문
while문을 사용하면 조건이 만족되기 전까지는 어떤 일을 반복함
조건이 만족되면 while 제어문이 내린 명령을 그만 하고 while 제어문
을 탈출한다.
즉, 원하는 조건이 만족될 때까지 프로그램을 반복해 돌릴 수 있다.
while문 사용 형식
while(조건)
{
반복되는 문장이나 명령어들;
……
}
제어문의 활용
while
반복을 계속하기 위한 조건을
쓴다
while(조건)
처리
조건이 성립하는 한 처리를 반복한다.
제어문의 활용
while문의 성격
① 조건반복문이다.
② 조건식이 참인 동안에는 블록 안의 내용을 반복 실행하고, 조건식이 거짓
이면 블록안을 벗어난다.
③ 처음부터 조건이 거짓이면 한 번도 수행하지 않는다.
④ 조건식이 참이면 계속해서 무한 루프에 빠지므로 조건식을 거짓으로 만들
수 있는 명령문을 블록 안에 넣어두어야 한다.
⑤ while문을 통해서 실행해야 할 명령문이 여러 개일 경우에는 {}를 이용한
다.
조건
⑥ 사용자로부터 숫자를 입력 받아 제곱을 보여준다.
⑦ 사용자가 입력한 수가 0이거나 0보다 작으면(즉 1보다 작으면) 프로그램을
끝낸다.
제어문의 활용
제곱수 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int InputValue=1;
printf("* 제곱수 구하기 프로그램 *\n\n");
while(InputValue>0)
{
printf("정수를 입력하세요(0이하이면 프로그램은 종료됩니다) : ");
scanf("%d", &InputValue);
printf("%d의 제곱값 : %d\n\n", InputValue,
InputValue*InputValue);
}
제어문의 활용
제곱수 출력 프로그램 실습
#include <stdio.h>
void main()
{
}
int InputValue=1;
printf("* 제곱수 구하기 프로그램 *\n\n");
while(InputValue>0)
{
printf("정수를 입력하세요(0이하이면 프로그램은 종료됩니다) : ");
scanf("%d", &InputValue);
printf("%d의 제곱값 : %d\n\n", InputValue,
InputValue*InputValue);
}
제어문의 활용
~인 동안 ~을 수행하는 do while문
do while문 역시 while문처럼 조건식이 만족될 때까지 계속 순환하는
문장
while문은 조건식을 만족하지 않는다면 실행을 하지 않으므로 한 번도
실행하지 않고 끝낼 수도 있으나, do while문은 일단 한 번은 실행한 뒤
에 조건식을 검사
do while문 사용 형식
do
{
명령문;
……
}
while(조건식);
제어문의 활용
do~while
do
처리
while(조건)
반복을 계속하기 위한 조건을
쓴다
조건이 성립하는 한 처리를 계속 반복한다.(반드시 한 번은 실행한다)
제어문의 활용
do while문의 성격
① 조건반복문이다.
② 조건식이 참인 동안에는 블록 안의 내용을 반복 실행하고, 조건식이 거짓
이면 블록안을 벗어난다.
③ 일단은 실행부의 문장을 한 번은 실행한 다음에 조건식을 검사한다.
④ 조건식이 참이면 계속해서 무한 루프에 빠지므로 조건식을 거짓으로 만들
수 있는 명령문을 블록 안에 넣어두어야 한다.
⑤ do while문을 통해서 실행해야 할 명령문이 여러 개일 경우에는 복문 형태
로 실행부를 만들어 사용한다.
제어문의 활용
세 제곱수 출력 프로그램 실습
#include <stdio.h>
void main()
{
int MAX, Count=0, Result=0;
printf("* 세 제곱수 구하기 프로그램 *\n\n");
printf("정수 입력 : ");
scanf("%d", &MAX);
do
{
}
Count=Count+1;
Result = Count * Count * Count;
printf("%d의 세 제곱수는 %d 입니다. \n", Count, Result);
}
while(Count<MAX);
제어문의 활용
세 제곱수 출력 프로그램 실습
#include <stdio.h>
void main()
{
int MAX, Count=0, Result=0;
printf("* 세 제곱수 구하기 프로그램 *\n\n");
printf("정수 입력 : ");
scanf("%d", &MAX);
do
{
}
Count=Count+1;
Result = Count * Count * Count;
printf("%d의 세 제곱수는 %d 입니다. \n", Count, Result);
}
while(Count<MAX);
제어문의 활용
무한 루프와 루프를 탈출하는 방법
무한 루프란?
제어문을 잘못 사용하여 같은 동작을 반복하다가 빠져나오지 못하는
경우
하지만 컴퓨터 시간을 계속 검사해서 시간을 표시하는 프로그램을 무
한 루프로 돌린다고 하자. 계속 무한 루프를 돌면서 시간을 표시해줄
것이다. 그러다가 프로그램을 끝내야 하거나 지정된 알람 시간이 되어
다른 일을 해야 할 경우에는 무한 루프를 벗어나야 한다.
이와 같이 경우에 따라서는 무한 루프를 이용하기도 하며, 이때에는
반드시 탈출 조건이 필요하게 된다.
제어문의 활용
break문
break문은 가장 많이 사용하는 탈출명령문으로 앞서 switch문을 탈출
할 때 한 번 사용했기 때문에 쉽게 이해할 수 있을 것이다.
break문은 while, for, do while, switch의 4가지 제어문 블록을 벗어
나게 해준다. 만약 제어문을 중첩해서 사용했을 경우에는 안쪽 루프,
즉 break문이 있는 블록을 벗어나게 해준다.
break문의 사용 횟수에는 제한이 없으므로 루프 탈출 조건을 루프 안
에 여러 곳 둘 수 있다.
제어문의 활용
break
while(조건)
{
루프
break;
}
가장 가까운
블록의 끝으로
점프한다.
break문은 복수의 블록을 통과할 수 없다.
제어문의 활용
continue문
continue문은 순환되는 부분의 조건식을 검사하는 부분으로 되돌아감
continue문은 for, while, do while 등의 반복순환문에서만 사용할 수
있고 if문이나 switch문에서 사용하지 않는다.
while문의 블록 안에서 continue문을 사용하면 프로그램의 제어가 순
환되는 부분의 처음인 조건식으로 되돌아가지만 do while문 블록 안
에서 사용하면 순환되는 부분의 맨 마지막에 있는 조건식으로 가게 된
다는 점이 다르다.
제어문의 활용
continue
while(조건)
{
가장 가까운
루프의 시작으로
돌아간다.
continue;
루프
}
제어문의 활용
goto 명령문
goto 명령문은 명령 라인을 이동할 때 사용
goto 명령 뒤에 적는 라벨 이름이 있는 곳으로 이동
라벨 이름은 프로그램 중에서 원하는 장소 아무 곳에나 배치시킬 수
있기 때문에 가장 사용하기 편한 이동명령어
이동할 라벨은 라벨 이름 뒤에 ‘:’ 기호가 붙어 있으면 된다.
goto 명령문 사용 형식
goto label;
……
label:
……
// goto 형식
// label 형식
제어문의 활용
goto 명령문
goto 명령문은 루프를 벗어나는 편리한 기능을 제공하지만 프로그램
코딩 스타일에서는 매우 좋지 않은 명령문이다. C언어의 구조적인 형
태를 망칠 수 있는 명령문이기 때문에 C언어에서는 아주 특수한 상황
이 아니라면 goto 명령문을 쓰지 않는 것이 좋다.
제어문의 활용
실전예제 - 매표소 만들기

similar documents