제어 구조 Flow of control
프로그램은 보통 순차 제어 구조로 진행된다. sequential flow of control
그런데 어떤 경우에는 선택, 반복 구조를 차용해야 할 때가 있다.
선택 구조 : a choice of action
if, if-else, switch
반복 구조 : repetition
while, for, do
Relational, Equality, Logical operators
true인 경우 nonzero value
false인 경우 zero value 리턴함
relational : < <= > >=
equality : == !=
logical operators : && ||
Relational operators and expressions
< <= > >= 등이 있다.
만약 (a < b)가 true이면, 1을 return하고
false이면, 0을 return한다.
산술적인 형 변환
기계가 취급을 할 때는 a < b 비교 연산자를 a-b < 0과 같이 실행한다.
equality operators and expressions
== !=
logical operators and expressions
!expr
!expr는 unary negation 부정 연산자
not expr 정도로 이해해두자
똑같이 true이면 1 false이면 0
|| logical or
&& logical and
&&가 ||보다 우선순위 높다.
i && j && k : 3 or 3 or 3 : 1
short circuit evaluation
참인지 거짓인지 결과가 나오면, 끝까지 수행하지 않고 탈출한다.
예를 들면, expr1 && expr2 구문에서 expr1이 false인 경우(zero)
아니면 expr1 || expr2에서 expr1이 true인 경우(nonzero)
compound statement
{}으로 묶음
expression and empty statement
expression statement 단위는 ;으로 정함
if and if-else statements
while statement
while ((c=getchar())==' ')
;
특정한 input을 패스하기 위해 사용하는 코드
for statement
for (int i =1;i<=10;i++)
factorial *= i;
comma operator
expr1, expr2;
expr1 실행한 뒤에 expr2 실행함
do statement
#include <stdio.h>
int main(void){
int error = 1, n=0;
do {
printf("input");
scanf("%d", &n);
error = (n<=0);
if (error) {
printf("ERROR");
}
} while (!error);
return 0;
}
break and continue statements
break
loop나 switch문에서 탈출하게 해준다.
#include <stdio.h>
#include <math.h>
int main(void){
double x;
while (1) {
scanf("%lf", &x);
if (x<0.0){
break;
}
printf("%f\n", sqrt(x));
}
}
* math.h 등 포함시켰을 때는 gcc -o c c.c -lm 주의 *
continue
#include <stdio.h>
int main(void){
char c;
for (int i =0;i<10;++i){
c = getchar();
if (c>='0' && c<='9')
continue;
printf("%c", c);
}
return 0;
}
switch statement
if else랑 유사함
기본 구조는 switch (c) { // c는 integral type이어야 한다. case 'a' : // 수행할 문장 break; ... default: // } |
conditional operator
expr1 ? expr2 : expr3
expr1이 true이면, expr2 수행
expr1이 false이면, expr3 수행
exercise 1
피보나치 수열
f0 = 0
f1 = 1
fn+1 = fn + fn-1
#include <stdio.h>
int fib(int);
int main(void){
int i;
scanf("%d", &i);
for (int j = 0;j<=i;j++){
printf("%d\n", fib(j));
}
return 0;
}
int fib(int k){
if (k==0){
return 0;
}
else if (k==1){
return 1;
}
else {
return (fib(k-1) + fib(k-2));
}
}
exercise 2
sqrt a
#include <stdio.h>
#include <math.h>
double newsqrt(double);
int main(void){
double tmp = 0;
while (tmp >= 0){
scanf("%lf", &tmp);
printf("%f\n", newsqrt(tmp));
}
return 0;
}
double newsqrt(double tmp){
return sqrt(tmp);
}
'Computer Science > C' 카테고리의 다른 글
C언어 9강 | 구조체 Structures (0) | 2021.12.17 |
---|---|
C언어 6강 | Arrays, Pointers, and Strings | 중요! (0) | 2021.12.16 |
C언어 3강 | 데이터 타입 | char, int(short, long,unsigned), float, typedef (0) | 2021.12.16 |
C언어 2강 | 어휘 요소와 연산자 Lexical Elements & Operators (0) | 2021.12.15 |
C 언어 1강 | 알고리즘 사고, C 언어 역사, Hello World! (0) | 2021.12.14 |