08. 조건문
제어문 (=조건문)
제어문은 프로그램의 실행 흐름을 제어하는 문법이다.
if문
- if(data = 3){} -> 대입연산자 잘못 사용
- if(data == 3){} -> 올바름
- 위의 실수를 줄이기 위해 if(3 == data){}로 사용할 수 있음. 실수로 if(3 = data){} 이렇게 사용해도 값(상수)에 값을 넣을 수 없어 오류가 발생하여 거를 수 있다.
void main(){
int score = 92;
char grade;
if(score >= 90){
grade = 'A';
printf("점수는 %d이고 등급은 %c입니다.\n", score, grade);
}else{
grade = 'B';
printf("점수는 %d이고 등급은 %c입니다.\n", score, grade);
}
printf("작업종료");
//결과 -> 점수는 92이고 등급은 A 입니다.
// 작업종료
}
조건 수식 연산자(3항 연산자?) : 간단한 if문을 쓸 때 사용한다.
결과 값 = (조건 수식)?수식1(참일 때 실행해 결과 값에 저장) : 수식2(거짓일 때 실행해 결과 값에 저장);
point = (value >= 10000) ? value * 0.1 : value * 0.5;
if(data > 5){
return 1;
}else{
return 0;
}
//삼항으로 변환
return (data > 5) ? 1 : 0;
if else문
void main(){
int score = 86;
char grade;
if(score >= 90){
grade = 'A';
}else if(score >= 80){
grade = 'B';
}else if(score >= 70){
grade = 'C';
}else{
grade = 'D';
}
printf("점수는 %d, 등급은 %c", score, grade);
//결과 -> 점수는 86, 등급은 B
}
switch 조건문
변수 값이 이미 정해져 있는 상수들과 비교할 때는 switch 조건문이 유리하다.
void main(){
int score = 86;
char grade;
switch(score / 10){
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
default:
grade = 'D';
break;
}
printf("점수는 %d, 등급은 %c", score, grade);
//결과 -> 점수는 86, 등급은 B
}
09. 반복분
for 반복문
for 반복문은 반복의 3요소(시작 조건, 종결 조건, 조건 변화 수식)를 제일 단순하고 정확하게 표현한 반복문이다. 특히 시작과 끝이 명확한 반복 작업에 많이 사용된다.
예제)
void main(){
int sum = 0, num;
for(num = 1; num <= 5; num++){
printf("num(%d) + sum(%d) = ", num, sum);
sum += num;
printf("%d\n", sum);
}
printf("\n result : num = %d, sum : %d", num, sum);
}
//결과 -> num(1) + sum(0) = 1
// num(2) + sum(1) = 3
// num(3) + sum(3) = 6
// num(4) + sum(6) = 10
// num(5) + sum(10) = 15
//
// result : num = 6, sum : 15
for문이 반복의 3요소(시작조건, 종결조건, 조건변화 수식)를 사용할수 있도록 기본적인 형식을 제공하지만 그 형식을 꼭 지켜야하는 것은 아니다.
예제) 시작조건 생략
//시작조건은 이미 변수에서 초기화 했기 때문에 생략 가능
int sum = 0, num = 1;
for( ; num <= 5; num++){...}
//또는 시작조건에 쉼표를 사용하여 여러 개의 변수 초기화 가능
int sum, num;
for(sum = 0, num = 1; num<=5; num++){...}
예제) for 반복문으로 무한 루프 만들기(3요소를 모두 적지 않는 경우)
void main(){
int sum = 0;
int num = 1; //시작조건
for( ; ; ){ //무한루프
printf("num(%d) + sum(%d) = ", num, sum);
sum += num;
printf("%d\n", sum);
num++; //조건변화 수식
if(num > 5){ //반복문 종료
break;
}
}
printf("\n result : num = %d, sum : %d", num, sum);
}
//결과 -> num(1) + sum(0) = 1
// num(2) + sum(1) = 3
// num(3) + sum(3) = 6
// num(4) + sum(6) = 10
// num(5) + sum(10) = 15
//
// result : num = 6, sum : 15
while 반복문
while 반복문은 끝이 정해져 있지 않을 때 사용, 기약없는 반복문을 쓸 때 사용.
while(종결조건) { 명령문; }
예제)
void main(){
int sum = 0;
int num = 1; //시작조건
while(num <=5 ){ //종결조건
printf("num(%d) + sum(%d) = ", num, sum);
sum += num;
printf("%d\n", sum);
num++; //조건 변화 수식
}
printf("resut = num : %d, sum : %d", num, sum);
}
//결과 -> num(1) + sum(0) = 1
// num(2) + sum(1) = 3
// num(3) + sum(3) = 6
// num(4) + sum(6) = 10
// num(5) + sum(10) = 15
// resut = num : 6, sum : 15
결론적으로 3요소가 분명하게 정해져 있다면 for 반복문을, 시작조건이나, 조건 변화 수식이 다양하거나, 수치로 정할 수 없는 상황이라면 while문 을 사용하는게 편할 수 있다.
while 반복문으로 무한 루프 만들기
while 반복문은 ‘종결조건’을 생략할 수 없기 때문에 괄호 안에 상수값이나 수식을 반드시 적어야 한다. while(1){ … }
do~ while 반복문
while은 먼저 비교하고,
do while은 나중에 비교한다. 잘 쓰지는 않으며 명령문을 무조건 한번은 탄다.
void main(){
do{
명령문;
}while(종결조건);
}
예제) for 반복문을 중첩 사용해서 구구단 전체를 출력하기
void main(){
int step, i;
for(step = 2; step <=9; step++){
for(i = 1; i < 9; i++){
printf("%d * %d = %d\n", step, i, step*i);
}
}
}
//결과 - > 2 * 1 = 2
// 2 * 2 = 4
// ...
// 9 * 7 = 63
// 9 * 8 = 72
예제) 별찍기
#define max 5
void main(){
for(int col = 1; col <= max; col++){
for(int i = 1; i < col; i++){
printf("*");
}
printf("\n");
}
}
//결과 - > *
// **
// ***
// ****
예제) 뒤집어진 별찍기
#define max 5
void main(){
for(int col = max; col > 1; col--){
for(int i = 1; i < col; i++){
printf("*");
}
printf("\n");
}
}
//결과 -> ****
// ***
// **
// *
예제) 공백있는 별찍기
#define max 5
void main() {
int sc = 0;
for (int step = 1; step <= max; step += 2) {
sc = (max - step) / 2;
for (int s = 1; s <= sc; s++) {
printf(" ");
}
for (int i = 1; i <= step; i++) {
printf("*");
}
printf("\n");
}
}
// 결과 - > *
// ***
// *****
break 제어문
break는 하나의 반복문에만 미치기 때문에 중첩된 반복문에서도 하나의 반복문에만 적용된다.
따라서 특정 상황에서 반복문을 둘 다 종료시키고 싶다면 바깥쪽 반복문에도 조건문을 사용하여 break문을 적어줘야 한다.
void main(){
int m, n;
for(m = 5; m < 7; m++){
for(n = 0; n < 3; n++){
if(m == 5 && n ==1){ //m값은 5이고 n값은 1일 때 break문 수행
break;
}
printf("m(%d) - n(%d)", m, n);
}
if(m == 5 && n == 1){
break;
}
}
}
//결과 -> m(5) - n(0)
continue 제어문
continue문은 1회성 취소를 사용한다. (이번 반복은 skip이다 할 때 사용)
void main(){
int m;
for(m = 5; m < 8; m++){
if(m == 6){ //m값이 6일 때 continue문 수행
continue;
}
printf("m(%d)\n", m);
}
}
// 결과 -> m(5)
// m(7)
go to 문
go to ~~~;라고 선언 해주면 go to 문 만났을 때 ~~~라고 선언 해 준 부분으로 그냥 바로 이동해 버린다. go to 문은 되도록 사용하지 않는 것이 좋으며 실무에서 쓰면 돌맞는다. 걍 이런게 있다 정도로만~
Comments