-
*제어문(control statement)
조건문(if, switch, goto)과 반복문(while, for, continue)이 있다.
*if문
참인 경우 실행됨. if(조건식)
예제) 문자를 입력받고 대문자, 소문자, 그 외 문자로 분류.
#define _CRT_SECURE_NO_WARNINGS //scanf 사용하기 위한 정의. #include<stdio.h> int main(void) { char ch; printf("문제를 입력하시오:"); scanf("%c", &ch); if (ch >= 'A' && ch <= 'Z') printf("%c는 대문자입니다.\n", ch); else if (ch >= 'a' && ch <= 'z') printf("%c는 소문자입니다.\n", ch); else if (ch >= '0' && ch <= '9') printf("\"%c\"는 숫자입니다.\n", ch); // 큰다옴표 출력시 \(이스케이프) 이용. else printf("\"%c\"는 기타문자입니다.\n", ch); return 0; }
char 타입 변수에 들어간 입력받은 것을 정수로 해석하여 사용할 수도 있고 아니면 이것을 아스키 코드로 간주하여 문자로 사용할 수도 있다.
* switch 문
- if 문에서 가능한 실행 경로는 두 개인데, 실행 경로가 여러 개인 경우에는 switch 문을 사용하는 것이 좋다.
- default 문은 어떤 case 문과도 일치되지 않는 경우에 선택되어 실행된다. 만약 default 문이 없고 일치하는 case 문도 없다면
아무 것도 실행되지 않는다. (가급적 default 문 포함 시키는 것이 좋음)
- case절에 실수나 변수, 수식, 문자열을 사용하는 것은 컴파일 오류이다.
- break;가 없으면 해당 케이스를 실행 후 그 다음 케이스를 조건 일치 불일치와 상관없이 실행한다.
예제) 입력 받은 달이 몇 일까지 있는지 알려주는 프로그램
#define _CRT_SECURE_NO_WARNINGS //scanf 사용하기 위한 정의. #include<stdio.h> int main(void) { int month, days; printf("달을 입력하시오:"); scanf("%d", &month); switch (month) { case 2: days = 28; break; case 4: case 6: # break;가 없기 때문에 case 11의 days = 30;까지 실행된다. case 9: case 11: days = 30; break; default: days = 31; break; } printf("%d월은 %d일입니다.\n", month, days); return 0; }
cf. 숫자 외 입력을 받으면 오류가 뜸. 나중 포스팅에 숫자 외 입력을 처리하는 방법에 대해 논할 것임.
* goto 문
- goto문은 프로그램을 아주 복잡하게 만들기 때문에 유지보수에 어려움. goto문 사용하지 않는 것이 좋음.
- goto문은 원하는 위치(레이블)로 조건 없이 점프하게 하는 기능. (레이블은 점프를 원하는 위치에 이름을 붙인 것)
- 함수를 점프할 수는 없음.
goto error; ... ... ... error: printf("오류발생\n");
*EOF
End Of File 이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다(-1 값을 가지고 있다).
함수 호출의 실패나, 윈도우에서 ctrl + z , 리눅스에서 ctrl + d를 입력 했을 경우 EOF를 반환한다.
*while문
while(조건) 형식으로, 조건이 참이면 반복.
예제) 입력 받은 값 중에 최솟값을 출력한다.
#define _CRT_SECURE_NO_WARNINGS //scanf 사용하기 위한 정의. #include<stdio.h> #include<limits.h> // 최대값에 대한 정의를 포함한 헤더파일을 불러온다. int main(void) { int number, min_value = INT_MAX; // 일단 정수의 최댓값을 대입해둔다. printf("정수를 입력하시오\n 종료는 Ctrl+z\n"); while (scanf("%d", &number) != EOF) //입력 받은 값이 EOF이면 while을 실행하지 않는다. { if (number < min_value) // 입력 받은 값이 이전 입력값보다 작으면 최솟값으로 입력받는다. min_value = number; } printf("최솟값은 %d\n", min_value); return 0;
*continue
-> 조건문에 따른 continue의 동작 방식.
p.275 예제) 알파벳 소문자를 입력 받아 대문자로 바꿔주는 프로그램
#define _CRT_SECURE_NO_WARNINGS //scanf 사용하기 위한 정의. #include<stdio.h> int main(void) { char letter; printf("프로그램을 종료하려면 Q를 입력하시오.\n"); while (1) { printf("소문자를 입력하시오: "); scanf(" %c", &letter); //공백 문자 제외 if (letter == 'Q') // Q를 입력하면 프로그램 종료. break; // 반복문 탈출 if (letter < 'a' || letter > 'z') continue; // 반복문을 다시 실행한다. letter -= 32; // 아스키코드에서 소문자와 대문자는 32만큼 차이난다 printf("변환된 대문자는 %c입니다.\n", letter); } return 0;
*for 문
for(초기식 ; 조건식 ; 증감식)
초기식(initialization)은 반복 루프 전 한번만 실행. 변수 값 초기화.
조건식(expression)은 반복을 계속할 것인지 말 것인지 결정하는 수식. 관계식이나 논리식이어야 함.
증감식(increment)은 루프를 제어하는 변수를 증가시키거나 감소시킨다.
다양한 for 루프
1. for( ; ; ) -> 무한 루프
2. for( ; i<10 ; i++) -> 초기식이나 조건식, 증감식이 없을 수 있다.
3. for(i = 0, sum=0 ; i<100 ; i++) -> 초기화 수식에 콤마 연산자를 사용하여 2개 이상의 변수를 초기화시킬 수도 있다.
4. for(printf("반복시작), i=0 ; i<100; i++) -> 초기화 자리에 다른 문장도 들어갈 수 있다.
예제) 복리 이자 계산기
#define _CRT_SECURE_NO_WARNINGS //scanf 사용하기 위한 정의. #include<stdio.h> int main(void) { int i, years; double total, rate, investment; printf("원금:"); scanf("%lf", &investment); printf("이율(%%): "); // %가 형식지정자로 쓰이므로 출력하려면 %앞에 %를 붙여줘야한다. scanf("%lf", &rate); printf("기간(년):"); scanf("%d", &years); printf("==================\n"); printf("연도 원리금\n"); printf("==================\n"); total = investment; rate /= 100.0; // 복합대입연산자/=는 rate= rate / 100.0 을 의미 for (i = 0; i < years; i++) { total = total * (1 + rate); // 복합대입연산자 *=로 써도 됨. printf("%2d %10.1f\n", i + 1, total); // &10.1f은 소수점 이하 1자리까지 표시 } return 0; }
출처 : 쉽게 풀어쓴 C언어 Express
'Programming 기초 > C Language' 카테고리의 다른 글
C 언어 기초#7 배열, 정렬, 탐색(순차탐색, 이진탐색), 다차원배열 (0) 2023.04.12 C 언어 기초#6 함수와 변수, 가변매개변수함수, 순환함수 (0) 2023.04.11 C 언어 기초 #4 여러가지 연산자(증감, 복합대입, 형변환, 관계, 논리, 조건, 콤마, 비트단위) (0) 2023.04.07 C 언어 기초 #3 상수, 자료형, 진법, 부동소수점, escape sequence, 오버/언더 플로우 (0) 2022.11.08 C 언어 기초 #2 printf(), scanf() (0) 2022.11.08