• 검색 결과가 없습니다.

C 언어 맛보기 #2 – 제어구조(if, while, for)

N/A
N/A
Protected

Academic year: 2022

Share "C 언어 맛보기 #2 – 제어구조(if, while, for)"

Copied!
17
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

C 언어 맛보기 #2 – 제어구조(if, while, for)

부산대학교 전기컴퓨터공학부 김종덕 ([email protected])

본 강의 자료는 문정욱 교수님의 강의 자료를 활용하여 작성하였습니다.

(2)

Intelligence Networking and Computing Lab.

강의의 목표

❖ if, if-else, while, for 등 C 언어의 대표적 제어 구조를 살펴 보고 기본 사용법을 익힌다.

▪ 제어 흐름(Flow of Control)이란 프로그램에서 실행되는 문장들의 실행 순서

▪ 특별히 지정하지 않으면, 프로그램의 실행은 첫 번째 문장에서 시작하여 한 번 에 한 문장씩 순차적으로 실행된다

▪ 제어 구조(Control Construct)란 프로그램에서 실행되는 문장들의 실행 순서를 제어하는 문장인데 이 장에서는 다음 두 가지 구조를 우선 살펴 본다.

▪ 조건문(conditional statement) 중 if 문, if-else 문

• if 문은 조건에 따라 실행할 문장을 선택한다.

▪ 반복문(repetition statement) 혹은 루프(loop) 중 while 문, for 문

• 루프는 특정 문장을 여러 번 반복해서 실행하게 한다

❖ 배열(Array)의 필요성과 기본 사용법을 익힌다.

2

(3)

if 문의 개념

❖ 무조건 문장 수행 ❖ 조건 문장 수행

#include <stdio.h>

int main(void) { int a;

scanf("%d", &a);

printf("a==one\n");

return 1;

}

#include <stdio.h>

int main(void) { int a;

scanf("%d", &a);

if (a==1)

printf("a==one\n");

return 1;

}

논리적 오류

(4)

if 문의 개념

❖ if-statement

▪ 조건을 만족하면  괄호 안의 조건 수 식(Expression)의 논리 값이 참이면

▪ 문장(Statement1)을 한 번 수행한다.

4

if-statement:

if (expression) statement1;

a statement (if-statement)

a statement

#include <stdio.h>

int main(void) { int a;

scanf("%d", &a);

if (a==1)

printf("a==one\n");

return 1;

}

(5)

if 문과 블록

❖ if-statement

▪ If는 한 개의 statement에만 관여함

▪ 그 뒤에 따로 오는 두 번째 문장에는 관 여하지 않음

int main(void) { int a;

scanf("%d", &a);

if (a==1)

printf("a==one\n");

printf("after if-stat\n");

return 1;

}

Always executed

int main(void) { int a;

scanf("%d", &a);

if (a==1) {

printf("a==one\n");

printf("after if-stat\n");

}

return 1;

a block == a statement

(6)

관계/논리 연산자

❖ 연산의 결과가 Boolean 값

▪ 참(True:1) 또는 거짓(False:0)

❖ 관계(Relational) 연산자

6

int main(void) {

int a=1,b=2,c=3;

if (a+b == c) printf("a+b==c\n");

if (a != b+c) printf("a!=b+c");

if (a < b) printf("a<b\n");

if (a <= b) printf("a<=b\n");

if (c > b) printf("c>b\n");

if (c >=b) printf("c>=b\n");

return 1;

}

Relational Operation Operator

Equal ==

Not Equal !=

Less than <

Equal of Less than <=

Greater than >

Equal of Greater than >=

생성되는 실행 파일명의 변경

(7)

관계/논리 연산자

❖ 논리(logical) 연산자

❖ 연산자 우선 순위에 유의

▪ Ex) 7-4/2 vs. (7-4)/2

▪ 괄호를 활용하여 논리 오류를 방지

Logical Operation Operator

Logical And &&

Logical Or ||

Logical Not !

int main(void) {

int a=1,b=2,c=3;

if (a<b && c>b) printf("a<b && c>b\n");

if (a<b || c<b) printf("a<b || c<b\n");

if ( ! b>c ) printf("! b>c\n");

return 1;

}

test3

int main(void) {

int a=1,b=2,c=3;

if (a<b && c>b) printf("a<b && c>b\n");

if (a<b || c<b) printf("a<b || c<b\n");

if ( !(b>c) ) printf("!(b>c)\n");

return 1;

}

test2

(8)

if-else 문의 개념

❖ if-else statement

▪ 조건 수식 만족하면 statement1 수행, 만족하지 않으면 statement2 수행

8

if-else statement:

if (expression) statement1;

else statement2;

int main(void) {

int a;

scanf("%d",&a);

if (a==1)

printf("a == one\n");

else

printf("a == other\n");

return 1;

}

ifelse

(9)

if-else 문과 블록

❖ 블록을 활용하여 복합문장 (Compound Statement) 구성

▪ Python과 다름 !!!

❖ 블록을 사용하지 않을 경우  Syntax Error

▪ Syntax Error가 정확히 코드의 어느 부분에서 발생하며 그 이유가 무엇인지 설명해보라.

int main(void) {

int a;

scanf("%d",&a);

if (a==1) {

printf("a == one\n");

printf("a == 1\n");

} else

printf("a == other\n");

return 1;

}

ifelse2

int main(void) {

int a;

scanf("%d",&a);

if (a==1)

printf("a == one\n");

printf("a == 1\n");

else

printf("a == other\n");

return 1;

}

ifelse3

a if-else statement1

(10)

중첩 if문

10

int main(void) {

int a,b;

scanf("%d",&a);

scanf("%d",&b);

if (a==1) if (b==1)

printf("a == 1, b == 1\n");

else

printf("a == 1, b != 1\n");

else

printf("a != 1\n");

return 1;

}

nestedif

a if-else statement1

int main(void) {

int a,b;

scanf("%d",&a);

scanf("%d",&b);

if (a==1)

printf("a == 1\n");

else

if (b==1)

printf("a != 1, b == 1\n");

else

printf("a != 1, b != 1\n");

return 1;

}

nestedif2

a if-else statement2

(11)

while 문의 개념

❖ if에서 문장 수행 횟수 ❖ While에서 문장 수행 횟수

❖ while statement

▪ 조건 수식(cond_expression)을 만족할 동안에 loop_statement를 계속 수행

iftest

조건을 만족하면 1번 수행

int main(void) {

int a;

scanf("%d",&a);

if (a<5) {

printf("%d < 5\n", a);

a = a+1;

}

return 1;

}

whiletest

조건을 만족하면 계속 수행

int main(void) {

int a;

scanf("%d",&a);

while (a<5) {

printf("%d < 5\n", a);

a = a+1;

}

return 1;

}

while statement:

while (cond_expression) loop_statement;

(12)

while 문의 동작 순서

12

int main(void) {

int i;

i=1;

while (i<5) {

printf(“i = %d\n", i);

i = i+1;

}

return 1;

}

③④

i ← 1

i < 5

print i

i ← i+1

Yes No

i==1: ① → ② → ③

i==2: ④ → ② → ③

i==3: ④ → ② → ③

i==4:

i==5:

→ ⑤

(13)

for 문의 개념

❖ for statement

▪ 조건 수식(cond_expression)을 만족할 동안에 loop_statement를 계속 수행

▪ init_clause

: 초기화 구문

▪ cond_expression

: 조건 수식

▪ iteration_expression

: loop_statement 수행 이후 다시 cond_expression 확인 전에 수행 되는 증감 수식

for statement:

for (init_clause;

cond_expression; iteration_expression) loop_statement;

int main(void) {

int i;

for (i=1; i<5; i=i+1) {

printf(“i = %d\n", i);

}

return 1;

}

(14)

for 문의 동작 순서

14

int main(void) {

int i;

for (i=1; i<5; i=i+1) {

printf(“i = %d\n", i);

}

return 1;

}

i ← 1

i < 5

print i

i ← i+1

Yes No

i==1: ① → ② → ③

i==2: ④ → ② → ③

i==3: ④ → ② → ③

i==4:

i==5:

→ ⑤

(15)

배열(Array)의 개념

❖ 동일한 자료형과 작업 수행이 필요한 많은 변수가 필요한 경우?

int main(void) {

int i;

int a0, a1, a2;

a0 = 0*0;

a1 = 1*1;

a2 = 2*2;

printf("%d\n", a0);

printf("%d\n", a1);

printf("%d\n", a2);

return 1;

}

int main(void) {

int i;

int a0, a1, a2, ..., a99;

a0 = 0*0;

a1 = 1*1;

a2 = 2*2;

...

a99 = 99*99;

printf("%d\n", a0);

printf("%d\n", a1);

printf("%d\n", a2);

...

printf("%d\n", a2);

return 1;

} 변수가 100개가 필요하다면?

(16)

배열(Array)의 개념 – 반복문 개념의 적용?

16

int main(void) {

int i;

int a0, a1, a2, ..., a99;

a0 = 0*0;

a1 = 1*1;

a2 = 2*2;

...

a99 = 99*99;

printf("%d\n", a0);

printf("%d\n", a1);

printf("%d\n", a2);

...

printf("%d\n", a2);

return 1;

}

int main(void) {

int i;

int a0~99;

for (i=0; i<=99; i=i+1) ai = i*i;

for (i=0; i<=99; i=i+1) printf("%d\n", ai);

return 1;

}

int main(void) {

int i;

int

a[100]

; //a[0]~a[99]

for (i=0; i<=99; i=i+1)

a[i]

= i*i;

for (i=0; i<=99; i=i+1) printf("%d\n",

a[i]

);

return 1;

} Syntax Error!

(17)

배열(Array)의 개념

❖ 배열

▪ 같은 자료형(Type)의 연속된 변수들로 구성된 복합 변수 : Identifier[n]

▪ 길이(크기)는 정수 값 : n

▪ 색인(Index)의 범위는 0~n-1

▪ 색인 범위를 벗어나면 Run-Time Error 발생할 수 있음

❖ 배열의 메모리 구조

▪ 프로그래밍에서 널리 쓰이는 기초 자료 구조 (Data Structure), Sequential Memory

int main(void) {

int i;

int

a[3]

; //a[0],a[1],a[2]

a[0] = 2;

a[1] = 9;

a[2] = 8;

for (i=0; i<3; i=i+1) printf("%d\n",a[i]);

return 1;

}

Address Memory Cell Array

0x2872

2 a[0]

0x2876

9 a[1]

0x287A

8 a[2]

0x287E

참조

관련 문서

Contains defined constants specifying the implementation-specific properties of the floating-point library, such as the minimum difference between two diffe rent floating-point

본 논문이 완성되기까지 변함없는 지도와 격려를 아끼지 않으셨던 허향진 교수님과, 따뜻한 사랑으로 많은 가르침을 주신 김경호 교수님, 최병길 교수님,

본 연구의 제언은 다음과 같다.첫째,본 연구에서는 다양한 지역사회 기술 중에 복 합매체 자료를 활용하여 극장 이용 기술의 수행에 미치는 효과를

본 연구에서는 해색자료의 시간해상력을 고려한 해양관측기술을 적용하기 위해 Aqua 에 탑재된 MODIS(Moderate Resolution Imaging Spectroradiometer) 센서에서

본 자료는 금융투자분석사가 신뢰할만 하다고 판단되는 자료와 정보에 의거하여 만들어진 것이지만, 당사와 금융투자분석사가 그 정확성이나 완전성을 보장할 수는 없습 니다..

본 자료는 금융투자분석사가 신뢰할만 하다고 판단되는 자료와 정보에 의거하여 만들어진 것이지만, 당사와 금융투자분석사가 그 정확성이나 완전성을 보장할 수는 없습 니다..

본 자료는 금융투자분석사가 신뢰할만 하다고 판단되는 자료와 정보에 의거하여 만들어진 것이지만, 당사와 금융투자분석사가 그 정확성이나 완전성을 보장할 수는 없습 니다..

본 자료는 금융투자분석사가 신뢰할만 하다고 판단되는 자료와 정보에 의거하여 만들어진 것이지만, 당사와 금융투자분석사가 그 정확성이나 완전성을 보장할 수는 없습 니다..