[ANDROID 국비과정] 2023.01.06 - 안드로이드 앱개발자 과정
C언어
제어문 : 프로그램의 진행 순서를 제어(변경)
조건문
if, if else
- 조건문 if 문법 : if ( 조건식(비교연산) ) { 참 일때 실행할 코드 }
#include <stdio.h>
void main()
{
int age;
printf("나이를 입력하세요 : ");
scanf_s("%d", &age);
if (age >= 20) {
// 조건이 true 일때 실행할 영역
printf("환영합니다. 문나이트 입니다.\n");
printf("메인 스테이지로 이동하세요.\n");
int num; // if 문 실행시에만 생성되는 변수
printf("몇명이십니까?");
scanf_s("%d", &num);
printf("%d 명 좌석으로 안내하겠습니다.\n", num); }
}
printf("\n 프로그램 종료");
}
- - 만일 조건식의 값이 거짓일 경우에도 무언갈 하고싶다면? - else 이용!
#include <stdio.h>
void main() {
int age;
printf("나이를 입력하세요 : ");
scanf_s("%d", &age);
if (age >= 20) {
// 조건이 true 일때 실행할 영역
printf("환영합니다. 문나이트 입니다.\n");
printf("메인 스테이지로 이동하세요.\n");
int num; // if 문 실행시에만 생성되는 변수
printf("몇명이십니까?");
scanf_s("%d", &num);
printf("%d 명 좌석으로 안내하겠습니다.\n", num);
}
else {
// 조건이 false 일 때 실행할 영역
printf("꺼져!\n");
printf("조금 더 나이먹고 오세요.\n");
}
printf("\n 프로그램 종료");
}
- if 문 혹은 else 문 안에서도 if문의 중첩이 가능하다!
#include <stdio.h>
void main() {
int age;
printf("나이를 입력하세요 : ");
scanf_s("%d", &age);
if (age >= 20) {
// 조건이 true 일때 실행할 영역
if (age >= 40) {
// 중첩 if 문
printf("아~~ 죄송합니다 자리가 없네요~~ \n");
}
else {
printf("환영합니다. 문나이트 입니다.\n");
printf("메인 스테이지로 이동하세요.\n");
int num; // if 문 실행시에만 생성되는 변수
printf("몇명이십니까?");
scanf_s("%d", &num);
printf("%d 명 좌석으로 안내하겠습니다.\n", num);
}
}
else {
// 조건이 false 일 때 실행할 영역
printf("꺼져!\n");
printf("조금 더 나이먹고 오세요.\n");
}
printf("\n 프로그램 종료");
}
- if문을 이용한 학점 관리 프로그램 예제
#include <stdio.h> void main() { printf("점수를 입력하면 학점을 계산해주는 프로그램\n\n"); int score; printf("점수입력 : "); scanf_s("%d", &score); if (score >= 90 && score <= 100) printf("A 학점입니다\n"); else if (score >= 80) printf("B 학점입니다\n"); else if (score >= 70) printf("C 학점입니다\n"); else if (score >= 60) printf("D 학점입니다\n"); else if (score >= 50) printf("F 학점입니다\n"); else printf("점수를 잘못 입력했습니다.\n"); printf("\n 프로그램 종료"); }
switch
- 조건문 switch 문법
switch(변수 이름) {
case 변수값 :
실행문;
}
- 강아지 돌보기 프로그램을 짜보자!
#include <stdio.h>
void main() {
printf("원하는 메뉴를 입력하세요\n");
printf("1. 밥주기\n");
printf("2. 산책하기\n");
printf("3. 목욕하기\n");
printf("메뉴번호 입력 : ");
int menu;
scanf_s("%d", &menu);
switch (menu) {
case 1:
printf("와구와구\n");
case 2:
printf("신난다\n");
case 3:
printf("아우씨 씻기싫어\n");
}
printf("\n 프로그램 종료");
}
입력
1
출력
와구와구
신난다
아우씨 씻기싫어
switch 문의 경우, 결과 값에서도 볼 수 있듯, 차례대로 실행됨을 알 수 있다. 하지만 우리가 원하는것은, 2번을 선택했을때, 신난다만 출력하는것이다. 여기서 필요한것이 break 키워드 이다.
switch (menu) {
case 1:
printf("와구와구\n");
break;
case 2:
printf("신난다\n");
break;
case 3:
printf("아우씨 씻기싫어\n");
break;
}
입력
1
출력
와구와구
break 키워드를 사용하여, menu 의 값이 1일때의 상황만 출력해주었다. 그런데, 1일때 뿐 아니라 사용자가 만약 5라는 값을 넣거나 1,2,3 이외의 어떤값을 넣었을 때는 어떻게 될까?
- default
그러한 경우에 사용할 수 있는 키워드는 default 이다. case 별로 나눠둔 어떠한 상황도 아닐 경우에 실행되는 구문이다.
switch (menu) {
case 1:
printf("와구와구\n");
break;
case 2:
printf("신난다\n");
break;
case 3:
printf("아우씨 씻기싫어\n");
break;
default:
printf("잘못된 번호 입니다.\n");
}
입력
5
출력
잘못된 번호 입니다.
- switch 문 주의할 점
앞서 문법에서 switch(변수 이름) 이라고 얘기했는데, 여기서 들어오는 변수는 정수만 가능하다.
반복문
while
- 반복문 while 문법 : while(조건식) { 참일때 실행되는 코드 }
include <stdio.h> void main() { int level = 1; // 변수의 초기값 while (level < 10) // 제어 조건 { printf("훈련실시 .. 레벨 1 증가\n"); level++; // 제어변수 연산 } printf("\n 프로그램 종료"); }
while 반복문에 대해서 알기 위해 다음 3가지를 먼저 기억하자.
- 제어변수의 초기화
- 제어 조건
- 제어변수의 연산
while 반복문에는 for 반복문과는 다르게 반복횟수를 지정해주는 문법은 따로 없다. 그렇기 때문에 위의 조건들을 조작하여 횟수를 지정해주어야 한다는 점을 기억하자.
while 무한루프
논리적인 조건들을 토대로 while 문의 반복횟수를 정해주어야 한다고 하였다. 다만, 어떠한 경우에는 반복횟수를 무한대로 늘려주어야 하는 상황도 발생한다. 어떤 방식으로 while 문의 반복횟수를 무한대로 늘릴 수 있을까? 다음 코드를 보자.
#include <stdio.h>
void main() {
int i = 0;
while (1) {
i++;
printf("%d", i);
}
}
while문의 조건에 들어가는 내용이 항상 참 이라면, while 문은 끝나지 않고 항상 반복이 될것이다. 그렇기 때문에 조건에 1을 넣어준다면, while 문을 무한대로 실행시킬 수 있다.
- do-while 문
while 문의 경우, 조건식이 참 이어야만 실행코드가 실행된다. do-while 문의 경우는 조금 다른데, do 다음의 코드를 처음 한번은 실행하고 그 뒤에 참 거짓을 판별해 반복을 진행한다. 다음 코드를 보자.
#include <stdio.h>
void main() {
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 10 && i != 0);
}
위 코드가 do 안쪽 코드가 먼저 한번 실행됨을 보여주는 예제이다.
for
- 반복문 for 문법 : for(제어변수 초기화 ; 제어조건 ; 제어변수 연산) { 실행 코드 }
#include <stdio.h>
void main() {
int index;
for (index = 0; index < 10; index++) {
printf("%d\n", index);
}
}
- for 무한루프
for 문법에서 for 문을 반복시키는 부분은 제어 조건에 관한 부분이다. 그렇기 때문에 이 조건을 살짝만 변형하면 for 문도 while 문과 같이 무한반복이 가능하다. 제어 조건이 참일때만 for 문 안에 코드가 반복되기 때문에, 항상 참인 제어조건을 만들어주면 된다. 즉, 다음과 같다.#include <stdio.h> void main() { int index; for (index = 0; 1 ; index++) { printf("%d\n", index); } }
추가적으로, 1이 대신에 제어 조건 부분을 비워두게 되도 같은 의미를 가진다. 마찬가지로, 제어변수 초기화, 제어변수 연산에 관해서도 비워둘 수 있다.
#include <stdio.h>
void main() {
int index;
for (index = 0; ; index++) {
printf("%d\n", index);
}
}
- 중첩 for 문
다음은 별 찍기 예제이다.#include <stdio.h> void main() { for (int i = 1; i <= 5; i++) { for (int j = 0; j < i; j++) { printf("*"); } printf("\n"); } }
기타 제어문
break 와 continue
다음 그림을 살펴보자.
break 는 반복을 종료하고 반복문 다음 문장을 실행하게 된다. 즉, 반복조건이 어찌됐던간에 break 를 만나면 그 반복문은 종료가 된다. 반면에 continue 의 경우, 반복문에 조건부분으로 돌아가게 된다. 다만, 기존에 값들은 그대로 유지가 된 채로 반복이 되기 때문에 주의해야 한다.
또한 break 와 continue 의 경우 루프 내에서만 사용이 가능하다는 점 꼭 알아두자!